Enterprise JavaBeans (EJB) je špecifikácia pre vývoj rozsiahlych distribuovaných obchodných aplikácií na platforme Java. EJB 1.0 bol vydaný v roku 1998. Najaktuálnejšie vydanie, EJB 3.2.3, bolo prijaté pre začlenenie do Jakarty EE, kde bude premenované na Jakarta Enterprise Beans.
Architektúra EJB
Architektúra EJB sa skladá z troch hlavných komponentov: enterprise bean (EJBs), kontajner EJB a aplikačný server Java. EJB fungujú vo vnútri kontajnera EJB a kontajner EJB vo vnútri aplikačného servera Java.
Existujú dva typy EJB - fazuľa relácie a fazuľa riadená správami:
- Session fazuľa sú vyvolané klientom a programovo sprístupňujú klientovi podnikové funkcie, ako sú transakcie a správa zdrojov.
- Fazuľa riadená správami tiež zapuzdrujú a poskytujú podnikové funkcie, ale sú asynchrónne a riadené udalosťami. Fazuľa riadená správami načúva a reaguje na udalosti a klient ich nemôže vyvolať.
Akonáhle boli fazule entity použité na zabezpečenie perzistencie v systéme EJB, boli nahradené rozhraním Java Persistence API. Pokračujte v čítaní, aby ste sa dozvedeli viac o fazulách session a fazolách riadených správami.
EJB vs JavaBeans
Enterprise JavaBeans bol prvým vývojovým modelom založeným na komponentoch pre Java EE. EJB je podobný JavaBeans v tom, že je založený na komponentoch, ale tým podobnosť končí:
- A JavaBean je trieda Java, ktorá zapuzdruje viac objektov a vyhovuje určitým konvenciám. JavaBeans sa používajú hlavne na vývoj na strane klienta.
- An podniková fazuľa (EJB) je trieda Java naplnená špecifickými schopnosťami na strane servera. Enterprise bean sa používajú vo veľkých obchodných aplikáciách a systémoch.
Session fazuľa
A fazuľa na sedenie je najgenerickejší typ podnikových beanov, ktorý predstavuje množstvo obchodných funkcií, ktoré môže klient zavolať. Klientom v tomto prípade môže byť iná trieda v lokálnom JVM alebo vzdialený hovor.
Kontajner EJB spravuje životný cyklus fazule relácie, ktorá je určená stavom fazule:
- Fazuľa bez štátnej príslušnosti sú podobné rozsahu žiadosti v rozhraní Java Servlet API. Fazuľa bez štátnej príslušnosti obsahuje veľa funkcií, ktoré je možné vyvolať, ale inak sú bez štátnej príslušnosti.
- Stavové fazule sú spojené iba s jedným klientom a pripájajú sa k prebiehajúcej relácii daného klienta. Stavové fazule relácie fungujú podobne ako rozsah relácie v rozhraní Servlet API.
- Singleton fazuľa sú podobné rozsahu aplikácie v Servlet API. Jeden fazuľa relácie singleton existuje pre každého klienta iba raz.
Bezpečnosť nití s fazuľkami session
K stavovému objektu bean typu session bean má prístup iba jeden klient, takže pri práci s týmto typom objektu bean je zaručená bezpečnosť vlákna. Fazuľa bez štátnej príslušnosti a fazuľa singleton sú flexibilnejšie, čo umožňuje súčasné pripojenie, ktoré musí spravovať vývojár. Pri práci s týmito druhmi fazule ste zodpovední za bezpečnosť nití.
Fazuľa riadená správami
Brány riadené správami (MDB) sú vyvolané prostredníctvom správ JMS (Java Message Service). JMS funguje ako distribuovaný vzor príkazov, kde fazuľa riadená správami slúži ako poslucháč príkazu. Keď správa dorazí na tému alebo do frontu, vyvolá sa fazuľa riadená správou, ktorá načúva na túto tému.
Fazuľa riadená správami sa nepoužívajú tak bežne ako fazule relácie, ale sú výkonné. Pretože sú asynchrónne a riadené udalosťami, sú obzvlášť užitočné pre dlhodobé úlohy, kde je dôležité šetriť zdroje.
Najjednoduchšia architektúra by pozostávala z aplikácie EJB a jej kontajnera a servera, ktoré sa koordinujú so službou správ spracúvajúcou MDB. Vo výrobe by vaša architektúra pravdepodobne obsahovala tretí komponent určený na konzumáciu fazule. Pri vývoji mohli všetky tieto komponenty bežať na rovnakom lokálnom počítači.
Obrázok 1 zobrazuje typickú architektúru riadenú udalosťami s fazuľami riadenými správami.
Matthew TysonPráca s fazuľami založenými na správach je viac zapojená ako práca s fazuľami session. V prostredí založenom na udalostiach budete zvyčajne potrebovať sprostredkovateľa správ, ako je ActiveMQ.
Zatiaľ čo fazuľa session je jednoduchšia, a teda častejšie sa používa v EJB, architektúry založené na udalostiach sa stali populárnymi, najmä pri výbuchu mikroslužieb.
Anotácie EJB
Definovanie a konzumácia podnikových bôbov bola pre mnohých vývojárov problémom až do vydania EJB 3.0, ktoré zaviedlo anotácie k špecifikácii EJB. Vďaka anotáciám je veľmi ľahké nakonfigurovať podnikové fazule pre širokú škálu funkcií nájdených v prostredí Java EE. Pokračujte v čítaní, aby ste mohli začať s anotáciami EJB.
@Stateless: Definujte bean relácie bez štátnej príslušnosti
Na označenie triedy ako fazule relácie bez štátnej príslušnosti používate znak javax.ejb. bez štátnej príslušnosti
anotácie, ako je uvedené v zozname 1.
Zoznam 1. Príklad anotácie @ bez štátnej príslušnosti
import javax.ejb.Stateless; @Stateless public class MyStatelessBean {public String getGreeting () {return "Hello JavaWorld."; }}
Táto bezstavová fazuľa obsahuje jednoduchý podpis, ktorý neberie žiadne argumenty a vráti reťazec. Nenechajte sa však zmiasť jednoduchosťou: táto fazuľa dokáže všetko, čo potrebujete, vrátane interakcie s inými fazuľami, službami alebo dátovou vrstvou vašej aplikácie.
@EJB: Konzumujte fazuľa bez štátnej príslušnosti
Po definovaní fazule relácie je jej použitie také jednoduché:
Výpis 2. Príklad anotácie @EJB
verejná trieda MyServlet rozširuje HttpServlet {@EJB MyStatelessBean myEjb; public void doGet (požiadavka HttpServletRequest, odpoveď HttpServletResponse) {response.getWriter (). write ("EJB Says" + testStatelessEjb.getGreeting ()); }}
Tu vpichneme fazuľu bez štátnej príslušnosti do servletu a potom je k dispozícii na použitie. Všimnite si, ako je fazuľa identifikovaná pod @EJB
anotácia. Označenie „bez štátnej príslušnosti“ nám hovorí, že táto fazuľa nebude klienta sledovať. Pretože je bez štátnej príslušnosti, vieme tiež, že táto fazuľa podlieha podprocesom, ak funguje mimo vyvolanej metódy.
@Remote: Definujte vzdialené rozhranie EJB
Vo vyššie uvedených príkladoch som predpokladal, že EJB a EJB klient bežali v rovnakom JVM. Ak podniková fazuľa a jej klient pracujú v samostatných JVM, musí EJB definovať a @ Remote
rozhranie. V takom prípade je na vás, aby ste definovali a implementovali rozhranie, ako je uvedené v zozname 3.
Zoznam 3. @ Príklad vzdialenej anotácie
@ Diaľkové verejné rozhranie MyStatelessEjbRemote {Reťazec sayHello (Názov reťazca); }
Vzdialené rozhranie sa odošle klientovi na vyvolanie. Výzvy na ňu budú následne uspokojené implementáciou EJB na strane servera. The MyStatelessBean
príklad v zozname 4 implementuje vzdialené rozhranie.
Zoznam 4. Implementácia vzdialeného rozhrania
verejná trieda MyStatelessBean implementuje MyStatelessEjbRemote {...}
Vzdialené rozhranie je implementované rovnako ako normálna trieda implementujúca rozhranie. Ako spotrebiteľ vzdialeného EJB musí mať klientska aplikácia prístup k definícii triedy pre vzdialené rozhranie. Definíciu triedy pre vzdialené rozhranie môžete zbaliť ako súbor JAR závislostí.
Miestne vs vzdialené rozhranie
Aj keď je dôležité vedieť, ako implementovať vzdialené rozhranie, v praxi je bežnejšie používať miestne rozhranie. Lokálne rozhranie sa používa v predvolenom nastavení a funguje vždy, keď je EJB vyvolaný v rovnakom kontexte JVM. Používanie vzdialeného rozhrania prichádza do hry, keď je aplikácia distribuovaná do viacerých JVM.
Stavové sedenie fazule a jednolôžkové fazule
Proces definovania a spotreby stavového @Session
fazuľa a @Singleton
fazuľa je to isté, čo ste videli @Bezstavový
fazuľa. Pamätajte na sémantiku:
- Pre toho istého klienta je možné vytvoriť inštanciu a použiť viac fazúľ relácie.
- Jedno fazuľa bude pre celú aplikáciu existovať iba raz.
Bezpečnosť závitov a plánovanie pomocou singletonov
Bezpečnosť vlákien je zabudovaná, keď pracujete s fazuľami session, ale k bezstavovým aj singletonovým fazuľkám majú prístup súčasne viacerí klienti. Vývojári sú zodpovední za bezpečnosť vlákien pri implementácii týchto druhov fazule.
Fazuľa Singleton ponúka určitú podporu pre bezpečnosť nití prostredníctvom @Lock
anotácia. Môžete použiť anotáciu @Lock v metódach singleton bean na nastavenie privilégií na čítanie a zápis pre každú metódu. Tieto dve možnosti sú @Lock (LockType.READ)
alebo @Lock (LockType.WRITE)
, čo je predvolené nastavenie.
Ďalšou užitočnou vlastnosťou fazule singleton je schopnosť jednoduchým spôsobom plánovať úlohy pomocou klávesu @ Časový plán
anotácia. Zoznam 5 ukazuje, ako naplánovať úlohu každý deň na poludnie.
Zoznam 5. Príklad anotácie @Schedule
@Singleton verejná trieda MySchedulerBean {@Schedule (hour = "12") void doIt () {System.out.println ("Hello at Noon!"); }}
CDI vs EJB
CDI alebo Context and Dependency Injection je novšia podniková špecifikácia, ktorú niektorí vývojári navrhli, by mohla nahradiť EJB.
Na vysokej úrovni ponúka CDI univerzálny rámec komponentov, zatiaľ čo EJB vyniká svojimi bohato vybavenými jednotlivými komponentmi. Zatiaľ čo CDI používa závislosť na definovanie a odkazovanie na akýkoľvek softvérový komponent, komponenty EJB sú formálnejšie definované, pričom každý z nich ponúka špecifickú sadu funkcií. Obe špecifikácie sú plánované na budúci vývoj v rámci Jakarty EE, kde bude nakoniec vyriešená otázka, či by CDI mala nahradiť EJB.
Záver
Enterprise JavaBeans bola prvou špecifikáciou, ktorá ponúka jednoduchý spôsob zapuzdrenia a opätovného použitia obchodnej logiky v podnikových aplikáciách Java. EJB, ďaleko od starého monštra veľkej váhy, je dnes štíhly rámec založený na anotáciách, ktorý vám umožní prístup k širokej škále podnikových funkcií hneď po vybalení z krabice. Zvážte EJB, keď nabudúce budete požiadaní, aby ste rýchlo rozšírili distribuovanú a škálovateľnú obchodnú aplikáciu. Možno by ste boli milo prekvapení.
Tento príbeh „Čo je EJB? Evolúcia Enterprise JavaBeans“ bol pôvodne publikovaný spoločnosťou JavaWorld.