Programovanie

Prečítajte si všetko o EJB 2.0

Enterprise JavaBeans 2.0, vydaný 2. júna, nie je len bodovým vydaním, ale aj novou verziou špecifikácie. Na niečo vyše 500 stranách je špecifikácia EJB 2.0 o 200 strán (66 percent) dlhšia ako predchádzajúca špecifikácia EJB 1.1. Najdôležitejšie zmeny v špecifikácii sú tie, ktoré sa vykonajú v kontajneri spravovanej perzistencie (CMP) a zavedenie úplne nového typu fazule, MessageDrivenBean.

Väčšina zmien v EJB 2.0 sa nachádza v definícii nového modelu súčastí CMP. Je to radikálne odlišné od starého modelu CMP, pretože predstavuje úplne nového účastníka, manažér vytrvalostia úplne nový spôsob definovania polí spravovaných kontajnermi, ako aj vzťahov s inými objektmi typu bean a závislými objektmi.

Zavedenie MessageDrivenBean (bean správy) je tiež významný. Zrnko správy predstavuje integráciu JMS (Java Message Service) s EJB za účelom vytvorenia úplne nového typu fazule určenej na spracovanie asynchrónnych správ JMS. Tento vzrušujúci nový typ fazule poskytuje klientom JMS model komponentov, ktorý im umožňuje nasadenie v bohatom a robustnom prostredí kontajnerového systému EJB.

V špecifikácii je vykonaných mnoho ďalších menších zmien. Tieto ďalšie zmeny, aj keď sú dôležité, sa väčšinou týkajú sprísnenia špecifikácie, aby sa odstránili nejasnosti a zvýšila prenosnosť komponentov. Tento článok sa zameriava na nové modely komponentov CMP a message bean predstavené v EJB 2.0.

Uvádzam niekoľko konkrétnych príkladov, takže by malo byť celkom ľahké ich sledovať a pochopiť. Začiatočníci EJB však môžu materiál považovať za ťažší, pretože sa predpokladá, že čitatelia majú základné vedomosti o EJB. Viac informácií o EJB nájdete v zdrojoch.

Perzistencia riadená kontajnermi

Perzistencia v kontajneroch prešla v EJB 2.0 radikálnymi zmenami. V EJB 2.0 správca perzistencie spracováva perzistenciu fazúľ entít CMP automaticky za behu programu. Manažér perzistencie je zodpovedný za mapovanie fazule entity do databázy na základe novej zmluvy manažéra perzistencie beanov nazývanej abstraktná schéma perzistencie. Okrem toho je manažér perzistencie zodpovedný za implementáciu a vykonávanie metód vyhľadávania založených na novom dotazovacom jazyku s názvom EJB QL.

Je dôležité poznamenať, že produkty, ktoré vyhovujú špecifikácii EJB 2.0, musia podporovať model EJB 1.1 CMP, ako aj nový model EJB 2.0. Aj keď tieto modely nie sú kompatibilné, pre zabezpečenie spätnej kompatibility je vyžadovaná podpora pre model EJB 1.1.

Schéma abstraktného pretrvávania

Aby sme pochopili, ako funguje schéma abstraktného perzistencie a prečo je to dôležité, rýchlo pre vás preskúmam, ako sa s CMP pracuje v EJB 1.1, a potom prediskutujem, ako je definované v EJB 2.0.

Model EJB 1.1 CMP

V EJB 1.1 je vývojár fazule zodpovedný za vyhlásenie perzistentných polí triedy fazule za primitívne alebo serializovateľné typy Java. Nasledujúce príklady ukazujú Zamestnanec trieda podnikových bôbov, ako je definované v EJB 1.1, s niekoľkými poľami CMP:

// trieda Employee bean verejná trieda EmployeeBean implementuje java.ejb.EntityBean {// polia inštancií EntityContext ejbContext; // polia spravované kontajnerom public int identity; public String meno; verejný reťazec priezvisko; verejný dvojitý plat; adresa verejnej adresy; public Integer ejbCreate (int id, String fname, String lname) {identity = id; meno = meno; priezvisko = meno; návrat null; } ...} // Trieda závislá od adresy verejná trieda Adresa implementuje Serializable {public String street; verejné mesto String; verejný stav reťazca; verejný zips; } 

Keď sa na perzistenciu používa relačná databáza, primitívne polia ako napr identita, krstné meno, priezviskoa plat je pomerne ľahké vydržať, pretože sa pekne mapujú na typy SQL, ako sú INTEGER, CHARa DVOJNÁSOBNÝ.

V EJB 1.1 poskytuje deskriptor nasadenia XML fazule CMP cmp-pole prvky na identifikáciu trvalých polí (polia spravované kontajnerom) v triede bean. Ako je zobrazené nižšie, cmp-pole prvky sa používajú na rozlíšenie medzi poliami, ktoré sa zapisujú do databázy, a tými, ktoré nie sú. Napríklad ejbContext pole nie je zahrnuté v zozname polí spravovaných kontajnerom, a preto nejde o trvalé pole.

   ZamestnanecEJB ... Kontajner ... totožnosť meno priezvisko priezvisko platová adresa ... 

Poskytovateľ kontajnerov dodáva nástroj na mapovanie trvalých polí fazule na stĺpce v databázových tabuľkách, zvyčajne jednu tabuľku na jednu fazuľu. Serializovateľné typy ako napr Adresa, je však náročnejšie pretrvávať. V EJB 1.1 neexistuje štandardný spôsob mapovania serializovateľných objektov do relačnej databázy. Napriek tomu Adresa trieda má svoju vlastnú sadu polí, deskriptor nasadenia XML neposkytuje mechanizmus na mapovanie týchto polí do databázy. Vo väčšine prípadov sa očakávalo, že serializovateľné objekty ako napr Adresa bude pretrvávať ako binárny typ, ktorý sa niekedy nazýva a kvapka typu, do databázovej tabuľky.

Tento problém sa zhoršuje, keď sa zložitosť dátovej schémy entity bean zvyšuje. An Zamestnanec fazuľa môže mať napríklad veľa podradených objektov Adresa, ako napr Výhody a Pracovná pozícia. Tieto podradené objekty, ktoré sa nazývajú závislé objekty, môžu vytvárať komplexné objektové grafy zahŕňajúce niekoľko tabuliek v relačnej databáze. Okrem toho je CMP v EJB 1.1 do značnej miery neadekvátny pre pretrvávajúce vzťahy s inými fazuľami. Ak by v EJB 1.1 mal bean udržiavať vzťah s iným beanom, kontajner by automaticky použil primárny kľúč alebo handle ako odkaz. Ukázalo sa to ako dosť hrubý mechanizmus na udržiavanie vzťahov s inými fazuľami, ktorých prirodzený vzťah môže byť obojsmerný alebo závislý od polí, ktoré nie sú ľahko reprezentované primárnym kľúčom alebo popisovačom.

Model EJB 2.0 CMP

V EJB 2.0 vám nová zmluva medzi objektom bean entity CMP a správcom perzistencie umožňuje definovať zložitejšie a prenosnejšie vzťahy objektov bean-to-bean, bean-to-závislé a dokonca závislé-na-závislé v rámci objektu bean entity.

Trvalý správca je novým účastníkom procesu nasadenia Enterprise JavaBeans. Dodávateľ kontajnerov alebo dodávateľ, ktorý sa špecializuje na perzistenciu v konkrétnej databáze, môže poskytnúť manažéra perzistencie. Cieľom je oddeliť mechanizmus používaný na správu beanových vzťahov od kontajnera, ktorý je zodpovedný za správu bezpečnosti, transakcií a zdrojov. Rozdelenie zodpovednosti umožňuje rôznym manažérom vytrvalosti pracovať s rôznymi kontajnermi. Tiež to umožňuje, aby sa fazuľa entít stala prenosnejšou medzi dodávateľmi EJB, ako aj manažérmi vytrvalosti.

