Fazuľa Java EE

1. Úvod

Fazuľa Enterprise Session Beans sa dá zhruba rozdeliť na:

  1. Fazuľa bez štátnej príslušnosti
  2. Stavové fazule

V tomto rýchlom článku sa budeme zaoberať týmito dvoma hlavnými typmi fazule session.

2. Inštalácia

Používanie Enterprise Beans 3.2, nezabudnite pridať najnovšiu verziu do závislosti časť pom.xml spis:

 poskytnutý javax javaee-api 7.0 
Najnovšiu závislosť nájdete v úložisku Maven. Táto závislosť zaisťuje, že všetky API Java EE 7 sú dostupné počas kompilácie. The za predpokladu rozsah zaisťuje, že po nasadení; závislosť poskytne kontajner, kde bol nasadený.

3. Fazuľa bez štátnej príslušnosti

Bean bezstavovej relácie je typ podniku bean, ktorý sa bežne používa na vykonávanie nezávislých operácií. Nemá žiadny priradený stav klienta, ale môže zachovať svoj stav inštancie.

Pozrime sa na príklad, ktorý demonštruje, ako fazuľa bez štátnej príslušnosti funguje.

3.1 Vytvorenie fazule bez štátnej príslušnosti

Najskôr vytvorme Bez štátnej príslušnostiBE fazuľa. Používame @Bezstavový anotácia označenia fazule ako bez štátnej príslušnosti:

@Stateless public class StatelessEJB {public String name; }

Potom vytvoríme prvého klienta z vyššie uvedeného bezstavového fazule, tzv EJBClient1:

verejná trieda EJBClient1 {@EJB public StatelessEJB statelessEJB; }

Potom deklarujeme iného klienta s menom EJBClient2, ktorý pristupuje k rovnakému fazule bez štátnej príslušnosti:

verejná trieda EJBClient2 {@EJB public StatelessEJB statelessEJB; }

3.2 Testovanie fazule bez štátnej príslušnosti

Na otestovanie bezstavovosti EJB môžeme použiť dvoch klientov, ktorých sme deklarovali vyššie, nasledujúcim spôsobom:

@RunWith (Arquillian.class) verejná trieda StatelessEJBTest {@Inject private EJBClient1 ejbClient1; @Inject private EJBClient2 ejbClient2; @Test public void givenOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState () {ejbClient1.statelessEJB.name = "Klient 1"; assertEquals ("Klient 1", ejbClient1.statelessEJB.name); assertEquals ("Klient 1", ejbClient2.statelessEJB.name); } @Test public void givenOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState () {ejbClient1.statelessEJB.name = "Klient 1"; ejbClient2.statelessEJB.name = "Klient 2"; assertEquals ("Klient 2", ejbClient2.statelessEJB.name); } // Arquillianov nastavovací kód bol kvôli stručnosti odstránený}

Začneme injekciou dvoch klientov EBJ do testu jednotky.

Potom sme v prvej testovacej metóde nastavili názov premenná v EJB, do ktorej bol vstreknutý EJBClient1 na hodnotu Klient 1. Teraz, keď porovnávame hodnotu názov premenná u oboch klientov, mali by sme vidieť, že hodnota je rovnaká. To ukazuje, že stav sa v fazuliach bez štátnej príslušnosti nezachováva.

Ukážme si, že je to pravda, iným spôsobom. V druhej testovacej metóde vidíme, že akonáhle nastavíme názov premenná v druhom klientovi „prepíše“ akúkoľvek hodnotu, ktorá mu bola daná ejbClient1.

4. Stavové fazule

Stavové fazule session udržujú stav v rámci aj medzi transakciami. Preto je každý stavový objekt bean relácie spojený s konkrétnym klientom. Kontajnery môžu automaticky ukladať a načítavať stav fazule pri správe skupín inštancií stavových fazúľ relácie.

4.1 Vytvorenie stavovej fazule

Stavová fazuľa relácie je označená @Stateful anotácia. Kód stavovej fazule je nasledovný:

@Stateful public class StatefulEJB {public Názov reťazca; }

Prvý lokálny klient pre našu stavovú fazuľu je napísaný nasledovne:

verejná trieda EJBClient1 {@EJB public StatefulEJB statefulEJB; }

Volal sa druhý klient EJBClient2 sa tiež vytvára rovnako ako EJBClient1:

verejná trieda EJBClient2 {@EJB public StatefulEJB statefulEJB; }

4.2 Testovanie stavovej fazule

Funkčnosť stavovej fazule je testovaná v EJBStatefulBeanTest jednotkový test nasledujúcim spôsobom:

@RunWith (Arquillian.class) verejná trieda StatefulEJBTest {@Inject private EJBClient1 ejbClient1; @Inject private EJBClient2 ejbClient2; @Test public void givenOneStatefulBean_whenTwoClientsSetValueOnBean _thenClientStateIsMaintained () {ejbClient1.statefulEJB.name = "Klient 1"; ejbClient2.statefulEJB.name = "Klient 2"; assertNotEquals (ejbClient1.statefulEJB.name, ejbClient2.statefulEJB.name); assertEquals ("Klient 1", ejbClient1.statefulEJB.name); assertEquals ("Klient 2", ejbClient2.statefulEJB.name); } // Arquillianov nastavovací kód bol odstránený kvôli stručnosti}

Rovnako ako predtým boli do testu jednotky vstreknutí dvaja klienti EJB. Na testovacej metóde vidíme, že hodnota názov premenná sa nastavuje cez ejbClient1 klienta a je udržiavaná, aj keď je hodnota názov nastavený cez ejbClient2 je iný. To ukazuje, že stav EJB je zachovaný.

5. Bean bez štátnej príslušnosti vs. stavové zasadnutie

Teraz sa pozrime na hlavný rozdiel medzi týmito dvoma typmi fazule session.

5.1 Fazuľa bez štátnej príslušnosti

  • Bezstavové fazule relácie udržujú s klientom žiadny stav. Z tohto dôvodu sa dajú použiť na vytvorenie skupiny objektov, ktoré interagujú s viacerými klientmi
  • Pretože fazuľa bez štátnej príslušnosti nemá žiadny stav na klienta, je výkonnejšia
  • Môžu vybavovať viac požiadaviek od viacerých klientov súčasne a
  • Možno použiť na načítanie objektov z databáz

5.2 Stavové fazule

  • Stavové zrná relácie môžu udržiavať stav s viacerými klientmi a úloha sa medzi klientmi nezdieľa
  • Stav trvá po celú dobu zasadania. Po zničení relácie sa stav nezachová
  • Kontajner môže serializovať a uložiť stav ako zastaraný stav pre budúce použitie. Toto sa deje s cieľom ušetriť prostriedky aplikačného servera a na podporu zlyhaní fazule a je to pasivácia
  • Môže byť použitý na riešenie problémov typu výrobca-spotrebiteľ

6. Záver

Takže sme vytvorili dva typy session beanov a zodpovedajúcich klientov na vyvolanie metód z beanov. Projekt demonštruje správanie sa dvoch hlavných typov fazule session.

Zdrojový kód článku je ako vždy k dispozícii na GitHub.


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