Java EE Session bab
1. Bemutatkozás
Az Enterprise Session bab nagyjából a következő kategóriákba sorolható:
- Hontalan munkamenet bab
- Á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.