Ak ste pracovali alebo študovali CocoBase, produkt od spoločnosti Thought Inc., ktorý automaticky generuje fazuľa BMP (Bean Managed Persistence) pre kontajnery EJB 1.1, potom ste už trochu oboznámení s tým, ako by mohol trvalý nástroj pre správu fungovať. CocoBase generuje všetku logiku prístupu do databázy pre fazuľa BMP na základe informácií o mapovaní medzi objektmi a vzťahmi, ktoré poskytuje rozdeľovač fazule. V EJB 2.0 môže manažér perzistencie vygenerovať mapovanie entít CMP na relačnú databázu na základe informácií poskytnutých deskriptorom nasadenia, abstraktnou schémou perzistencie fazule a prácou vykonanou nasadením. Manažér perzistencie sa však neobmedzuje iba na relačnú databázu. Správcov perzistencie možno vyvinúť aj pre objektové databázy, ako aj pre staršie systémy a systémy ERP, ako je SAP.

Aby sa manažér perzistencie mohol oddeliť od kontajnera, bolo treba definovať zmluvu medzi fazuľou a manažérom perzistencie. Zmluva sa prejavuje v novej schéme abstraktnej perzistencie. Táto schéma je definovaná prostredníctvom novej sady prvkov XML v deskriptore nasadenia a sady idiómov kódu v fazuľa entity CMP. V EJB 2.0 je trieda CMP bean deklarovaná ako abstraktná a k jej perzistentným a vzťahovým poliam sa pristupuje pomocou abstraktných prístupových a mutačných metód, ktorých podpisy metód sa mapujú na špeciálne prvky v deskriptore nasadenia XML.

Keď je fazuľa nasadená, pomocou nástrojov perzistentného manažéra vygenerujete konkrétnu implementáciu triedy abstraktných fazule a jej závislých tried objektov na základe deskriptora nasadenia XML a triedy fazule. Konkrétne implementácie budú obsahovať prístupový kód k údajom, ktorý za behu skutočne bude čítať a zapisovať stav fazule do databázy. Počas behu používa kontajner namiesto abstraktných tried definovaných poskytovateľom fazule podtriedy vygenerované nástrojmi správcu perzistencie.

Na vysvetlenie diskusie je uvedený príklad entity CMP, ktorý konkrétnejšie vysvetľuje, ako funguje schéma abstraktnej perzistencie.

Príklad entity CMP v EJB 2.0

V EJB 2.0 je fazuľa entity spravovanej kontajnerom definovaná ako abstraktná a jej trvalé polia nie sú definované priamo v triede bean. Namiesto toho bola vyvinutá abstraktná perzistentná schéma, ktorá umožňuje poskytovateľovi fazule deklarovať trvalé polia a vzťahy fazule nepriamo. Nižšie je uvedený príklad súboru Zamestnanec fazuľa, ktorá používa novú abstraktnú perzistentnú schému. Všimnite si, že v triede bean nie je deklarované žiadne z trvalých polí.

verejný abstrakt EmployeeBean implementuje javax.ejb.EntityBean {. // polia inštancií EntityContext ejbContext; // trvalé oblasti spravované kontajnerom public abstract void setIdentity (int identity); public abstract int getIdentity (); public abstract void setFirstName (reťazec firstName); public abstract Reťazec getFirstName (); public abstract void setLastName (reťazec priezvisko); public abstract Reťazec getLastName (); // polia vzťahov spravovaných kontajnerom public abstract void setContactInfo (ContactInfo info); verejný abstrakt ContactInfo getContactInfo (); ...} 

V deskriptore nasadenia XML tejto fazule abstraktná schéma perzistencie deklaruje polia a vzťahy spravované kontajnerom.

   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