EJB 2.x – Entity Beans (deklarácia home rozhrania)
Každá entity alebo session bean musí mať home rozhranie, ktoré môže byť odvodené z javax.ejb.EJBHome, respektíve z javax.ejb.EJBLocalHome rozhrania. Home rozhranie poskytuje metódy, ktoré umožňujú klientom vytvárať, hľadať a odstraňovať EJB inštancie. V prípade entity beans umožňuje toto rozhranie aj získavať referencie na existujúce entitné objekty a vykonávať príslušné biznis metódy.
Metódy na mazanie entitných objektov sú súčasťou deklarácie home rozhraní, ale vy sami ste zodpovední za obsah metód na vytváranie a vyhľadávanie entitných objektov a za vykonávanie biznis logiky.
Vytvorenie inštancie entity bean
Entity beans, ktoré vytvárame, veľmi často reprezentujú read-only dáta. Ďalej môžeme vytvárať entity beans, ktorých atribúty môžu byť klientmi menené a tieto zmeny sa prenášajú do príslušného dátového úložiska. Obidve tieto situácie môžu byť vyriešené bez toho, aby klient vôbec potreboval vytvárať nové inštancie entitných objektov. Ak však naozaj trváte na tom, aby to bolo možné, musíte zadefinovať aspoň jednu create
metódu v home rozhraní príslušnej entity beans.
Ak má mať klient možnosť vytvárať inštancie entitných objektov rôznymi spôsobmi, potom pre každý spôsob je treba zadefinovať inú create
metódu. Podobný princíp, ako keď vytvoríte niekoľko rôznych konštruktorov tej istej triedy. Pričom každý akceptuje iný typ vstupných parametrov. Je tu však jeden rozdiel, a to ten, že každá metóda sa môže volať inak. Všetky však musia mať rovnaký prefix create. Napríklad môžete zadefinovať metódu na vytvorenie novej inštancie, bez poskytnutia akýchkoľvek vstupných parametrov, nasledovne:
public EnglishAuction create() throws CreateException {…}
Ak potrebujete vložiť aj vstupné dáta, môže to vyzerať nasledovne:
public EnglishAuction createWithData(String name)
throws CreateException {…}
Uvedené príklady sú určené pre local home rozhranie. Pre tieto metódy platí, že:
- musia mať názov začínajúci na create
- návratový typ musí byť lokálne rozhranie
- musia deklarovať vyhodenie výnimky
javax.ejb.CreateException
v klauzulethrows
V prípade, že klienta môžeme označiť ako vzdialeného, aj home rozhranie môžeme nazvať remote home rozhraním. Pre create
metódy uvedeného rozhrania platí nasledovné:
- musia mať názov začínajúci na create
- návratový typ musí byť remote rozhranie
- musia deklarovať vyhodenie výnimky
javax.ejb.CreateException
a výnimkyjava.rmi.RemoteException
v klauzulethrows
Každá create metóda, ktorú deklarujete v home rozhraní, musí mať korešpondujúcu ejbCreate
a ejbPostCreate
metódu deklarovanú v entitnej triede. Ak by tieto dve metódy predpokladali vyhodenie nejakých iných výnimiek, ako už spomínané, potom musí aj príslušná metóda create
deklarovať vyhodenie týchto výnimiek. Home rozhranie poskytuje pre remote klientov metódy, ktoré predstavujú vzdialené volania, a preto je aj pri nich nutné deklarovať vyhodenie RemoteException
. Rovnako ako je to treba pri metódach remote rozhraní. Výnimka CreateException
je štandardná výnimka používaná v procese vytvárania inštancie.
Pre ilustráciu a lepšie pochopenie uvádzam nasledovný obrázok spolupráce jednotlivých typov rozhraní pri vytváraní EJB:
Spolupráca rozhraní pri vytváraní EJB
Vyhľadanie inštancie entity bean
Oveľa dôležitejšie ako vedieť vytvárať nové inštancie beanov, je vedieť vyhľadávať medzi existujúcimi. Za týmto účelom musíte deklarovať vyhľadávacie metódy v home rozhraní entitnej triedy. Vyhľadávacia metóda je zodpovedná za vyhľadanie všetkých objektov, ktoré zodpovedajú daným kritériám. Minimálne by malo byť možné vyhľadávať entitné objekty podľa ich primárneho kľúča. Deklarácia takejto metódy môže byť nasledovná:
public EnglishAuction findByPrimaryKey(Integer primaryKey)
throws FinderException {…}
Uvedená metóda musí mať presne takýto názov, musí vracať lokálne alebo remote rozhranie a akceptovať jeden vstupný parameter, ktorý je rovnakého typu ako primárny kľúč entitnej triedy. Podobne ako pri vytváraní inštancií, aj pri ich vyhľadávaní musia metódy na vyhľadávanie zachovávať určité pravidlá. Vyhľadávacie metódy definované v lokálnom home rozhraní musia:
- mať názov začínajúci na find
- mať návratový typ lokálne rozhranie alebo kolekciu objektov, ktoré implementujú toto rozhranie
- deklarovať vyhodenie výnimky
javax.ejb.FinderException
v klauzulethrows
Pre remote home rozhrania sú podmienky podobné. Vyhľadávacie metódy musia spĺňať nasledovné:
- mať názov začínajúci na find
- mať návratový typ remote rozhranie alebo kolekciu objektov, ktoré implementujú toto rozhranie
- deklarovať vyhodenie výnimky
java.rmi.RemoteException
a výnimkyjavax.ejb.FinderException
v klauzulethrows
Odstránenie inštancie entity bean
Rozhranie EJBHome
definuje dve metódy, ktoré môžete použiť na odstránenie inštancie EJB:
void remove(Handle handle) throws RemoteException, RemoveException;
void remove(Object primaryKey) throws RemoteException, RemoveException;
Keďže lokálni klienti nepotrebujú pracovať s objektmi typu Handle
, rozhranie EJBLocalHome
deklaruje iba metódu:
void remove(Object primaryKey) throws EJBException, RemoveException;
EJB kontajner implementuje tieto metódy za vás, nemusíte si s tým robiť starosti. Mali by ste však myslieť na to, že component rozhranie tiež obsahuje remove metódy. Ale rozdiel medzi týmito metódami je v tom, že tu si nemusíte robiť starosti so získavaním referencie na entitný objekt, ktorý chcete odstrániť, ak poznáte hodnotu primárneho kľúča.
Deklarácia biznis metód v home rozhraní
Ešte pred špecifikáciou EJB 2.0 museli byť všetky biznis metódy patriace entitnej triede dostupné cez component rozhranie. To inak znamenalo, že volania týchto metód boli vždy spojené s konkrétnym entitným objektom. A to i napriek tomu, že nie vždy tieto metódy pracujú s vlastnosťami danej inštancie, nemenia jej stav. V prípade, že ste potrebovali vykonať určité spracovanie, ktoré nejako súviselo s konkrétnou entitnou triedou, ale zároveň bolo nezávislé od inštancie danej triedy, mali ste dve možnosti. Buď ste mohli zadeklarovať predmetnú biznis metódu v component rozhraní entitnej triedy, alebo ju implementovať v session beane.
EJB 2.0 predstavila koncept home metód. Z ich názvu vyplýva, že home metóda je biznis metóda deklarovaná v home rozhraní. Tieto metódy sú určené na vykonávanie biznis logiky, ktorá je úzko spätá s entity beanom, ale nie s konkrétnou inštanciou. Pretože home rozhranie nie je nikdy asociované s konkrétnou inštanciou entity beans, tak ani home metódy nemôžu pristupovať k inštančným dátam. Home metódy musia dodržiavať nasledovné podmienky:
- Môžu byť pomenované akokoľvek s podmienkou, že ich názov sa nesmie začínať na create, find alebo remove.
- Parametre a návratové typy home metód deklarovaných v remote home rozhraní, musia byť legálne RMI-IIOP typy.
- Čo sa týka ošetrenia výnimiek v home metódach, iba v prípade remote home rozhrania musia home metódy obsahovať v klauzule throws výnimku
java.rmi.RemoteException
.
Súhrn
Tento článok ukončíme ukážkou toho, ako môže vyzerať kostra home rozhrania pre náš príklad internetovej aukcie.
Home rozhranie internetovej aukcie
Mohlo by vás také zajímat
-
ZONER Webmail jako první v Česku přináší BIMI s VMC
11. července 2024 -
Netcat a Ncat
8. prosince 2022 -
Zabezpečení e-mailů: Jak můžete chránit vaši firemní komunikaci
13. prosince 2023
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024