Java EE-sessiebonen

1. Inleiding

Enterprise Session Beans kunnen grofweg worden ingedeeld in:

  1. Staatloze Sessiebonen
  2. Stateful Session Beans

In dit korte artikel gaan we deze twee hoofdsoorten sessiebonen bespreken.

2. Installatie

Enterprise Beans gebruiken 3.2, zorg ervoor dat u de nieuwste versie toevoegt aan het afhankelijkheden sectie van de pom.xml het dossier:

 javax javaee-api 7.0 voorzien 
De nieuwste afhankelijkheid is te vinden in de Maven Repository. Deze afhankelijkheid zorgt ervoor dat alle Java EE 7 API's beschikbaar zijn tijdens het compileren. De voorzien scope zorgt ervoor dat eenmaal ingezet; de afhankelijkheid wordt geleverd door de container waarin deze is geïmplementeerd.

3. Staatloze bonen

Een stateless sessionbean is een soort enterprise-bean die vaak wordt gebruikt om onafhankelijke bewerkingen uit te voeren. Het heeft geen gekoppelde clientstatus, maar het kan zijn instantiestatus behouden.

Laten we een voorbeeld bekijken om te laten zien hoe een staatloze boon werkt.

3.1 Het creëren van de staatloze boon

Laten we eerst het StaatloosEJB Boon. Wij gebruiken de @Stateless annotatie om de boon als staatloos te markeren:

@Stateless openbare klasse StatelessEJB {openbare tekenreeksnaam; }

Vervolgens maken we de eerste client van de bovenstaande staatloze boon, genaamd EJBClient 1:

openbare klasse EJBClient1 {@EJB openbaar StatelessEJB statelessEJB; }

We declareren dan een andere klant, genaamd EJBClient2, die toegang heeft tot dezelfde staatloze boon:

openbare klasse EJBClient2 {@EJB openbaar StatelessEJB statelessEJB; }

3.2 Testen van de staatloze boon

Om de staatloosheid van de EJB te testen, kunnen we de twee klanten die we hierboven hebben aangegeven op de volgende manier gebruiken:

@RunWith (Arquillian.class) openbare klasse StatelessEJBTest {@Inject private EJBClient1 ejbClient1; @Inject privé EJBClient2 ejbClient2; @Test openbare ongeldig gegevenOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState () {ejbClient1.statelessEJB.name = "Client 1"; assertEquals ("Client 1", ejbClient1.statelessEJB.name); assertEquals ("Client 1", ejbClient2.statelessEJB.name); } @Test openbare ongeldig gegevenOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState () {ejbClient1.statelessEJB.name = "Client 1"; ejbClient2.statelessEJB.name = "Client 2"; assertEquals ("Client 2", ejbClient2.statelessEJB.name); } // Arquillian setup-code verwijderd voor beknoptheid}

We beginnen met het injecteren van de twee EBJ-klanten in de unit-test.

Vervolgens stellen we bij de eerste testmethode de naam variabele in de EJB waarin werd geïnjecteerd EJBClient 1 naar de waarde Klant 1. Nu, als we de waarde van de naam variabele in beide clients, moeten we zien dat de waarde gelijk is. Dit toont aan dat de staat niet wordt bewaard in staatloze bonen.

Laten we aantonen dat dit op een andere manier waar is. In de tweede testmethode zien we dat zodra we de naam variabele in de tweede client ‘overschrijft 'het de waarde die eraan is gegeven via ejbClient1.

4. Stateful bonen

Stateful session beans behouden de status zowel binnen als tussen transacties. Dat is de reden waarom elke stateful sessionbean is gekoppeld aan een specifieke client. Containers kunnen de status van een bean automatisch opslaan en ophalen tijdens het beheren van instance-pools van stateful session beans.

4.1 De stateful boon maken

Een stateful session-bean is gemarkeerd met de @Stateful annotatie. De code voor de stateful bean is als volgt:

@Stateful openbare klasse StatefulEJB {openbare tekenreeksnaam; }

De eerste lokale client voor onze stateful bean wordt als volgt geschreven:

openbare klasse EJBClient1 {@EJB openbare StatefulEJB statefulEJB; }

Een tweede klant belde EJBClient2 wordt ook gemaakt net als de EJBClient 1:

openbare klasse EJBClient2 {@EJB openbare StatefulEJB statefulEJB; }

4.2 Testen van de stateful boon

De functionaliteit van de stateful bean wordt getest in het EJBStatefulBeanTest unit test op de volgende manier:

@RunWith (Arquillian.class) openbare klasse StatefulEJBTest {@Inject private EJBClient1 ejbClient1; @Inject privé EJBClient2 ejbClient2; @Test openbare ongeldig gegevenOneStatefulBean_whenTwoClientsSetValueOnBean _thenClientStateIsMaintained () {ejbClient1.statefulEJB.name = "Client 1"; ejbClient2.statefulEJB.name = "Client 2"; assertNotEquals (ejbClient1.statefulEJB.name, ejbClient2.statefulEJB.name); assertEquals ("Client 1", ejbClient1.statefulEJB.name); assertEquals ("Client 2", ejbClient2.statefulEJB.name); } // Arquillian setup-code verwijderd voor beknoptheid}

Net als voorheen worden de twee EJB-clients in de unit-test geïnjecteerd. In de testmethode kunnen we zien dat de waarde van de naam variabele wordt ingesteld via de ejbClient1 client en wordt gehandhaafd, ook al is de waarde van naam ingesteld via de ejbClient2 is anders. Dit toont aan dat de staat van de EJB wordt gehandhaafd.

5. Staatloze versus statige sessieboon

Laten we nu eens kijken naar het belangrijkste verschil tussen de twee soorten bonen.

5.1 Staatloze bonen

  • Staatloze sessiebonen onderhouden geen status bij de klant. Om deze reden kunnen ze worden gebruikt om een ​​pool van objecten te maken die communiceren met meerdere clients
  • Omdat staatloze bonen geen status per klant hebben, zijn ze qua prestaties beter
  • Ze kunnen meerdere verzoeken van meerdere klanten parallel en
  • Kan worden gebruikt voor het ophalen van objecten uit databases

5.2 Stateful Beans

  • Stateful session beans kunnen de status behouden met meerdere clients en de taak wordt niet gedeeld tussen clients
  • De toestand duurt voor de duur van de sessie. Nadat de sessie is vernietigd, wordt de status niet behouden
  • De container kan de staat serialiseren en opslaan als een verouderde staat voor toekomstig gebruik. Dit wordt gedaan om bronnen van applicatieservers te sparen en bean-fouten te ondersteunen en is passivering
  • Kan worden gebruikt om problemen van het type producent-consument op te lossen

6. Conclusie

Daarom hebben we twee soorten sessiebonen en bijbehorende clients gemaakt om de methoden van de bonen op te roepen. Het project demonstreert het gedrag van de twee belangrijkste soorten sessiebonen.

Zoals altijd is de broncode voor het artikel beschikbaar op GitHub.


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