Maciej Zakrzewicz
Enterprise JavaBeans
Budowa aplikacji w technologii
Plan prezentacji rzegląd architektur aplikacji rozproszonych: CORBA, SOAP, prowadzenie do Enterprise JavaBeans (EJB) udowa komponentów sesyjnych EJB
udowa komponentów encyjnych EJB
odsumowanie
P
EJB
W
B
B
P
•
•
•
•
•
Cele budowy aplikacji rozproszonych większenie przepustowości systemu poprzez rozproszenie większenie niezawodności systemu poprzez replikację dciążenie komputera użytkownika końcowego dzięki spółdzielenie komponentów przez różne aplikacje pracujące Z
przetwarzania pomiędzy wiele komputerów Z
komponentów w alternatywnych lokalizacjach O
przeniesieniu ciężkiego przetwarzania na stronę serwera aplikacji
W
we wspólnych środowisku sieciowym
•
•
•
•
Object Adapter
Szkielet serwera wg IDL
IIOP
Object Request Broker
IDL (Interface Description Language) Przegląd architektur: CORBA
Klient
Client Proxy wg IDL
pecyfikacja obejmuje architekturę oraz język opisu plikacje CORBA składają się z programu klienta, Jedna z pierwszych architektur budowy heterogenicznych rozproszonych aplikacji komponentowych S
interfejsów -
A
współpracującego z programami serwerów poprzez warstwę komunikacyjną ORB (Object Request Broker)
•
•
•
SOAP
(klasa)
łania o
metoda(par1,par2)
wywołania
deserializacja
XML
serwer
SOAP
XML
mentu XML. Argumenty
wynik
u
wyniku
ko
serializacja
do
komunikatem SOAP, jest przekazywany naniu deserializacji argumentów wyw HTTP
zuje zwrotnie jej rezultat, korzystając z ertowane d
e do ciągu bajtów reprezentowanego wynik
ta jest konw
wyniku
gi, która po doko
XML
deserializacja
słu
Przegląd architektur: SOAP
klient
SOAP
XML
serializacja
wywołania
, uruchamia żądaną metodę i przeka metoda(par1,par2)
Wywołanie metody przez klien
wywołania są serializowane (konwertowan heksadecymalnie). Dokument XML, nazywany poprzez HTTP POST do u
metody
analogicznego algorytmu.
EJB
komponent
komponent
kontener EJB
kontener EJB
serwer aplikacji
serwer aplikacji
RMI/IIOP
wyniki metod
wywołania metod
Przegląd architektur: EJB
aplikacja
klienta
Enterprise JavaBeans Wprowadzenie do
efiniuje architekturę i d Enterprise JavaBeans
pecyfikacja Enterprise JavaBeans omponenty EJB są wykorzystywane do budowy złożonych S
metodę budowy rozproszonych komponentów obiektowych uruchamianych po stronie serwera aplikacji K
aplikacji rozproszonych na zasadzie „składania z klocków”
•
•
oprzez p
następnie tą
i zdalnych
łając do nich
składa się
EJB
komponent
aplikacji klienta
kontener EJB
serwer aplikacji
nterprise JavaBeansE
logii
. Aplikacja klienta komunikuje się on
wyniki metod
wywołania metod
Ogólna architektura EJB
z komponentami przetwarzania danych, przesy realizowany w tech
dsyłane do aplikacji klienta. o Java
aplikacja
klienta
drogą
komputerowąć
Program
dwóch rodzajów elementów składowych: lokalnej komponentów przetwarzania danych sie
żądania zdalnego wykonania metod. Wyniki działania tych metod są samą
jest kontener EJB
callback
Kontener EJB
Enterprise JavaBeans
e wykonywać wywołania metod kontenera EJB
ezpośrednim środowiskiem uruchomieniowym dla każdego ontener EJB całkowicie pośredniczy w komunikacji pomiędzy ontener EJB oferuje komponentowi szereg usług o omponent EJB może uzyskać dostęp do usług kontenera B
komponentu
K
komponentem EJB a światem zewnętrznym K
charakterze systemowym: ochrona dostępu, obsługa transakcji, itp.
K
EJB korzystając z mechanizmu typu powoływania do życia obiektu komponentu EJB, kontener EJB
przekazuje komponentowi EJB pewien rodzaj uchwytu zwrotnego; za pomocą tego uchwytu obiekt komponentu EJB
moż
•
•
•
•
komponent
stępo
rwera aplikacji e
nikat od klienta,
.0 definiuje trzy typy 2
omponent EJB reprezentuje dane, jedynczą aplikację klienta i nie k
o
ieszczone po stronie sm
łdzielony przez wielu klientów, dó (Message-Driven Bean): komunikatowy y, kiedy nadchodzi komu
p
Typy komponentów EJB
Enterprise JavaBeans
, ws
ervice) pochodzących ze środowisk kolejkowych; S
(Session Bean): sesyjny komponent EJB to krótkotrwały (Entity Bean): encyjny
nych
unikatowe
zy da
sesyjne
obiekt wykorzystywany przez p współdzielony z innymi aplikacjami, stanowiący logiczne rozszerzenie kodu aplikacji klienta u
encyjne
które są trwale przechowywane w systemie bazy danych; cechuje się długim czasem życia, pozwala na atomowe, transakcyjne modyfikacje ba
sesji
kom
EJB jest asynchronicznym konsumentem komunikatów JMS (Java Messaging
uruchamiany wted
wykonywany asynchronicznie, może modyfikować zawartość bazy danych, bezstanowy
pecyfikacjaS komponentów EJB: –
–
–
•
i utworzenie z
, reprezentującej
ava
Java
J
, reprezentujących
klasy
pliku konfiguracyjnego
, służący do wywoływania metod logiki (Deployment Descriptor)
, służący do zarządzania cyklem życia komponentu EJB
dwóch interfejsów Java
js Home
js Remote/Local
rfe
rfe
te
te
n
n
Ogólny proces tworzenia komponentu EJB
biznesowej komponentu EJB
rzygotowanie kodu źródłowego
tworzenie
rzygotowanie XML-owego
ompilacja całego przygotowanego kodu mieszczenie przygotowanych plików w systemie plików P
komponent EJB
U
punkty kontaktu świata zewnętrznego z komponentem EJB:
–i
–i
P
deskryptora instalacji
K
niego pliku JAR/EAR o specjalnej wewnętrznej strukturze katalogów
U
serwera aplikacji; zarejestrowanie komponentu EJB
•
•
•
•
•
cją klienta i pamiętają swój stan a Sesyjne komponenty EJB
(stateless) sesyjne komponenty EJB nie gwarantują (stateful) komponenty EJB są przez cały czas życia stanowe
skojarzone z jedną i tą samą aplik obiektu
bezstanowe
pamiętania swojego stanu obiektu i mogą być przy każdym wywołaniu wykorzystywane przez inną aplikację klienta raktowane jako logiczna kontynuacja kodu aplikacji klienta, yją jedynie przez czas trwania sesji aplikacji klienta wa rodzaje sesyjnych komponentów EJB: T
fizycznie zlokalizowana jednak po stronie serwera aplikacji Ż
Ich zastosowanie przypomina klasyczne rozwiązania mechanizmów zdalnego wołania procedury RPC
D
–
–
•
•
•
•
dla zdalne
rogramistę w p
tu EJB, które będą dostępn
or1Remote extends EJBObject
ać zaimplementowane przez
Przykład
throws RemoteException;
mote deklaruje metody komponen onentu EJB.
e
p
float multiply(float factor1, float factor2) Tworzenie sesyjnego komponentu EJB (1/5) import javax.ejb.EJBObject;
import java.rmi.RemoteException; public interface Multiplicat
{
}
Interfejs Remote
Interfejs R
aplikacji klienta. Metody te muszą zost klasie kom
ia cyklem życia kom
Metody te nie będą implementowane przez or1Home extends EJBHome
Przykład
throws RemoteException, CreateException; e
deklaruje metody zarządzane
Multiplicator1Remote create() Tworzenie sesyjnego komponentu EJB (2/5) import javax.ejb.EJBHome;
import java.rmi.RemoteException; import javax.ejb.CreateException; public interface Multiplicat
{
}
Interfejs Hom
Interfejs Hom
będa dostępne dla zdalnej aplikacji klienta.
programistę, lecz zostaną wygenerowane autom
ean implements SessionBean
ext(SessionContext ctx) {}
Przykład
onentu EJBp
return factor1 * factor2;
public void ejbCreate() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void setSessionCont
public float multiply(float
}}
Tworzenie sesyjnego komponentu EJB (3/5) import javax.ejb.SessionBean; import javax.ejb.SessionContext; public class Multiplicator1B
{
Klasa kom
osystems, Inc.//DTD Enterprise ( Stateless )</description> n.com/j2ee/dtds/ejb-jar_1_1.dtd"> Przykład
ainer</transaction-type>
= '1.0' encoding = 'windows-1252'?> 1.1//EN" "http://java.su
<description>Session Bean
<display-name>Multiplicator1</display-name>
<ejb-name>Multiplicator1</ejb-name>
<home>Multiplicator1Home</home>
<remote>Multiplicator1Remote</remote>
<ejb-class>Multiplicator1Bean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Cont
ersionv
<session>
</session>
Tworzenie sesyjnego komponentu EJB (4/5)
<enterprise-beans>
</enterprise-beans>
<?xml
<!DOCTYPE ejb-jar PUBLIC "-//Sun Micr JavaBeans
<ejb-jar>
</ejb-jar>
Plik deskryptora instalacji
nitialContextFactory"); r1Home)ctx.lookup("multiplicator1"); Przykład
ator1Remote.multiply(2,2));
PRINCIPAL, "scott"); CREDENTIALS, "tiger"); ltiplicator1Home.create();
= new Hashtable();
new InitialContext(env);
aplikacji klienta EJB
=
udo
"com.evermind.server.rmi.RMII
"ormi://miner:1811/ejbapp1"); nt ke
Tworzenie sesyjnego komponentu EJB (5/5) Multiplicator1Home multiplicator1Home; Multiplicator1Remote multiplicator1Remote; Hashtable env
env.put(Context.INITIAL_CONTEXT_FACTORY, env.put(Context.SECURITY_
env.put(Context.SECURITY_
env.put(Context.PROVIDER_URL, Context ctx
multiplicator1Home = (Multiplicato multiplicator1Remote = mu
System.out.println(multiplic
Fragm
Java
którego zad
ontainer-Managed
JB,
ean-Managed
C
B
(CMP -
(BMP -
ładowanie w bazie danych; żyją aż na funkcjonalności kontenera E
omponent EJB może być współdzielony przez wiele ją
k
a
Encyjne komponenty EJB
: ypy ta z trwałością obsługiwaną przez komponent Persistency): muszą same umieszczać swój stan w bazie danych, korzystając np. z biblioteki JDBC lub SQLJ z trwałością obsługiwaną przez kontener EJB Persistency): poleg jest w tym przypadku automatyczne zapisywanie i odczytywanie stanu komponentu do/z bazy danych łużą do uzyskania efektu trwałości obiektów programowych ykorzystywane do budowy warstwy komunikacji logiki biznesowej z ojedynczy encyjny
w
S
poprzez ich automatyczne fizyczne sk do momentu jawnego ich usunięcia W
bazą danych lub też do implementacji takiej logiki biznesowej, która intensywnie eksploatuje bazę danych P
aplikacji klientów
–
–
•
•
•
•D
COMM DEPTNO
20
----------
300 30
500 30
----------
DATE SAL
-----
komponentu EJB CMP (1/5)
zechowywania obiektów EJB w bazie danych.
----
Przykład
7902 17-DEC-80 800
7698 20-FEB-81 1600
7698 22-FEB-81 1250
----------
---------
----------
EMPNO ENAME JOB MGR HIRE
-----
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
...
Tabela Emp
Tabela Emp będzie służyć do trwałego pr Każdy obiekt EJB będzie reprezentować jednego pracownika.
Tworzenie encyjnego
dla zdalne
rogramistę w p
tu EJB, które będą dostępn
adzie są to metody dostępu do obiektu komponentu EJB CMP (2/5)
Przykład
ać zaimplementowane przez
) throws RemoteException;
mote extends EJBObject
o) throws RemoteException;
ncyjnegoe
mote deklaruje metody komponen onentu EJB. W powyższym przykł
e
p
long getEmpno() throws RemoteException; void setEmpno(long newEmpn
...
long getDeptno() throws RemoteException; void setDeptno(long newDeptno Interfejs R
aplikacji klienta. Metody te muszą zost klasie kom
pracownika.
import javax.ejb.EJBObject;
import java.rmi.RemoteException; public interface Employee2Re
{
}
Tworzenie
Interfejs Remote
deklaruje metody zarządzania e ne autoa
{
neroweg
Interfejs Hom
cyklem życia i wyszukiwania komponentu EJB, które będa dostępne dla zdalnej aplikacji klienta. Metody te nie będą implementowane przez programistę, lecz zostaną wy
ployee2RemotePK primaryKey)
komponentu EJB CMP (3/5)
Przykład
emoteException, FinderException; 2Home extends EJBHome
ncyjnego
throws RemoteException, CreateException; throws RemoteException, CreateException; throws RemoteException, FinderException; throws RemoteException, FinderException;}
e
e
Employee2Remote create()
Employee2Remote create(long empno) Employee2Remote findByPrimaryKey(Em Collection findAll() throws R
Employee2Remote findByName(String val) import javax.ejb.EJBHome;
import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.FinderException; import java.util.Collection;
public interface Employee
Interfejs Hom
Tworzenie
newEmpno;}=
komponentu EJB CMP (4/5)
Przykład
Empno) {empno
newDeptno) {deptno
implements EntityBean {
ncyjnegoe
onentu EJBp
public long empno; public String ename; public String job; public long mgr; public String hiredate; public long sal; public long comm; public long deptno;
...
public long getEmpno() {return empno;}
public void setEmpno(long new
...
public long getDeptno() {return deptno;}
public void setDeptno(long
import javax.ejb.*;
public class Employee2Bean
}
Klasa kom
Tworzenie
Inc.//DTD
Plik deskryptora instalacji
MP</description>C
komponentu EJB CMP (5/7)
n.com/j2ee/dtds/ejb-jar_1_1.dtd"> JB -
Przykład
Microsystems,
E
</field-name></cmp-field>
</field-name></cmp-field>
</persistence-type>
nent
emotePK</prim-key-class>
</ejb-class>
oding = 'windows-1252'?>
</remote>
empno
deptno
</home>
</ejb-name>
Container
ncyjnegoe
Employee2Bean
Employee
ejb-jar PUBLIC "-//Sun
1.1//EN" "http://java.su Employee2Remote
Employee2Home
ersion = '1.0' encv
<description>Encyjny kompo
<display-name>Employee</display-name>
<ejb-name>
<home>
<remote>
<ejb-class>
<persistence-type>
<prim-key-class>Employee2R
<reentrant>False</reentrant>
<cmp-field><field-name>
...
<cmp-field><field-name>
</entity></enterprise-beans></ejb-jar>
<?xml
<!DOCTYPE
JavaBeans
<ejb-jar><enterprise-beans> <entity> Tworzenie
EMP
" table="
"
"
Connection1DS
DEPTNO
EMPNO
"><method>
Plik deskryptora instalacji
ename=$1
komponentu EJB CMP (6/7)
Przykład
persistence-type="NUMBER(2)"/>
</method-param>
persistence-type="NUMBER(4)"/>
" data-source="jdbc/
" persistence-name="
" persistence-name="
rise-beans></orion-ejb-jar> empno
deptno
</method-name>
Employee
</ejb-name>
ncyjnegoe
java.lang.String
findByName
Employee
<method-param>
<ejb-name>
<method-name>
<method-params>
</method-params>
...
<cmp-field-mapping name="
...
<cmp-field-mapping name="
<finder-method partial="True" query="
</method></finder-method> Tworzenie
<primkey-mapping><cmp-field-mapping><fields>
...
<entity-deployment name="
</entity-deployment></enterp
Fragm
nitialContextFactory");
komponentu EJB CMP (7/7)
Przykład
ormi://miner:1811/ejbapp2"); me)ctx.lookup("Employee"); e2Home.findByName("KING"); PRINCIPAL, "scott"); CREDENTIALS, "tiger"); ncyjnegoe
= new Hashtable();
new InitialContext(env);=
"com.evermind.server.rmi.RMII Employee2Home employee2Home;
Employee2Remote e;
Hashtable env
env.put(Context.INITIAL_CONTEXT_FACTORY, env.put(Context.SECURITY_
env.put(Context.SECURITY_
env.put(Context.PROVIDER_URL, "
Context ctx
employee2Home = (Employee2Ho
e = (Employee2Remote)employe
System.out.println(e.getJob()); System.out.println(e.getSal()); e.setSal(550);
Tworzenie
rzez komponenty sesyjne, będące p Podsumowanie
e względu na skomplikowaną procedurę przygotowywania popularnych zastosowaniach, technologia EJB służy do Enterprise JavaBeans stanowią naturalny wybór architektury aplikacji rozproszonych dla programisty Java Z
wersji instalacyjnej komponentów EJB, zaleca się wykorzystywanie specjalizowanych narzędzi programistycznych (np. JDeveloper) W
realizacji wielowarstwowych aplikacji, w których interakcja z bazą danych obsługiwana jest przez komponenty encyjne, a przetwarzanie danych -
klientami komponentów encyjnych
•
•
•
Java
RMI
automatyczna
tak
tak
SOAP
dowolny
HTTP
ręczna
tak
tak
orównanie technologiip
CORBA
dowolny
IIOP
ręczna
nie
tak
Podsumowanie -
język programowania
protokół komunikacyjny
integracja z bazą danych
dostęp asynchroniczny
(kolejkowy)
obsługiwane przez 9iAS