Professional Documents
Culture Documents
fr - CEDRIC ( CNAM) -
Samia Bouzefrane Matre de Confrences Laboratoire CEDRIC Conservatoire National des Arts et Mtiers 292 rue Saint Martin 75141 Paris Cdex 03 samia.bouzefrane@cnam.fr http://cedric.cnam.fr/~bouzefra
Bibliographie
EJB 2.0 : Mise en uvre, Christophe Calandreau, Alain Faur Nader Soukouti, Ed. Dunod, 2002, ISBN : 2 10 004 729 9. Lenvironnement J2EE : principes, fonctions, utilisation P. Dchamboux, cole dt sur les Intergiciels et sur la Construction dApplications Rparties, ICAR2003, http://sardes.inrialpes.fr/ecole/2003/ Enterprise java Bean Lionel Seinturier, Universit Pierre & Marie Curie, octobre 2003 http://www-src.lip6.fr/homepages/Lionel.Seinturier/middleware/ejb.pdf Programmation Java ct Serveur : Servlets, JSP et EJB, Andrew Patzer, Ed. Eyrolles, 2000, ISBN : 2 212 09109 5. Tutorial J2EE de Sun : http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
2 Les composants EJB
Cette architecture sert isoler la logique mtier de linterface graphique et interdire un accs direct aux donnes. Avantage : modifier une couche sans toucher aux autres.
3 Les composants EJB
Client lourd
Architecture 3 niveaux/1
Les 3 couches sont physiquement spares : on peut mme dcomposer une couche en sous-couches (processus) => architecture n niveaux
Architecture 3 niveaux/2
prsentation traitement donne
client
Serveur dapplications: hberge des applications base de composants EJB (classes java conformes au modle EJB) et des composants Web (servlets, JSP)
Larchitecture J2EE de Sun a t propose pour palier ces inconvnients. Larchitecture J2EE dfinit : - un middleware bas sur RMI/IIOP - des objets Java distribus : EJB (Enterprise Java Beans) Larchitecture J2EE fournit des services techniques pour permettre au dveloppeur de se concentrer sur la logique mtier.
Plate-forme J2EE
Container Web
Serveur de Noms (JNDI) Web (moteur de Servlets, JSP)
Container EJB
MOM (JMS) Transaction (JTA, JTS) Scurit (JAAS) Mail (JavaMail) Bases de donnes (JDBC) Administration (JMX) Connecteurs (JCA)
RMI
Client lger
Serveur J2EE
Container Web : environnement dexcution pour les Servlets et JSP. Container EJB : environnement dexcution pour les EJBs
ORB (RMI)
HTTP
La communication entre objets distribus avec Java RMI et RMI/IIOP La cration dobjets distribus transactionnels avec EJB La cration et la recherche de rfrences dobjets distants avec JNDI (Java Naming and Directory Interface) Laccs aux Bases de donnes avec JDBC (Java DataDase Connectivity) La gestion des transactions avec JTA (Java Transaction API) et JTS (Java Transaction Service) La communication asynchrone par messages avec JMS (Java Message Service) La ralisation dinterfaces graphiques Web avec les pages JSP (JavaServer Pages) et les Servlets Lintgration des objets CORBA avec JavaIDL lenvoi de courriers lectroniques avec JavaMail La description du comportement des composants Java en XML
10
Client lourd
11
12
13
Plus dinformations
http://java.sun.com/ http://www.theserverside.com/ http://developer.java.sun.com/developer/technicalArticles/J2EE/ http://developer.java.sun.com/developer/onlineTraining/J2EE/ http://www.triveratech.com/ http://jonas.objectweb.org/
14
Serveur dapplications
Serveur dapplications Application J2EE = - zro, un ou plusieurs composants EJB - zro, un ou plusieurs composants Web - relis par un schma dassemblage
Conteneur EJB
Conteneur Web
15
Composants Web/1
Web Bean est un ensemble de : - JSP et/ou - Servlets et/ou - pages HTML
Ce sont des composants qui : - implantent une logique de prsentation simple pour des clients Web - servent de passerelle daccs pour des composants EJB - peuvent implanter une logique de petits traitements
16
Composants Web/2
Exemple : Fichier.html <html> <head> <title> Exemple </title> </head> <body> <form method="POST" action="/servlet/CalcServlet" Addition de deux nombres : <br> <input type=text name=Val1> <br> <input type=text name=Val2> <br> <input type=submit value="Additionner" > </body> </html>
17
>
18
6 services fournis par le serveur dapplications au conteneur EJB : - transaction - persistance - scurit - cycle de vie - concurrence - connectivit
Conteneur EJB
20
10
Composants EJB
Composants applicatifs de J2EE (code mtier) Potentiellement rpartis et transactionnels se focalisent sur la logique applicative sont portables dun serveur dapplication un autre Trois profils Session : instances ddies un contexte dinteraction dun client particulier Entit : instances partages reprsentant les donnes de lentreprise Orient message : instances neutres ragissant larrive de messages asynchrones Grs par le container EJB
21
Les EJ Beans/1
EJ Bean
Bean Message Bean Session Bean Entit BMP (persistance gre par le bean) Avec tat (cest le mme client qui ralise toutes les invocations) CMP Sans tat (persistance gre (plusieurs clients par le conteneur) diffrents peuvent tre associs au mme Bean successivement)
22
11
Les EJ Beans/2
Machine 1 Machine 2
EJ Bean
RemoteHome interface Remote interface
Client distant
Chaque EJ Bean fournit deux interfaces daccs distant Remote : les services mtiers (mthodes) fournis par le bean RemoteHome : interface de gestion du composant (cration, recherche, destruction dinstances)
23
Les EJ Beans/3
Machine 2
EJ Bean
RemoteHome interface Remote interface LocalHome interface Local interface
Client local
+ ventuellement deux interfaces daccs local (meilleure performance pour les clients hbergs dans le mme conteneur). Local : les services mtiers (mthodes) fournis par le bean LocalHome : interface de gestion du composant (cration, recherche, destruction dinstances)
24 Les composants EJB
12
Bean Session avec tat (stateful session bean) Cest un bean lourd, effectue des oprations pour le compte du client Gre un tat en mmoire ( objet avec tat) pour maintenir ltat du client Exemple: un panier sur un site de commerce lectronique avec 2 attributs, nom du client et les articles slectionns
Les composants EJB
25
1.
Bean Session sans tat (Stateless session bean) Pour des tches gnriques Pour consulter en lecture seule des donnes persistantes Efficaces et faciles implmenter Les donnes sont passes comme paramtres de la mthode
2.
Bean Session avec tat (stateful session bean) Ltat du Bean reprsente ltat de linteraction entre le client et le Bean Le Bean doit conserver de linformation entre deux invocations du client Ddi un client pendant toute sa dure de vie Le mme Bean est utilis pour servir tous les appels du mme client
Les composants EJB
26
13
2.
Interface mtier locale (Local ) Accessible uniquement par les composants situs sur la mme machine que le Bean Hrite de linterface javax.ejb.EJBLocalObject Pas dexception RemoteException
27
Exemple.
public interface Calc extends javax.ejb.EJBObject { public double add (double val1, double val2) throws RemoteException; }
28
14
Exemple.
import javax.ejb.EJBLocalObject;
public interface CalcLocal extends javax.ejb.EJBLocalObject { public double add(double val1, double val2) ; }
29
2.
Interface Home locale (LocalHome) Gre le cycle de vie du Bean Hrite de linterface javax.ejb.EJBLocalHome Pas dexception RemoteException
3.
Mthodes possibles : create (cration dinstances de bean, retourne linterface Remote ou Local selon que linterface est locale ou distante) Plusieurs mthodes create peuvent tre dfinies avec plusieurs signatures
30
15
public interface CalcHome extends javax.ejb.EJBHome { public Calc create() throws CreateException, RemoteException; }
31
public interface CalcLocalHome extends javax.ejb.EJBLocalHome { public CalcLocal create() throws CreateException ; }
32
16
33
Dveloppement
Fournir des mthodes pour les interfaces Remote et RemoteHome - mme mthodes que dans linterface Remote - une mthode ejbCreate pour chaque create de linterface RemoteHome - mme profil que create - retourne void
34
17
import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.ejb.CreateException; public class CalcBean implements SessionBean { SessionContext sessionContext;
35
// mthodes de linterface SessionBean public void ejbRemove() { } //public void ejbActivate() { } non utilisee par un Bean sans etat //public void ejbPassivate() { } non utilisee par un Bean sans etat public void setSessionContext (SessionContext sessionContext sessionContext) {this.sessionContext = sessionContext;}
// mthode de linterface Remote public double add(double val1, double val2) { return val1+val2; }
} // fin de CalcBean
Les composants EJB
36
18
Conteneur EJB
Interface SessionContext
Client
37 Les composants EJB
Client EJB
Dveloppement ct client : 1. Rechercher linterface Home du Bean par son nom via JNDI JNDI : API accs services nommage (LDAP, CORBA COSNaming, DNS, RMI registry, etc.) 2. Accder au Bean Linterface Home permet daccder aux instances existantes du Bean ou den crer de nouvelles => on rcupre une rfrence sur une interface Remote 3. Invocation du Bean
38
19
catch(Exception e) {e.printStackTrace(); }
Couche Prsentation/1
Exemple : Fichier.html <html> <head> <title> Exemple </title> </head> <body> <form method="POST" action="/servlet/CalcServlet" Addition de deux nombres : <br> <input type=text name=Val1> <br> <input type=text name=Val2> <br> <input type=submit value="Additionner" > </body> </html>
40
>
20
Couche Prsentation/2
CalcServlet.java
public class CalcServlet extends HttpServlet { private static final String CONTENT_TYPE="text/html"; private calcHome CalcHome;
41
Couche Prsentation/3
CalcServlet.java (suite)
public void doPost(HttpServletRequest requete, HttpServletResponse reponse) throws ServletException, IOException { reponse.setContentType(CONTENT_TYPE); PrintWriter sortie=reponse.getWriter(); Double d1=new Double(requete.getParameter("Val1")); Double d2=new Double(requete.getParameter("Val2")); double val1= d1.doubleValue(); double val2=d2.doubleValue(); // creation d'un EJB Calc myCalc = calcHome.create(); //invocation des methodes metier add() double res=myCalc.add(val1, val2); sortie.println("<html><head> <title> Resultat </title> </head> <body>");
42 Les composants EJB
21
Couche Prsentation/4
CalcServlet.java (suite)
sortie.println("<p> Rsultat de lOpration " + val1 + "+" + val2 +"="+ "<b>"+res +"</b>"+ "<p>"); sortie.println("</body></html>"); } // fin de doPost } // fin de la servlet
43
1.lookup() 3.create() Stub Calc Home 2.create() 5.add() Stub Calc EJB 6.add() Calc EJB 7.add() CalcBean 8.retour du rsultat 4.retour rfrence Calc EJB CalcHome a. cration
9.retour du rsultat
Client
44 Les composants EJB
22
Prt
Opration sur Home Opration sur instance Attention, Appel non rentrant
1. methode
45
Opration sur Home Opration sur instance Attention, Appel non rentrant
46
23
</enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>Calc</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
48
24
Dploiement du Bean/1
Une fois que le Bean est dfini, il faut le dployer dans un serveur dapplication. Il faut alors assembler tous les lments du Bean dans un fichier JAR qui va contenir : - Les interfaces du Bean - La classe du Bean et les classes auxiliaires - Le descripteur de dploiement. Les serveurs dapplication offrent des interfaces graphiques, appeles consoles dadministration qui permettent de rditer le descripteur de dploiement. Une fois lobjet dploy, ce dernier enregistre la rfrence lobjet EJBHome dans un serveur de noms accessibles via JNDI. Calc.jar = { Calc.class, CalcLocal.class, CalcHome.class,CalcHomeLocal.class, CalcBean.class, ejb-jar.xml }
A partir du fichier JAR, le serveur est capable dextraire son contenu et de rendre le Bean utilisable par les clients, cd, gnrer des composants ncessaires la communication (Stub et Skeleton) entre le Bean et ses clients (on parle de code dploy), on peut trouver : -lobjet EJB qui implmente linterface mtier -Lobjet EJBHome qui implmente linterface Home.
49
Dploiement du Bean/2
Packaging des applications Une application EJB = 1 archive .ear = { 1 descripteur XML de lapplication, 1 archive .war par composant Web, 1 archive .jar par composant EJB } Une archive .war = { 1 descripteur XML du composant Web, JSP ou servlet.class }
Une archive .jar = { 1 descripteur XML du Bean, les fichiers .class du Bean }
50
25
51
26