Enterprise Java Beans
Obsah přednášky
Technologie Enterprise Java Beans
Popis technologie EJB J2EE aplikace Typy komponent Entity Beans Session Beans MessageMessage-Driven Beans
Miroslav Beneš
Java Messaging Service (JMS) Závěr Enterprise Java Beans
Enterprise Java Beans (EJB)
EJB kontejner
Specifikace architektury pro vý vývoj a nasazení nasazení distribuovaných transakčních objektových komponent na straně serveru Konvence + sada rozhraní (EJB API) Cíl = zajištění kompatibility mezi produkty různých výrobců
prostředí, v němž běží komponenty vzdálený přístup bezpečnost transakce souběžný přístup přístup ke zdrojům a jejich sdílení
komponenty kontejner
izolace komponent od aplikací
Enterprise Java Beans
2
3
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
nezávislost na dodavateli kontejneru zjednodušení tvorby aplikací Enterprise Java Beans
4
1
Enterprise Java Beans
EJB kontejner klient
Aplikační komponenty v J2EE
požadavek
Klienti aplikace
transakce perzistence bezpečnost
Aplety
EJBContext, EJBContext, JNDI ENC
Bean
Zdroj: www.jguru www.jguru..com
aplikační (business) logika
5
Enterprise Java Beans
Aplikační komponenty v J2EE datová vrstva
servlety, servlety, stránky JSP, filtry, ... beží obvykle v prostředí webového serveru
Komponenty EJB
Enterprise Java Beans
vizuální komponenty spouštěné obvykle v prostředí webového prohlížeče
Webové komponenty
callback metody
samostatné programy s vlastním uživatelským rozhraním
Struktura aplikace J2EE
Databáze
6
J2EE modul základní stavební jednotka popsán deskriptorem (Deployment (Deployment Descriptor) Descriptor) reprezentován souborem .jar, .jar, .war, .rar .rar EJB modul, webový modul, modul klienta aplikace, modul pro adaptéry
aplikační logika prezentační Webový logika kontejner
EJB kontejner
servlet
prezentace
EJB
EJB
Webový prohlížeč
Aplet
Webový HTML prohlížeč stránka
Kontejner klienta
Klient
J2EE aplikace
deskriptor aplikace /META/META-INF/application.xml INF/application.xml
soubor .ear
Zdroj: Zdroj: Z+N Enterprise Java Beans
7
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Enterprise Java Beans
8
2
Enterprise Java Beans
Role při vývoji EJB aplikací
Role při vývoji EJB aplikací
Tvůrce komponent EJB
příprava komponent a deskriptorů důraz na znovupoužitelnost
Sestavitel aplikace
skládá komponenty do větších celků
Odborník na nasazení
Dodavatel EJB serveru operační systém (Sun, IBM, HP) middleware technologie (Borland, IONA) databázový systém (Oracle (Oracle,, Sybase) Sybase)
Dodavatel EJB kontejneru
nasazení komponent do konkrétního prostředí konfigurace, příprava zdrojů, bezpečnostní politika
Administrátor systému
Enterprise Java Beans
Enterprise Java Beans
10
Typy komponent EJB
obsahují aplikační logiku instance se vytváří a spravuje kontejnerem možnost přizpůsobení změnou DD nastavení atributů odděleno od implementace přenositelnost beanů mezi kontejnery možnost práce s beanem bez nutnosti úpravy zdrojového kódu nebo rekompilace Enterprise Java Beans
konfigurace a administrace infrastruktury dohled za běhu aplikace
9
Vlastnosti komponent EJB
nástroje pro nasazení EJB komponent vlastní běhové prostředí pro instance EJB
11
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Session Beans
Entity Beans
bezstavové služby stavové objekty v rámci sezení perzistentní objekty spravované uživatelem (BMP) perzistentní objekty spravované kontejnerem (CMP)
MessageMessage-Driven Beans
bezstavové služby volané asynchronně příchodem JMS zpráv
Enterprise Java Beans
12
3
Enterprise Java Beans
Kontrakt mezi klientem a komponentami EJB
Typy klientů
Lokální klient
v rámci stejného stroje JVM přímý přístup ke komponentě efektivnější přístup
javax. javax.ejb. ejb.EJBHome, EJBHome, javax. javax.ejb. ejb.EJBLocalHome vytváření, rušení a vyhledávání instancí implementováno třídami, které vytvoří kontejner referenci získá klient pomocí rozhraní JNDI
Vzdálený klient v jiném procesu než komponenta využívá standardní Java RMI rozhraní vyžaduje serializaci / deserializaci
Enterprise Java Beans
13
Enterprise Java Beans
Kontrakt mezi klientem a komponentami EJB
Třídní rozhraní (Home Interface)
14
Kontrakt mezi komponentami a kontejnerem EJB
Rozhraní komponenty
Třída komponenty: implementuje business metody, kontejner na ně deleguje volání od klienta; klienta; implementuje metody pro vytváření a rušení, případně i vyhledání komponent (ejbCreate (ejbCreate,, ejbFind..., ejbFind..., ejbRemove) ejbRemove); implementuje callback metody z rozhraní rozhraní
javax. javax.ejb. ejb.EJBObject, EJBObject, javax. javax.ejb. ejb.EJBLocalObject definice business metod implementováno třídou, kterou generuje kontejner udržování jednoznačné identity instance (generovaná, primární klíč)
javax.ejb.SessionBean javax. javax.ejb. ejb.EntityBean javax. javax.ejb. ejb.MessageDrivenBean
Enterprise Java Beans
15
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Enterprise Java Beans
16
4
Enterprise Java Beans
Kontrakt mezi komponentami a kontejnerem EJB
Session Beans
Kontejner:
poskytuje přístup ke kontextu instance komponenty:
zapouzdření zapouzdření logiky do neperzistentních objektů možnost odstranění instance (timeout (timeout,, pád kontejneru, systémová výjimka) možnost dočasného uložení stavu
javax. javax.ejb. ejb.SessionContext, SessionContext, javax. javax.ejb. ejb.EntityContext, EntityContext, javax. javax.ejb. ejb.MessageDrivenContext; MessageDrivenContext;
poskytuje JNDI kontext; kontext; řídí transakce, bezpečnost, ošetření výjimek; výjimek; šťuje správu stavu komponenty (CMP). zajišťuje zaji
stavové (state (state)) / bezstavové (stateless) stateless)
nejsou určeny pro sdílení více klienty
Enterprise Java Beans
17
Stavové Session Beans
create<…>( parametry)) create<…>(parametry
ejbPassivate() ejbPassivate() ejbActivate() ejbActivate() remove() remove() timeout
transakce
řízené uživatelem řízené kontejnerem Enterprise Java Beans
18
Získání reference na třídní rozhraní import javax. javax.naming. naming.*; Context ctx = new InitialContext(); InitialContext(); AHome aHome = (AHome)javax.rmi.PortableRemoteObject.narrow( AHome)javax.rmi.PortableRemoteObject.narrow( ctx.lookup(“java:comp/env/ejb/a”, ctx.lookup(“java:comp/env/ejb/a”, AHome.class); // remote AHome.class); AHome aHOme = (AHome)ctx.lookup (…); // local (AHome)ctx.lookup(…); local
zrušení zrušení instance
Enterprise Java Beans
pasivace a aktivace instance
serializace přístupu
Vytvoření instance komponenty
vytvoření vytvoření instance
zachování stavu po dobu existence relace
Vytvoření instance A a = aHome.create<…>( parametry) ) aHome.create<…>(parametry
19
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Enterprise Java Beans
20
5
Enterprise Java Beans
Příklad – třídní rozhraní
Příklad – rozhraní komponenty
// ScitackaHome .java ScitackaHome.
// Scitacka. Scitacka.java
import java. java.rmi. rmi.RemoteException; RemoteException; import javax.ejb.*; javax.ejb.*;
import java. java.rmi. rmi.RemoteException; RemoteException; import javax.ejb.*; javax.ejb.*;
public interface ScitackaHome extends EJBHome { public Scitacka create() throws RemoteException, RemoteException, CreateException; CreateException; }
public interface Scitacka extends EJBObject EJBObject { public int secti( secti(int a, int b) throws RemoteException; RemoteException; }
Enterprise Java Beans
21
Enterprise Java Beans
Příklad – třída komponenty
22
Příklad – klient // Test. Test.java
// ScitackaBean. ScitackaBean.java import javax.ejb.*; javax.ejb.*;
import javax.naming.*; javax.naming.*; import javax javax.rmi. rmi.PortableRemoteObject; PortableRemoteObject;
public class ScitackaBean ScitackaBean implements SessionBean { private SessionContext ctx; ctx; public ScitackaBean() ScitackaBean() {} public void ejbCreate() ejbCreate() throws CreateException {} public void ejbRemove() ejbRemove() {} public void ejbActivate() ejbActivate() {} public void ejbPassivate() ejbPassivate() {} public void setSessionContext(SessionContext ctx) ctx) { this.ctx = ctx; ctx; } public int secti(int a, int b) { return a+b; a+b; } }
public class Test { public static void main(String[] main(String[] args) args) { try { Context ctx = new InitialContext(); InitialContext(); ScitackaHome sh = (ScitackaHome)PortableRemoteObject.narrow( ScitackaHome)PortableRemoteObject.narrow( ctx.lookup(“java:comp/env/ejb/Scitacka”), ctx.lookup(“java:comp/env/ejb/Scitacka”), ScitackaHome.class); ScitackaHome.class); Scitacka scitacka = sh.create(); sh.create(); System.out.println(scitacka.secti(123,321)); scitacka.remove(); scitacka.remove(); } catch( catch( Exception ex ) { ex.printStackTrace(); ex.printStackTrace(); } } }
Enterprise Java Beans
23
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Enterprise Java Beans
24
6
Enterprise Java Beans
Entity Beans
Pohled na perzistentní perzistentní entitu
Třídní rozhraní
obvykle v relační databázi
Sdílený přístup více uživatelů Perzistentní identita instance
Rušení Rušení instance
Container Managed Persistence (CMP) Bean Managed Persistence (BMP)
remove(A_PK remove(A_PK key)
Třídní business metody
25
Enterprise Java Beans
Příklad
26
Perzistence řízená kontejnerem
// OsobaHome.java import java. java.rmi. rmi.RemoteException; RemoteException; import javax.ejb.*; javax.ejb.*; import java.util.Collection; java.util.Collection;
Abstraktní schéma perzistence atributy řízené kontejnerem vztahy (1:1, 1:N, M:N) součást DD mapování do relačního schématu není součástí specifikace EJB (vendor (vendor--specific DD)
public interface OsobaHome extends EJBHome { public Osoba create(String rc, rc, String jm) jm) throws CreateException, CreateException, RemoteException; RemoteException; public Osoba findByPrimaryKey(String rc) rc) throws FinderException, FinderException, RemoteException; RemoteException; public Collection findByJmeno(String jm) jm) throws FinderException, FinderException, RemoteException; RemoteException; public int getPocetOsob() getPocetOsob() throws RemoteException; RemoteException; } Enterprise Java Beans
Vyhledání existujícího objektu find<…>( parametry) ) find<…>(parametry A findByPrimaryKey(A_PK key)
Zajištění správy perzistentního stavu
Enterprise Java Beans
create<>(parametry ) create<>(parametry)
primární klíč přežívá i restart kontejneru
Vytvoření nového objektu
Třída beanu deklarována jako abstract implementaci generuje kontejner neobsahuje atributy a vztahy (pouze v DD) přístupové metody public abstract get/set get/set
27
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Enterprise Java Beans
28
7
Enterprise Java Beans
Příklad – rozhraní komponenty
Perzistence řízená komponentou
import java. java.rmi. rmi.*; import javax.ejb.*; javax.ejb.*;
public interface Osoba extends EJBObject { public String getRc() getRc() throws RemoteException; RemoteException; public String getJmeno() getJmeno() throws RemoteException; RemoteException; public void setJmeno(String jmeno) jmeno) throws RemoteException; RemoteException; } Enterprise Java Beans
29
Nově definovány specifikací EJB 2.0 Volají se asynchronně jako výsledek přijetí JMS zpráv
31
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
minimální vazba komunikujících aplikací asynchronnost spolehlivost
Prvky architektury JMS
příchozí požadavek může zpracovat libovolná instance Enterprise Java Beans
Systém pro zasílání zpráv Vlastnosti:
Neudržují si stav týkající se klienta Všechny instance jsou ekvivalentní
30
Java Messaging Service (JMS)
nemají rozhraní pro klienty metoda onMessage( onMessage(Message msg) msg)
udržování celého stavu objektu v instanci udržování jen některých atributů instance svůj stav neudržuje
Enterprise Java Beans
ejbCreate<…>, ejbCreate<…>, ejbRemove ejbFind<…> ejbFind<…> ejbLoad, ejbLoad, ejbStore
Vztahy nejsou definovány v DD Možné Možné přístupy:
Message-Driven Beans
Přístup k datům implementuje třída komponenty
JMS poskytovatel – součást J2EE produktu Klienti (JMS nebo nativní) Zprávy Administrované objekty – destinations, destinations, connection factories
Enterprise Java Beans
32
8
Enterprise Java Beans
Způsoby komunikace v JMS
Vztahy mezi JMS objekty
Komunikace bodbod-bod (point(point-toto-point)
Connection Factory
fronty zpráv (queues (queues)) zpráva adresována do jedné fronty příjemce si vybírá zprávy z fronty příjemce potvrzuje úspěšné přijetí zprávy
zasílá zprávy vytváří
QueueSender TopicPublisher
zpráva adresována nějakému cíli (topic (topic)) distribuce zprávy všem předplatitelům
Connection
Důvody k nasazení J2EE
přenositelnost (74 %) otevřenost standardu (28 %) škálovatelnost (24 %) snadnost vývoje (22 %) výkon (16 %)
QueueSession TopicSession Message TextMessage ...
34
Největší problémy při vývoji J2EE aplikací nedostatečná zkušenost s podobnými projekty (24 %) změny ve specifikaci (22 %) nezvládnuté řízení projektu vývoje (20 %)
Problémy nasazení J2EE
překročení plánované doby vývoje (22/50) překročení rozpočtu na projekt (23/50)
Enterprise Java Beans
QueueReceiver TopicSubscriber
Závěr
Session
Message Enterprise Java Beans
Závěr
vytváří
vytváří
QueueConnection TopicConnection 33
Message Consumer
vytváří
vytváří
Queue Topic
přijímá zprávy
Message Producer
Producent/předplatitel (publish (publish//subscribe) subscribe)
Enterprise Java Beans
Cílový kanál
QueueConnectionFactory TopicConnectionFactory
Spokojenost s volbou: 92 % zákazníků
35
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Zdroj: Forrester Research, Research, červenec 2001, Z+N
Enterprise Java Beans
36
9
Enterprise Java Beans
Další zdroje informací
www.jguru.com Enterprise JavaBeansTM Technology Fundamentals Short Course
Z+N Zelený, J., Nožička, J.: Komponentní architektury COM+, CORBA, EJB. BEN – technická literatura, Praha, 2002, ISBN 8080-73007300-057057-1
Enterprise Java Beans
37
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
10