Java EE-sessionbønner

1. Introduktion

Enterprise Session Beans kan bredt klassificeres i:

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

I denne hurtige artikel skal vi diskutere disse to hovedtyper af sessionbønner.

2. Opsætning

Sådan bruges Enterprise Beans 3.2, sørg for at tilføje den nyeste version til afhængigheder sektion af pom.xml fil:

 javax javaee-api 7.0 leveret 
Den seneste afhængighed kan findes i Maven Repository. Denne afhængighed sikrer, at alle Java EE 7 API'er er tilgængelige i løbet af kompileringstiden. Det stillet til rådighed anvendelsesområde sikrer, at når det er implementeret afhængigheden leveres af containeren, hvor den er blevet implementeret.

3. Statsløse bønner

En statsløs sessionbønne er en type virksomhedsbønne, der ofte bruges til at udføre uafhængige operationer. Den har ikke nogen tilknyttet klienttilstand, men den bevarer muligvis sin forekomsttilstand.

Lad os se på et eksempel for at demonstrere, hvordan en statsløs bønne fungerer.

3.1 Oprettelse af den statsløse bønne

Lad os først oprette StatsløsEJB bønne. Vi bruger @Stateless kommentar for at markere bønnen som statsløs:

@Stateless public class StatelessEJB {public String name; }

Derefter opretter vi den første klient af ovenstående statsløse bønne, kaldet EJB-klient 1:

offentlig klasse EJBClient1 {@EJB offentlig StatelessEJB statelessEJB; }

Vi erklærer derefter en anden klient, der hedder EJBClient2, der får adgang til den samme statsløse bønne:

offentlig klasse EJBClient2 {@EJB offentlig StatelessEJB statelessEJB; }

3.2 Test af den statsløse bønne

For at teste EJB's statsløshed kan vi bruge de to klienter, vi har erklæret ovenfor, på følgende måde:

@RunWith (Arquillian.class) offentlig klasse StatelessEJBTest {@Inject private EJBClient1 ejbClient1; @Injicér privat EJBClient2 ejbClient2; @Test offentlig ugyldighed givenOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState () {ejbClient1.statelessEJB.name = "Client 1"; assertEquals ("Client 1", ejbClient1.statelessEJB.name); assertEquals ("Client 1", ejbClient2.statelessEJB.name); } @Test offentlig ugyldighed givenOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState () {ejbClient1.statelessEJB.name = "Client 1"; ejbClient2.statelessEJB.name = "Klient 2"; assertEquals ("Client 2", ejbClient2.statelessEJB.name); } // Arquillian-opsætningskode fjernet for kortfattethed}

Vi starter med at indsprøjte de to EBJ-klienter i enhedstesten.

Derefter indstillede vi i den første testmetode navn variabel i EJB, der blev injiceret i EJB-klient 1 til værdien Klient 1. Nu, når vi sammenligner værdien af navn variabel i begge klienter, skal vi se, at værdien er ens. Dette viser, at tilstand ikke bevares i statsløse bønner.

Lad os demonstrere, at dette er sandt på en anden måde. I den anden testmetode ser vi, at når vi først har indstillet navn variabel i den anden klient 'overskriver' den værdi, der blev givet til den via ejbClient1.

4. Stateful Beans

Stateful session bønner opretholder tilstand både inden for og mellem transaktioner. Derfor er hver stateful session bønne knyttet til en bestemt klient. Beholdere kan gemme og hente tilstanden til en bønne automatisk, mens de administrerer instanspuljer af stateful session bønner.

4.1 Oprettelse af den statefulde bønne

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

@ Stateful public class StatefulEJB {public String name; }

Den første lokale klient til vores statefulde bønner er skrevet som følger:

offentlig klasse EJBClient1 {@EJB offentlig StatefulEJB statefulEJB; }

En anden klient ringede op EJBClient2 er også oprettet ligesom EJB-klient 1:

offentlig klasse EJBClient2 {@EJB offentlig StatefulEJB statefulEJB; }

4.2 Test af stateful Bean

Funktionaliteten af ​​den statefulde bønne testes i EJBStatefulBeanTest enhedstest på følgende måde:

@RunWith (Arquillian.class) offentlig klasse StatefulEJBTest {@Inject private EJBClient1 ejbClient1; @Injicér privat EJBClient2 ejbClient2; @Test offentlig ugyldighed givenOneStatefulBean_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); } // Arquillian-opsætningskode fjernet for kortfattethed}

Som før indsprøjtes de to EJB-klienter i enhedstesten. I testmetoden kan vi se, at værdien af navn variabel indstilles via ejbClient1 klient og vedligeholdes, selvom værdien af navn indstilles via ejbClient2 er anderledes. Dette viser, at EJB's tilstand opretholdes.

5. Statsløs vs. stateful session bønne

Lad os nu se på den største forskel mellem de to typer sessionbønner.

5.1 Statsløse bønner

  • Statsløse session bønner opretholder ingen tilstand hos klienten. Af denne grund kan de bruges til at oprette en pulje af objekter, der interagerer med flere klienter
  • Da statsløse bønner ikke har nogen stat pr. Klient, er de bedre ydeevne
  • De kan håndtere flere anmodninger fra flere klienter parallelt og
  • Kan bruges til at hente objekter fra databaser

5.2 Stateful Beans

  • Stateful session bønner kan opretholde tilstand med flere klienter, og opgaven deles ikke mellem klienter
  • Staten varer i hele sessionens varighed. Efter at sessionen er ødelagt, bevares staten ikke
  • Containeren kan serieiseres og gemme tilstanden som en uaktuel tilstand til fremtidig brug. Dette gøres for at spare applikationsserverressourcer og for at understøtte bønnefejl og er passivering
  • Kan bruges til at løse producent-forbruger-type problemer

6. Konklusion

Så vi har oprettet to typer sessionbønner og tilsvarende klienter til at påberåbe sig metoderne fra bønnerne. Projektet demonstrerer de to hovedtyper af session bønner.

Som altid er kildekoden til artiklen tilgængelig på GitHub.


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