EJB 2.x – Entity Beans (deklarácia home rozhrania)

27. července 2005

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 klauzule throws

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ýnimky java.rmi.RemoteException v klauzule throws

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
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 klauzule throws

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ýnimky javax.ejb.FinderException v klauzule throws

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
Home rozhranie internetovej aukcie

Předchozí článek tiphardware.cz
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *