Programování

Přečtěte si vše o EJB 2.0

Enterprise JavaBeans 2.0, vydaná 2. června, není jen bodovým vydáním, ale také novou verzí specifikace. Na něco přes 500 stránek je specifikace EJB 2.0 o 200 stránek (66 procent) delší než předchozí specifikace EJB 1.1. Nejdůležitějšími změnami ve specifikaci jsou změny provedené v kontejnerově spravované perzistenci (CMP) a zavedení zcela nového typu fazole, MessageDrivenBean.

Převážná část změn v EJB 2.0 se nachází v definici nového modelu komponenty CMP. Je to radikálně odlišné od starého modelu CMP, protože představuje zcela nového účastníka, manažer vytrvalosti, a zcela nový způsob definování polí spravovaných kontejnerem, stejně jako vztahy s jinými fazolemi a závislými objekty.

Zavedení MessageDrivenBean (fazole zprávy) je také významná. Fazole zpráv představuje integraci JMS (Java Message Service) s EJB za účelem vytvoření zcela nového typu fazole navrženého pro zpracování asynchronních zpráv JMS. Tento vzrušující nový typ fazole poskytuje model komponenty pro klienty JMS, který jim umožňuje nasazení v bohatém a robustním prostředí kontejnerového systému EJB.

Ve specifikaci bylo provedeno mnoho dalších menších změn. Tyto další změny, i když jsou důležité, se většinou týkají zpřísnění specifikace, aby se odstranily nejednoznačnosti a aby byly součásti přenosnější. Tento článek se zaměřuje na nové modely komponent CMP a message bean představené v EJB 2.0.

Uvádím několik konkrétních příkladů, takže by mělo být celkem snadné je sledovat a pochopit. Začátečníci EJB by však mohli materiál najít obtížnější, protože se předpokládá, že čtenáři mají základní znalosti o EJB. Další informace o EJB najdete v Zdrojích.

Perzistence řízená kontejnerem

Perzistence řízená kontejnerem prošla v EJB 2.0 radikálními změnami. V EJB 2.0 správce perzistence zpracovává perzistenci fazolí entit CMP automaticky za běhu. Správce perzistence je zodpovědný za mapování objektu bean entity do databáze na základě nové smlouvy správce objektů perzistence s názvem abstraktní schéma perzistence. Kromě toho je manažer persistence zodpovědný za implementaci a provádění metod hledání založených na novém dotazovaném jazyce s názvem EJB QL.

Je důležité si uvědomit, že produkty, které splňují specifikaci EJB 2.0, musí podporovat model EJB 1.1 CMP i nový model EJB 2.0. I když tyto modely nejsou kompatibilní, je pro zajištění zpětné kompatibility vyžadována podpora pro model EJB 1.1.

Schéma abstraktní perzistence

Abychom pochopili, jak funguje schéma abstraktní perzistence a proč je to důležité, rychle pro vás zkontroluji, jak je CMP zpracováno v EJB 1.1, a poté diskutuji o tom, jak je definováno v EJB 2.0.

Model EJB 1.1 CMP

V EJB 1.1 je vývojář fazolí odpovědný za deklaraci trvalých polí třídy fazolí jako primitivní nebo serializovatelné typy Java. Následující příklady ukazují Zaměstnanec třída Enterprise Bean, jak je definována v EJB 1.1, s několika poli CMP:

// třída Employee bean veřejná třída EmployeeBean implementuje java.ejb.EntityBean {// pole instance EntityContext ejbContext; // pole spravovaná kontejnerem public int identity; public String jméno; veřejné Řetězec příjmení; veřejný dvojitý plat; adresa veřejné adresy; public Integer ejbCreate (int id, String fname, String lname) {identity = id; firstName = fname; příjmení = jméno; vrátit null; } ...} // Třída závislá na adrese veřejná třída Adresa implementuje Serializable {public String street; veřejné město String; veřejný stav řetězce; veřejný zip; } 

Když se pro perzistenci používá relační databáze, primitivní pole, jako je identita, jméno, příjmení, a plat je poměrně snadné přetrvávat, protože se pěkně mapují na typy SQL, jako je CELÉ ČÍSLO, CHAR, a DVOJNÁSOBEK.

V EJB 1.1 poskytuje deskriptor nasazení XML fazole CMP cmp-pole prvky pro identifikaci trvalých polí (pole spravovaná kontejnerem) ve třídě bean. Jak je uvedeno níže, pole cmp prvky se používají k rozlišení mezi poli, která jsou zapsána do databáze, a těmi, která nejsou. Například ejbContext pole není zahrnuto v seznamu polí spravovaných kontejnerem, a proto nejde o trvalé pole.

   ZaměstnanecEJB ... Kontejner ... identita křestní jméno příjmení platová adresa ... 

Poskytovatel kontejnerů dodává nástroj pro mapování trvalých polí fazole na sloupce v databázových tabulkách, obvykle jednu tabulku na fazole. Serializovatelné typy jako Adresaje však obtížnější přetrvávat. V EJB 1.1 neexistuje standardní způsob mapování serializovatelných objektů do relační databáze. Ačkoliv Adresa třída má vlastní sadu polí, deskriptor nasazení XML neposkytuje mechanismus pro mapování těchto polí do databáze. Ve většině případů se očekávalo, že serializovatelné objekty jako Adresa bude přetrvávat jako binární typ, kterému se někdy říká a kapka typu, do databázové tabulky.

Tento problém se zhoršuje, protože schéma dat entity bean roste ve složitosti. An Zaměstnanec bean, například, může mít mnoho podřízených objektů podobných Adresa, jako Výhody a Pracovní pozice. Tyto podřízené objekty, nazývané závislé objekty, mohou tvořit složité objektové grafy zahrnující několik tabulek v relační databázi. Kromě toho je CMP v EJB 1.1 do značné míry nedostatečný pro přetrvávající vztahy s jinými fazolemi. Pokud by v EJB 1.1 měl objekt bean udržovat vztah s jiným objektem bean, kontejner by automaticky použil primární klíč nebo popisovač jako odkaz. Ukázalo se, že to je docela surový mechanismus pro udržování vztahů s jinými fazolemi, jejichž přirozený vztah může být obousměrný nebo závislý na polích, která nejsou snadno reprezentována primárním klíčem nebo popisovačem.

Model EJB 2.0 CMP

V EJB 2.0 vám nová smlouva mezi objektem bean entity CMP a správcem persistence umožňuje definovat složitější a přenosnější vztahy objektů bean-to-bean, bean-to-závislé a dokonce závislé na závislých v rámci objektu bean.

Trvalý správce je novým účastníkem procesu nasazení Enterprise JavaBeans. Prodávající kontejneru nebo prodejce, který se specializuje na perzistenci konkrétní databáze, může poskytnout správce perzistence. Cílem je oddělit mechanismus používaný ke správě vztahů typu bean od kontejneru, který je zodpovědný za správu zabezpečení, transakcí a prostředků. Rozdělení odpovědnosti umožňuje různým manažerům vytrvalosti pracovat s různými kontejnery. Umožňuje také, aby se fazole entit staly přenosnějšími u dodavatelů EJB i u správců vytrvalosti.

Pokud jste pracovali nebo studovali CocoBase, produkt od společnosti Thought Inc., který automaticky generuje fazole BMP (Bean Managed Persistence) pro kontejnery EJB 1.1, pak už jste trochu obeznámeni s tím, jak může trvalý nástroj pro správu fungovat. CocoBase generuje veškerou logiku přístupu k databázi pro fazole BMP na základě informací o mapování mezi objektem a relací, které poskytuje nasazovací objekt fazole. V EJB 2.0 může správce perzistence vygenerovat mapování entit CMP na relační databázi na základě informací poskytnutých deskriptorem nasazení, abstraktním perzistenčním schématem fazole a prací prováděnou zavaděčem. Správce perzistence však není omezen na relační databázi. Správce perzistence lze také vyvinout pro objektové databáze i pro starší systémy a systémy ERP, jako je SAP.

Aby se správce perzistence mohl oddělit od kontejneru, bylo nutné definovat smlouvu mezi fazolemi a správcem perzistence. Kontrakt se projevuje v novém schématu abstraktní perzistence. Toto schéma je definováno prostřednictvím nové sady prvků XML v deskriptoru nasazení a sady idiomů kódu v fazole entity CMP. V EJB 2.0 je třída fazole CMP deklarována jako abstraktní a její perzistentní a relační pole jsou přístupná pomocí abstraktních přístupových a mutačních metod, jejichž podpisy metod se mapují na speciální prvky v deskriptoru nasazení XML.

Když je fazole nasazena, použijete trvalé nástroje správce ke generování konkrétní implementace třídy abstraktních fazolí a jejích závislých tříd objektů na základě deskriptoru nasazení XML a třídy fazolí. Konkrétní implementace budou zahrnovat přístupový kód k datům, který bude za běhu skutečně číst a zapisovat stav fazole do databáze. Za běhu kontejner používá podtřídy generované nástroji správce persistence namísto abstraktních tříd definovaných poskytovatelem fazole.

Abychom diskusi poskytli trochu masa, je uveden příklad entity CMP, který konkrétněji vysvětluje, jak funguje schéma abstraktní perzistence.

Příklad entity CMP v EJB 2.0

V EJB 2.0 je fazole entity spravované kontejnerem definována jako abstraktní a její trvalá pole nejsou definována přímo ve třídě bean. Místo toho bylo vyvinuto abstraktní trvalé schéma, které umožňuje zprostředkovateli fazole deklarovat trvalá pole a vztahy fazole nepřímo. Níže je uveden příklad Zaměstnanec fazole, která používá nové abstraktní trvalé schéma. Všimněte si, že ve třídě bean není deklarováno žádné z trvalých polí.

public abstract EmployeeBean implementuje javax.ejb.EntityBean {. // pole instance EntityContext ejbContext; // trvalá pole spravovaná kontejnerem public abstract void setIdentity (int identity); public abstract int getIdentity (); public abstract void setFirstName (řetězec firstName); public abstract Řetězec getFirstName (); public abstract void setLastName (řetězec lastName); public abstract Řetězec getLastName (); // pole vztahů spravovaných kontejnerem public abstract void setContactInfo (ContactInfo info); public abstract ContactInfo getContactInfo (); ...} 

V deskriptoru nasazení XML této fazole abstraktní schéma stálosti deklaruje pole a vztahy spravované kontejnerem.

   EmployeeEJB ... Container ... identity firstName lastName ... ContactInfo ContactInfo street city state zip homePhone workPhone email ... Employee-ContactInfo employee-has-contactinfo one EmployeeEJB contactInfo ContactInfo contactinfo_belongsto_employee one ContactInfo 
$config[zx-auto] not found$config[zx-overlay] not found