Java EE Session bab

1. Bemutatkozás

Az Enterprise Session bab nagyjából a következő kategóriákba sorolható:

  1. Hontalan munkamenet bab
  2. Állapotban lévő munkabab

Ebben a rövid cikkben a szekció bab két fő típusát fogjuk megvitatni.

2. Beállítás

Az Enterprise Beans használata 3.2, feltétlenül adja hozzá a legújabb verziót a függőségek szakasza pom.xml fájl:

 javax javaee-api 7.0 biztosított 
A legfrissebb függőség a Maven tárházban található. Ez a függőség biztosítja, hogy az összes Java EE 7 API elérhető legyen a fordítás ideje alatt. A biztosítani hatókör biztosítja, hogy miután bevetették; a függőséget a konténer biztosítja, ahová telepítették.

3. Hontalan bab

A hontalan munkamag a vállalati bab olyan típusa, amelyet általában független műveletek végrehajtására használnak. Nincs társított kliensállapota, de megtarthatja példányállapotát.

Nézzünk meg egy példát, hogy bemutassuk a hontalan bab működését.

3.1 A hontalan bab létrehozása

Először hozzuk létre a HontalanEJB bab. Használjuk a @ Állam nélküli felirat a bab hontalanná nyilvánításához:

@Stateless public class StatelessEJB {public String name; }

Ezután létrehozzuk a fenti hontalan bab első kliensét, az ún EJBClient1:

nyilvános osztály EJBClient1 {@EJB public StatelessEJB hontalanEJB; }

Ezután kijelentünk egy másik ügyfelet, akit nevezünk EJBClient2, amely ugyanahhoz a hontalan babhoz jut el:

nyilvános osztály EJBClient2 {@EJB public StatelessEJB hontalanEJB; }

3.2 A hontalan bab tesztelése

Az EJB hontalanságának teszteléséhez a fent megadott két klienst a következő módon használhatjuk fel:

@RunWith (Arquillian.class) Public Class StatelessEJBTest {@Inject private EJBClient1 ejbClient1; @ Injektáljon privát EJBClient2 ejbClient2; @Test public void givenOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState () {ejbClient1.statelessEJB.name = "Client 1"; assertEquals ("1. kliens", ejbClient1.statelessEJB.név); assertEquals ("1. kliens", ejbClient2.statelessEJB.név); } @Test public void givenOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState () {ejbClient1.statelessEJB.name = "1. kliens"; ejbClient2.statelessEJB.name = "2. kliens"; assertEquals ("2. kliens", ejbClient2.statelessEJB.név); } // Az Arquillian telepítési kódja rövidség céljából eltávolítva}

Kezdjük azzal, hogy a két EBJ klienst befecskendezzük az egységtesztbe.

Ezután az első vizsgálati módszerben beállítottuk a név változó az EJB-ben, amelybe injekciózták EJBClient1 az értékre 1. kliens. Most, amikor összehasonlítjuk a név változó mindkét kliensben, látnunk kell, hogy az érték egyenlő. Ez azt mutatja, hogy a hontalan babokban nem marad meg az állapot.

Bemutassuk, hogy ez másképp igaz. A második vizsgálati módszerben azt látjuk, hogy ha beállítottuk a név változó a második kliensben „felülírja” azt az értéket, amelyet neki adtak ejbClient1.

4. Állami bab

A Stateful session bab fenntartja az állapotot mind a tranzakciókon belül, mind azok között. Éppen ezért az egyes állapotfüggő munkamenetek egy adott klienshez vannak társítva. A tárolók automatikusan elmenthetik és lekérhetik a bab állapotát, miközben kezelik az állapottalan munkamenetek példánykészleteit.

4.1 Az államadó bab létrehozása

Az állapotfigyelő munkababot a @ Államszerű annotáció. Az állapotos bab kódja a következő:

@Stateful public class StatefulEJB {public String name; }

Az állapotos babunk első helyi kliense a következőképpen íródik:

nyilvános osztály EJBClient1 {@EJB public StatefulEJB statefulEJB; }

Egy második kliens hívott EJBClient2 szintén létrejön, mint a EJBClient1:

nyilvános osztály EJBClient2 {@EJB public StatefulEJB statefulEJB; }

4.2 Az állapottartalmú bab tesztelése

Az állapotot adó bab funkcionalitását a EJBStatefulBeanTest egység teszt a következő módon:

@RunWith (Arquillian.class) public class StatefulEJBTest {@Inject private EJBClient1 ejbClient1; @ Inject magán EJBClient2 ejbClient2; @Test public void givenOneStatefulBean_whenTwoClientsSetValueOnBean _thenClientStateIsMaintained () {ejbClient1.statefulEJB.name = "Client 1"; ejbClient2.statefulEJB.name = "2. kliens"; assertNotEquals (ejbClient1.statefulEJB.név, ejbClient2.statefulEJB.név); assertEquals ("1. kliens", ejbClient1.statefulEJB.név); assertEquals ("2. kliens", ejbClient2.statefulEJB.név); } // Az Arquillian telepítési kódja rövidség céljából eltávolítva}

Mint korábban, a két EJB klienst injektálták az egységtesztbe. A vizsgálati módszerben láthatjuk, hogy a név változót a ejbClient1 ügyfél, és annak ellenére is fennmarad, hogy a név a ejbClient2 más. Ez azt mutatja, hogy az EJB állapota fennmaradt.

5. Hontalan kontra Állami munkamenet bab

Most vessünk egy pillantást a fő különbségre a kétféle munkabab között.

5.1 Hontalan bab

  • A hontalan munkamenetek nem tartanak fenn állapotot az ügyféllel. Ezért több objektumkészlet létrehozására használhatók, amelyek több klienssel állnak kapcsolatban
  • Mivel a hontalan baboknak nincs állapotuk kliensenként, jobb teljesítményt nyújtanak
  • Több kliens több kérését is kezelhetik párhuzamosan és
  • Objektumok adatbázisokból történő lekérésére használható

5.2 Állami bab

  • Az állapottalan munkamenetek több klienssel is fenntarthatják az állapotot, és a feladat nincs megosztva az ügyfelek között
  • Az állapot a munkamenet időtartamáig tart. A munkamenet megsemmisítése után az állam nem marad meg
  • A tároló sorosíthatja és tárolhatja az állapotot elavult állapotban a jövőbeni felhasználás céljából. Ez az alkalmazáskiszolgáló erőforrásainak mentése és a babhibák támogatása érdekében történik, és ez passziválás
  • Használható a termelő-fogyasztó típusú problémák megoldására

6. Következtetés

Tehát kétféle munkababot és megfelelő klienst hoztunk létre, hogy a metódusokat a babból lehívjuk. A projekt bemutatja a két fő munkamagfaj viselkedését.

Mint mindig, a cikk forráskódja is elérhető a GitHubon.


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