Java EE Session Beans

1. Introduksjon

Enterprise Session Beans kan i stor grad klassifiseres i:

  1. Statsløse sesjonsbønner
  2. Stateful Session Beans

I denne raske artikkelen skal vi diskutere disse to hovedtypene øktbønner.

2. Oppsett

Å bruke Enterprise Beans 3.2, sørg for å legge til den nyeste versjonen i avhengigheter delen av pom.xml fil:

 javax javaee-api 7.0 gitt 
Den siste avhengigheten finner du i Maven Repository. Denne avhengigheten sørger for at alle Java EE 7 APIer er tilgjengelige i løpet av kompileringstiden. De sørget for omfanget sikrer at når det er utplassert avhengigheten vil bli gitt av containeren der den har blitt distribuert.

3. Statsløse bønner

En statsløs øktbønne er en type bedriftsbønne som ofte brukes til å gjøre uavhengige operasjoner. Den har ingen tilknyttet klienttilstand, men den kan bevare forekomsttilstanden.

La oss se på et eksempel for å demonstrere hvordan en statsløs bønne fungerer.

3.1 Lage statsløs bønne

La oss først lage StatelessEJB bønne. Vi bruker @Stateless kommentar for å markere bønnen som statsløs:

@Stateless public class StatelessEJB {public String name; }

Deretter oppretter vi den første klienten til ovennevnte statsløse bønne, kalt EJBClient1:

offentlig klasse EJBClient1 {@EJB offentlig StatelessEJB statelessEJB; }

Vi erklærer deretter en annen klient, kalt EJBClient2, som får tilgang til samme statsløse bønne:

offentlig klasse EJBClient2 {@EJB offentlig StatelessEJB statelessEJB; }

3.2 Testing av statsløs bønne

For å teste EJBs statsløshet, kan vi bruke de to klientene vi erklærte ovenfor på følgende måte:

@RunWith (Arquillian.class) offentlig klasse StatelessEJBTest {@Inject private EJBClient1 ejbClient1; @Injiser privat EJBClient2 ejbClient2; @Test offentlig ugyldig gittOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState () {ejbClient1.statelessEJB.name = "Client 1"; assertEquals ("Client 1", ejbClient1.statelessEJB.name); assertEquals ("Client 1", ejbClient2.statelessEJB.name); } @Test offentlig ugyldig gittOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState () {ejbClient1.statelessEJB.name = "Client 1"; ejbClient2.statelessEJB.name = "Klient 2"; assertEquals ("Client 2", ejbClient2.statelessEJB.name); } // Oppsettkode for Arquillian fjernet for kortfattethet}

Vi starter med å injisere de to EBJ-klientene i enhetstesten.

Så, i den første testmetoden, setter vi Navn variabel i EJB som ble injisert i EJBClient1 til verdien Oppdragsgiver 1. Nå, når vi sammenligner verdien av Navn variabel i begge klienter, bør vi se at verdien er lik. Dette viser at tilstand ikke er bevart i statsløse bønner.

La oss demonstrere at dette er sant på en annen måte. I den andre testmetoden ser vi at når vi setter Navn variabel i den andre klienten den 'overskriver' hvilken verdi som ble gitt til den via ejbClient1.

4. Stateful Beans

Stateful session bønner opprettholder tilstand både innenfor og mellom transaksjoner. Derfor er hver stateful session bønne assosiert med en bestemt klient. Beholdere kan lagre og hente tilstanden til en bønne automatisk mens de administrerer forekomster av stateful session beans.

4.1 Lage Stateful Bean

En stateful session bønne er merket med @Stateful kommentar. Koden for den stateful bean er som følger:

@ Stateful public class StatefulEJB {public String name; }

Den første lokale klienten for vår stateful bønne er skrevet som følger:

offentlig klasse EJBClient1 {@EJB offentlig StatefulEJB statefulEJB; }

En annen klient ringte EJBClient2 er også opprettet akkurat som EJBClient1:

offentlig klasse EJBClient2 {@EJB offentlig StatefulEJB statefulEJB; }

4.2 Testing av Stateful Bean

Funksjonen til den stateful bean er testet i EJBStatefulBeanTest enhetstest på følgende måte:

@RunWith (Arquillian.class) offentlig klasse StatefulEJBTest {@Inject private EJBClient1 ejbClient1; @Injiser privat EJBClient2 ejbClient2; @Test offentlig ugyldig gittOneStatefulBean_whenTwoClientsSetValueOnBean _thenClientStateIsMaintained () {ejbClient1.statefulEJB.name = "Client 1"; ejbClient2.statefulEJB.name = "Klient 2"; assertNotEquals (ejbClient1.statefulEJB.name, ejbClient2.statefulEJB.name); assertEquals ("Client 1", ejbClient1.statefulEJB.name); assertEquals ("Client 2", ejbClient2.statefulEJB.name); } // Oppsettkode for Arquillian fjernet for kortfattethet}

Som før blir de to EJB-klientene injisert i enhetstesten. I testmetoden kan vi se at verdien av Navn variabel settes via ejbClient1 klienten og opprettholdes selv om verdien av Navn settes via ejbClient2 er annerledes. Dette demonstrerer at tilstanden til EJB opprettholdes.

5. Stateless vs. Stateful Session Bean

La oss nå ta en titt på den største forskjellen mellom de to typene øktbønner.

5.1 Statsløse bønner

  • Statsløse øktbønner opprettholder ingen tilstand hos klienten. Av denne grunn kan de brukes til å lage et utvalg av objekter som samhandler med flere klienter
  • Siden statsløse bønner ikke har noen stat per klient, er de bedre ytelsesmessige
  • De kan håndtere flere forespørsler fra flere klienter parallelt og
  • Kan brukes til å hente gjenstander fra databaser

5.2 Stateful Beans

  • Stateful session beans kan opprettholde tilstanden med flere klienter, og oppgaven deles ikke mellom klienter
  • Staten varer hele økten. Etter at økten er ødelagt, beholdes ikke staten
  • Beholderen kan serieiseres og lagres tilstanden som en foreldet tilstand for fremtidig bruk. Dette gjøres for å spare ressurser på applikasjonsserveren og for å støtte bønnefeil og er passivering
  • Kan brukes til å løse produsent-forbruker-type problemer

6. Konklusjon

Så vi har laget to typer øktbønner og tilhørende klienter for å påkalle metodene fra bønnene. Prosjektet demonstrerer oppførselen til de to hovedtypene øktbønner.

Som alltid er kildekoden for artikkelen tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found