EJB 2.x – Entity Beans (implementácia rozhraní a biznis metód)
Cieľom predošlých článkov bolo vysvetliť, ako zadeklarovať rozhrania pre entity beans, ktoré sú vystavené voči klientom. Nezaoberali sme sa však zatiaľ implementačnými detailmi. Treba však povedať, že v ďalších článkoch budeme musieť rozlišovať medzi BMP a CMP perzistentným mechanizmom. Na druhej strane sú však určité oblasti, ktoré sú spoločné pre oba mechanizmy. Aby sme mohli pokračovať ďalej, musíme správne pochopiť funkciu niektorých rozhraní špecifických pre implementačné entitné triedy.
Implementácia rozhrania javax.ejb.EntityBean
Všetky vaše entitné triedy musia priamo alebo nepriamo implementovať toto rozhranie. Samotné rozhranie je rozšírením javax.ejb.EnterpriseBean
a definuje niekoľko metód používaných kontajnerom na interakciu s triedami EB. Rozhranie obsahuje nasledovné deklarácie:
public interface EntityBean extends EnterpriseBean {
void ejbActivate() throws EJBException,RemoteException;
public void ejbPassivate() throws EJBException,
RemoteException;
public void ejbLoad() throws EJBException,RemoteException;
public void ejbStore() throws EJBException,RemoteException;
public void ejbRemove() throws RemoveException,
EJBException,RemoteException;
public void setEntityContext(EntityContext ctx) throws
EJBException,RemoteException;
public void unsetEntityContext() throws EJBException,
RemoteException;
}
Čo sa týka uvedených ejb
metód, označujú sa ako callback metódy. Ich použitie si vysvetlíme neskôr, keď sa budeme zaoberať životným cyklom EB. Dve z metód rozhrania EntityBean
, konkrétne setEntityContext
a getEntityContext
, sa používajú na asociovanie kontextu prostredia s inštanciou entitnej triedy. Kontext je objekt implementujúci rozhranie EntityContext
. Prostredníctvom tohto rozhrania môže inštancia entitnej triedy vykonávať volania smerom ku EJB kontajneru.
Implementácia rozhrania javax.ejb.EntityContext
Rozhranie EntityContext
rozširuje EJBContext
, ktoré umožňuje inštancii beanu obdržať referenciu na jej home rozhranie. Ďalej umožňuje získať bezpečnostné informácie o klientovi, alebo inštancii pracovať s aktuálnou transakciou. Nasledovná tabuľka sumarizuje význam jednotlivých metód deklarovaných v rozhraní EJBContext
.
Návratový typ | Názov metódy | Popis |
---|---|---|
Principal |
getCallerPrincipal() |
Metóda vráti objekt triedy Principal , s bezpečnostnými informáciami týkajúcimi sa klienta. |
boolean |
getRollbackOnly() |
Metóda testuje, či aktuálna transakcia je označená na rollback. |
void |
setRollbackOnly() |
Metóda označí aktuálnu transakciu na rollback. |
EJBHome |
getEJBHome() |
Vráti remote home rozhranie EB. |
EJBLocalHome |
getEJBLocalHome() |
Vráti lokálne home rozhranie EB. |
UserTransaction |
getUserTransaction() |
Vráti rozhranie UserTransaction , ktoré môže inštancia EB použiť na ohraničenie transakcie. |
boolean |
isCallerInRole (String role) |
Metóda testuje, či klient má priradenú bezpečnostnú rolu. |
Rozhranie EntityContext
potom pridáva ďalšie tri metódy k vyššie uvedenému rozhraniu EJBContext
:
public EJBObject getEJBObject() throws IllegalStateException;
public EJBLocalObject getEJBLocalObject()
throws IllegalStateException;
public Object getPrimaryKey() throws IllegalStateException;
Tieto metódy môžu byť zavolané entitnou inštanciou z vnútra biznis metódy alebo niektorej z callback metód. Určité callback metódy, napríklad ejbCreate
, sú volané v bode životného cyklu entitného objektu, v ktorom metódy rozhrania EntityContext
nie sú dostupné. Ak by ste sa pokúsili volať niektorú z metód getEJBObject
, getEJBLocalObject
či getPrimaryKey
v tejto situácii, bude vyhodená výnimka IllegalStateException
. O callback metódach si budeme ešte podrobnejšie hovoriť.
Účel metódy getPrimaryKey
je myslím zjavný. Môžete zavolať túto metódu, aby ste získali referenciu na primárny kľúč asociovaný s inštanciou entity bean. Význam zvyšných dvoch metód už nemusí byť na prvý pohľad jasný. Spomeňte si, že EJBObject
je rozhranie, ktoré musí rozširovať každé remote rozhranie komponenty EJB, a EJBLocalObject
musí rozširovať každé local rozhranie komponenty. Uvedené dve metódy vám teda umožnia získať referenciu na rozhrania (remote a local) asociované s danou inštanciou. Toto je užitočné najmä vtedy, ak entity bean potrebuje predať referenciu na samú seba ako parameter metódy, alebo ako návratovú hodnotu metódy.
Treba mať na pamäti, že entity bean nemusí nutne implementovať oba typy component rozhraní, local aj remote. Ak teda zavoláte metódu, pre ktorú neexistuje odpovedajúce rozhranie, bude vyhodená výnimka IllegalStateException
.
Implementácia vlastných biznis metód.
Každá vaša biznis metóda definovaná v component rozhraní musí mať odpovedajúcu implementáciu v entitnej triede. Rovnako ako pri akomkoľvek inom rozhraní, aj tu musí mať implementovaná metóda rovnaký názov, parametre a návratový typ ako jej predloha deklarovaná v rozhraní. Toto sa týka aj deklarovania možných výnimiek. Aj keď metódy remote rozhrania musia vždy obsahovať klauzulu možného vyhodenia výnimky RemoteException
, vaša entitná trieda, respektíve jej metódy, by nemali túto klauzulu obsahovať. Namiesto toho v prípade, že metóda entitnej triedy volá remote metódu, ktorá môže vyhodiť RemoteException
, metóda entitnej triedy by mala túto výnimku zachytiť a vyhodiť výnimku EJBException
.
V nasledujúcich článkoch si ukážeme príklady implementácie biznis metód, pričom naša implementácia bude čiastočne nezávislá od mechanizmu perzistencie (BMP alebo CMP). A to z toho dôvodu, že metódy budú pracovať s perzistentným poľom v rámci entity bean, a nie priamo s databázou. Obvykle je všetka práca s databázami zapuzdrená v rámci metód ejbLoad
a ejbStore
.
Mohlo by vás také zajímat
-
Užitečné nástroje pro bezpečnost na internetu
17. října 2024 -
Nejlevnější VPS: To je nový Cloud Server Mini od ZonerCloud
4. června 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024