J2EE
Java2 Enterprise Edition
Pierre­Yves Gibello ­ pierreyves.gibello@experlog.com
Mise à jour : 30 Septembre 2004
Ce doc...
J2EE ­ Objectifs
• Faciliter le développement de nouvelles 
applications à base de composants
• Intégration avec les systè...
J2EE ­ C ’est quoi? 
• http://java.sun.com/j2ee
• Spécifications
• Modèle de programmation
• Implémentation de référence
•...
Offre commerciale
• BEA WebLogic (haut de gamme)
• IBM Websphere (no 1)
• Sun Java System App. Server
• Borland Enterprise...
Offre open­source
• JBoss (no 1 en nombre de déploiements)
• ObjectWeb JOnAS(no 2, intégré à plusieurs 
distro Linux Entre...
J2EE sous l ’œil de Darwin... 
• Standard en évolution depuis 1997
– J2EE 1.0 à 1.4 en 2003, etc...
• Au départ, applicati...
J2EE ­ Architecture
Servlets
JSPs
EJBs
WEB Container
EJB Container
J2EE Application Server
DB
EIS
Browser
Java Application...
Architecture multi­tiers
• Client
– Léger (Web, browser)
– Lourd (Application java, Applet…)
– Architecture orientée servi...
Un serveur J2EE
EJB Container
JOnAS « J2EE »   JOnAS « J2EE »     Server Server
Services
...
Management
Ear
Naming
Enterpr...
Conteneur Web
• Servlets
Code java exécuté sur le serveur
Equivalent du CGI
Génération de contenu Web dynamique
• JSP: Jav...
RMI
• Remote Method Invocation
– Java seulement, mais passerelles
• « RPC objet » (appels sur objets distants)   
• Servic...
JNDI
• Service de nommage / annuaire
– Java Naming and Directory Interface
• API accès aux annuaires 
– javax.naming
– « S...
JMS
• Java Messaging Service
• JMS Provider : inclus dans J2EE
– Transport synchrone ou asynchrone, Garantie 
de livraison...
API J2EE de transactions : JTA
• Java Transaction API
• Package javax.transaction
– TransactionManager : begin(), commit()...
JTA : Participants
• XAResource
– Conformes à la spécification XA
– Enregistment avec transaction.enlistResource()
• Synch...
API XA de J2EE
• Package javax.transaction.xa
– XAResource (prepare(), commit(), rollback()...
– Xid (identifiant de trans...
JMX
• Java Management eXtensions
– API unique pour applications de management
• Mbeans avec accesseurs get/set
– Typage fa...
JMX : Exemple d ’un serveur J2EE 
J2EE ServerJ2EE Server
Services
Transaction
Security
Management
          EJB
Web
  Regi...
EJB: Architecture
• JavaBeans pour l’ Enterprise
• Pas des JavaBeans (pas de représentation graphique)
• Logique métier
• ...
EJB: Gamme de services implicites
• Gestion du cycle de vie
• Gestion de l’état
• Sécurité
• Transactions
• Persistance
• ...
EJB
Conteneur EJB
Logique métier … +
Callbacks … +
ic=new InitialContext();
ds = (DataSource) ic.lookup(
‘’java:comp/env/j...
EJB: Interface composant
• Remote (RMI) ou Local
• Vue client de l’ EJB
• Declare les méthodes métier
• Implementée par le...
Exemple: Remote Interface
Fournisseur
// méthodes métier
+ getNom():Nom
+ setNom(nom:Nom):void
+ getAdresse():Adresse
+ se...
EJB: Home Interface
• Interface composant accessible à distance (RMI)
• Représente le cycle de vie du composant (création,...
Exemple: Home Interface
FournisseurHome
// méthodes de gestion de cycle de vie
+ create(id:Integer):Fournisseur
+ findByPr...
EJB: Implémentation du Bean
• Hérite de EntityBean ou SessionBean mais 
n’implémente pas les interfaces Home ou Remote
• P...
Exemple : Implém. de Bean
FournisseurBean
id:int
nom:Nom
adresse:Adresse
// méthodes de gestion de cycle de vie
+ ejbCreat...
EJB: Code client
Object ref ;
FournisseurHome home; // Home interface
Fournisseur fourn; // Remote interface, pas le bean
...
EJB: Bean Entité
• Représente des données dans la base de 
données
• Container­Managed Persistence (CMP) or 
Bean­Managed ...
EJB: Bean Session
• Gestion des interactions entre beans entité ou 
session, accès aux ressources, réalisation d’actions 
...
EJB : Message Driven Bean
• Composant asynchrone
• Execution sur réception d ’un message JMS 
– Méthode onMessage()
– Appe...
Message Driven Bean : exemple
Administration
JMS
BD
MDB StockHandler
MDB Order
Entity Bean Stock
TX
Serveur EJB
Appli :
Cl...
Message Driven Bean : exemple (2)
public class StockHandlerBean  implements MessageDrivenBean, MessageListener {
…
  publi...
EJB: Configuration & 
Déploiement
• Interfaces Home et Remote (ou Local), classe qui 
implémente le Bean
• Descripteur de ...
Descripteur de déploiement : Bean
<enterprise­beans>
  <entity>
    <description>EJB Fournisseur ( BMP )</description>
   ...
Ressources et JNDI
• Ressources déclarées dans le descripteur de 
déploiement (accès via JNDI)
• Convention de nommage
– N...
Indirection
• Contrat du conteneur entre les clients et les EJB
– Garantit que l ’on passe par le conteneur 
– Exemple : a...
Indirection : implémentations
• Génération de code (JOnAS, WebLogic)
– Code d ’interposition entre le bean et le  
contene...
Optimisations liées à l ’indirection 
• Stateless Session Bean : Sans état
– Pool d ’instances 
– Le serveur peut y accéde...
Conséquences de l ’indirection... 
• Attention à « this »...   
– Pas de « this.methode() » sur les méthodes    
d ’interf...
Descripteur de déploiement :
Persistance
Bean­managed (BMP)
<persistence­type>Bean</persistence­type>
Container­managed (C...
Persistance BMP
• Bean­managed persistence
– Le bean gère sa persistance
– Exemple : usage direct de JDBC
• Appels de méth...
Persistance CMP
• Persistance gérée par le conteneur
– Gestion déclarative (descripteur de déploiement)
– Champs persistan...
Exemple CMP: Home interface
public interface BookHome extends EJBHome 
{
   public Book create(String id, String author)
 ...
CMP: Descripteur de déploiement
 <entity>
     <display­name>Book</display­name>  <ejb­name>Book</ejb­name>
     <home>Boo...
CMP: Méthodes find et ejbSelect
• « Finder methods » (findBy…)   
– Retournent 1 bean (interface métier) ou une 
Collectio...
Transactions
• Applicable aux 3 profils de composants
– Session, Entité, Message driven
• Limitation pour le MessageDriven...
Descripteur de déploiement :
Gestion déclarative des Transactions
<assembly­descriptor>
  <container­transaction>
    <met...
Gestion déclarative des transactions
• Au niveau de la méthode du bean ! (démarcation)
• NotSupported
– Si transaction cou...
Gestion des évènements 
transactionnels (Session Bean)
• Interception par un EJB des évènements 
transactionnels (produits...
Descripteur de déploiement :
Sécurité
<assembly­descriptor>
... 
 <security­role>
  <description>Personnel administratif d...
JCA
• Java Connector Architecture
• Intégration avec les SI d ’entreprise (EIS) 
– Applications (ERP, Supply Chain…)
– Mid...
Contrats Système
• Interaction entre le SI et le serveur 
d ’applications 
– Gestion des connexions et pooling
– Gestion d...
API clientes
• Standard : CCI (Common Client Interface)
– Avantage : API standard
– Inconvénient : trop général et peu com...
Resource Adapter
• Implémentation de l ’interfaçage avec le SI 
– Classes d ’interface 
– Librairies natives du SI
• Descr...
Déploiement
• Packaging en fichier .rar (RA archive)
– Déployé par le serveur d ’application 
– Format jar avec organisati...
Rôles définis par la spec. EJB
• Fournisseur de beans
– Développeur qui crée les EJB
• Assembleur d ’application 
– Crée l...
Packaging
• Application J2EE (aggrégarion de différents tiers)
– Fichier « .ear » + descripteur « application.xml »       ...
Persistance + Transactions : exemple
EB1
DBM
REG
JMX
EJB
EB2
DBM
EJB
JMX
JTM
SrVlt
JMX
Web
Conteneur
EJB
Conteneur
EJB
Con...
Répartition de charge : notations
web
ejbweb
web
ejb
Apache mod_jk
ejbUn conteneur Web Un conteneur EJB
Un serveur qui héb...
Répartition de charge : scenarii (1)
ejbweb web ejb
Compact Réparti
(au sein d ’un même nœud) 
web ejb
Réparti
Répartition...
Répartition de charge : scenarii (2)
Apache mod_jk
ejbweb
ejbweb
(1)
Apache mod_jk
Apache mod_jk
web
ejb
web
(3)
Apache mo...
Répartition de charge et clustering
Apache
Tomcat
DB
Tomcat
Tomcat
JNDIJNDIJNDI
JOnAS
EJB
Container
JOnAS
EJB
Container
JO...
Prochain SlideShare
Chargement dans…5
×

J2 ee

1 124 vues

Publié le

cours java

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 124
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
14
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

J2 ee

  1. 1. J2EE Java2 Enterprise Edition Pierre­Yves Gibello ­ pierreyves.gibello@experlog.com Mise à jour : 30 Septembre 2004 Ce document est couvert par la licence Creative Commons Attribution­ShareAlike. This work is licensed under the Creative Commons Attribution­ShareAlike License. 
  2. 2. J2EE ­ Objectifs • Faciliter le développement de nouvelles  applications à base de composants • Intégration avec les systèmes d’information  existants • Support pour les applications « critiques »  de l’entreprise – Disponibilité, tolérance aux pannes, montée en  charge, securité ...
  3. 3. J2EE ­ C ’est quoi?  • http://java.sun.com/j2ee • Spécifications • Modèle de programmation • Implémentation de référence • Suite(s) de tests • Label J2EE Sun (qualification de plateformes)
  4. 4. Offre commerciale • BEA WebLogic (haut de gamme) • IBM Websphere (no 1) • Sun Java System App. Server • Borland Enterprise Server • Oracle 9i Application Server • Macromedia jRun • SAP Web application server • Iona Orbix E2A
  5. 5. Offre open­source • JBoss (no 1 en nombre de déploiements) • ObjectWeb JOnAS(no 2, intégré à plusieurs  distro Linux Entreprise) • Apache Geronimo (démarrage fin 2003) • openEjb • ejBean
  6. 6. J2EE sous l ’œil de Darwin...  • Standard en évolution depuis 1997 – J2EE 1.0 à 1.4 en 2003, etc... • Au départ, applications Web n­tiers – Présentation (Servlets puis JSP), essentiellement  HTTP – Logique métier : EJB – Données : JDBC • Puis infrastructure de support standard pour EAI – Facteurs de rationnalisation majeurs (JTA, JMS, JCA,  Web Services) – Evolution de progiciels existants vers J2EE
  7. 7. J2EE ­ Architecture Servlets JSPs EJBs WEB Container EJB Container J2EE Application Server DB EIS Browser Java Application JDBC JMS JTA JCA JAAS JavaMail JNDI … Applets http rmi rmi rmi html public  static void  main(…) {
  8. 8. Architecture multi­tiers • Client – Léger (Web, browser) – Lourd (Application java, Applet…) – Architecture orientée service (Application  répartie sans présentation) • Serveur d ’applications  – Conteneur EJB + logique métier – Services non fonctionnels • EIS ou Base de données
  9. 9. Un serveur J2EE EJB Container JOnAS « J2EE »   JOnAS « J2EE »     Server Server Services ... Management Ear Naming Enterprise Java Bean Enterprise Java Bean Home interface Remote interface Enterprise Java Bean databaseJDBC Calls Database EJB RMI Calls Java Client Transaction HTML Client Web Container Web  Servlets HTTP Source : Bull/ObjectWeb (JOnAS)
  10. 10. Conteneur Web • Servlets Code java exécuté sur le serveur Equivalent du CGI Génération de contenu Web dynamique • JSP: Java Server Pages Mélange de HTML/XML et de code java Librairies d ’extension (« taglibs »)      Précompilation en servlet
  11. 11. RMI • Remote Method Invocation – Java seulement, mais passerelles • « RPC objet » (appels sur objets distants)    • Service de nommage (RMI registry) • Sécurité paramétrable (SecurityManager) • Garbage Collection distribuée • Téléchargement de code • Fonctions avancées – Activation d ’objets persistents, Réplication 
  12. 12. JNDI • Service de nommage / annuaire – Java Naming and Directory Interface • API accès aux annuaires  – javax.naming – « Service Provider » par annuaire cible (LDAP,     NIS, RMI registry…) • Utilisation avec les EJB – Accès à l ’interface « home » pour initialiser      – Accès à diverses ressources (UserTransaction,  Queues JMS, DataSources…)
  13. 13. JMS • Java Messaging Service • JMS Provider : inclus dans J2EE – Transport synchrone ou asynchrone, Garantie  de livraison – « Messaging domains » point à point ou     « publish/subscribe »    • Lien avec EJB : « message­driven bean »    – Pour échanges asynchrones
  14. 14. API J2EE de transactions : JTA • Java Transaction API • Package javax.transaction – TransactionManager : begin(), commit(),  rollback() … – Transaction : commit(), rollback(),  enlistResource(XAResource),  registerSynchronisation(Synchronization) ... – Synchronization : beforeCompletion(),  afterCompletion(commit | rollback)
  15. 15. JTA : Participants • XAResource – Conformes à la spécification XA – Enregistment avec transaction.enlistResource() • Synchronization – Pour les ressources « non transactionnelles » (EAI…)    – Participant averti des frontières de transaction – enregistrement : transaction.registerSynchronization() – beforeCompletion() équivaut à prepare() – afterCompletion(état = commit | rollback) équivaut à  commit | rollback
  16. 16. API XA de J2EE • Package javax.transaction.xa – XAResource (prepare(), commit(), rollback()... – Xid (identifiant de transaction XA) • Package javax.sql – Extension de JDBC (bases de données) – XADataSource (getXAConnection()) – XAConnection (PooledConnection, avec  getConnection() et getXAResource())
  17. 17. JMX • Java Management eXtensions – API unique pour applications de management • Mbeans avec accesseurs get/set – Typage faible, attributs nommés • Serveur JMX – Enregistrement des Mbeans – Les applis d ’administration dialoguent avec le   serveur JMX • Instrumenter un composant – Fournir un ou des Mbeans – Les enregistrer auprès du serveur JMX
  18. 18. JMX : Exemple d ’un serveur J2EE  J2EE ServerJ2EE Server Services Transaction Security Management           EJB Web   Registry           EAR EJB Container Admin Servlets WEB Container EJBs JMX Server Admin console .. MBeans MC4J Source : ObjectWeb JOnAS
  19. 19. EJB: Architecture • JavaBeans pour l’ Enterprise • Pas des JavaBeans (pas de représentation graphique) • Logique métier • S’appuie sur J2SE et les APIs de J2EE – JNDI, JTA/JTS, JDBC, JMS , JAAS • Gestion déclarative (personnalisation sans toucher au  code source) • Portable sur les différents conteneurs EJB
  20. 20. EJB: Gamme de services implicites • Gestion du cycle de vie • Gestion de l’état • Sécurité • Transactions • Persistance • Localisation des composants transparente (comparable à objets distribués CORBA) • Répartition de charge, pooling => Le développeur se focalise sur les aspects métier
  21. 21. EJB Conteneur EJB Logique métier … + Callbacks … + ic=new InitialContext(); ds = (DataSource) ic.lookup( ‘’java:comp/env/jdbc/MyDS’’); <resource­ref> <..name>jdbc/MyDS … <trans­attribute>Required DD Composant Home Client Interface Métier: Remote(rmi) ou local Lifecycle interface ­ create ­ remove ­ find Remote(rmi) ou Local Implementé par le conteneur Implementation du composant: ­logique métier (code) ­callbacks pour le conteneur (ejbCreate, ejbPassivate, ejbLoad, …) Descripteur de déploiement: ­comportement transactionnel (Tx  attributes) ­Sécurité (ACLs) ­Persistance (entity beans) ­Ressources (DataSources …)
  22. 22. EJB: Interface composant • Remote (RMI) ou Local • Vue client de l’ EJB • Declare les méthodes métier • Implementée par les outils intégrés à la plateforme  EJB ­ au moment du déploiement
  23. 23. Exemple: Remote Interface Fournisseur // méthodes métier + getNom():Nom + setNom(nom:Nom):void + getAdresse():Adresse + setAdresse(adresse:Adresse):void javax.ejb.EJBObject Hérite de Interface
  24. 24. EJB: Home Interface • Interface composant accessible à distance (RMI) • Représente le cycle de vie du composant (création,  suppression, recherche) • Implementée par les outils intégrés à la plateforme  EJB  • Séparée de la Remote Interface car elle représente  des comportements non spécifiques à une instance  de bean
  25. 25. Exemple: Home Interface FournisseurHome // méthodes de gestion de cycle de vie + create(id:Integer):Fournisseur + findByPrimaryKey(id:Integer):Fournisseur … javax.ejb.EJBHome Hérite de Interface
  26. 26. EJB: Implémentation du Bean • Hérite de EntityBean ou SessionBean mais  n’implémente pas les interfaces Home ou Remote • Pourtant: • Implémente les méthodes métier de l’interface  Remote • Définit et déclare les methodes correspondant à  l’interface Home.
  27. 27. Exemple : Implém. de Bean FournisseurBean id:int nom:Nom adresse:Adresse // méthodes de gestion de cycle de vie + ejbCreate(id:Integer):void + ejbFindByPrimaryKey(id:Integer):void // méthodes métier + getNom():Nom + setNom(nom:Nom):void + getAdresse():Adresse + setAdresse( adresse:Adresse):void javax.ejb.EntityBean Implémente Interface Class
  28. 28. EJB: Code client Object ref ; FournisseurHome home; // Home interface Fournisseur fourn; // Remote interface, pas le bean // appel JNDI pour obtenir une référence à l’interface Home ref = jndiContext.lookup( "java:comp/env/ejb/Fournisseur"); home = PortableRemoteObject.narrow(ref, FournisseurHome.class); // créer un Bean fourn = home.create(idFournisseur); // appel méthode métier fourn.setNom(unNom);
  29. 29. EJB: Bean Entité • Représente des données dans la base de  données • Container­Managed Persistence (CMP) or  Bean­Managed Persistence (BMP) – En mode CMP, le conteneur EJB gère la persistance  du bean (pas d’accès BD dans le code). – En mode BMP, c’est le développeur du Bean qui  gère la persistance (par exemple, en JDBC).
  30. 30. EJB: Bean Session • Gestion des interactions entre beans entité ou  session, accès aux ressources, réalisation d’actions  sur demande du client • Objets métier non persistants • Stateful ou Stateless ­ maintient ou pas un état  interne en mémoire => Un Bean Stateful encapsule la logique métier et  l’état specifiques à un client
  31. 31. EJB : Message Driven Bean • Composant asynchrone • Execution sur réception d ’un message JMS  – Méthode onMessage() – Appels à d ’autres beans, etc…  • Descripteur de déploiement – Associations Bean / ressource JMS – Ressources JMS (ex. Queue ou Topic)
  32. 32. Message Driven Bean : exemple Administration JMS BD MDB StockHandler MDB Order Entity Bean Stock TX Serveur EJB Appli : Client JMS publier Envoi    message Mise à   jour JNDI Topic Queue créer bind QCF créer
  33. 33. Message Driven Bean : exemple (2) public class StockHandlerBean  implements MessageDrivenBean, MessageListener { …   public void onMessage(Message message) {     ...     sh = (StockHome)initialContext.lookup("java:comp/env/ejb/Stock");     queue = (Queue)initialContext.lookup("java:comp/env/jms/Orders");     …     MapMessage msg = (MapMessage)message;     pid = msg.getString("ProductId");     qty = msg.getString( "Quantity");      cid = msg.getString("CustomerId");     Stock stock = sh.findByPrimaryKey(pid);     stock.decreaseQuantity(qty);    …    qs = session.createSender(queue);    TextMessage tm = session.createTextMessage();    String m = "For CustomerId = "+cid+" ProductId= "+pid+" Quantity= "+qty;    tm.setText(m);    qs.send(tm);    ...    } }
  34. 34. EJB: Configuration &  Déploiement • Interfaces Home et Remote (ou Local), classe qui  implémente le Bean • Descripteur de déploiement (fichier XML) <ejb­jar> – Description du Bean (Entity ou Session, ...) – Ressources (Base de données,...) – Securité: permissions et roles – Persistance (BMP, CMP) – Attributs transactionnels – … </ejb­jar> => Utilisé par l’assembleur d’application et par le  conteneur  EJB au moment du déploiement
  35. 35. Descripteur de déploiement : Bean <enterprise­beans>   <entity>     <description>EJB Fournisseur ( BMP )</description>     <ejb­name>Fournisseur</ejb­name>     <home>logistique.FournisseurHome</home>     <remote>logistique.Fournisseur</remote>     <ejb­class>logistique.FournisseurBean</ejb­class>     <persistence­type>Bean</persistence­type>     <prim­key­class>java.lang.String</prim­key­class>     <reentrant>False</reentrant>     <resource­ref>       <res­ref­name>jdbc/ClientDB</res­ref­name>       <res­type>javax.sql.DataSource</res­type>       <res­auth>Container</res­auth>     </resource­ref>   </entity> </enterprise­beans> Persistance : Bean ou Container « Indirection » :    Lien entre interfaces et implémentation Ressource : ici, BD Bean Entité
  36. 36. Ressources et JNDI • Ressources déclarées dans le descripteur de  déploiement (accès via JNDI) • Convention de nommage – Noms préfixés par le type de ressource  référencée (ejb, jms, jdbc, mail, url…) • Exemple fh = (FournisseurHome)initialContext.lookup( "java:comp/env/ejb/Fournisseur"); bd = (DataSource)initialContext.lookup( "java:comp/env/jdbc/Compta");
  37. 37. Indirection • Contrat du conteneur entre les clients et les EJB – Garantit que l ’on passe par le conteneur  – Exemple : activation / passivation, pool  d ’instances...  • La classe d ’implémentation n ’implémente pas     les interfaces Home ou Remote; pourtant, elle  implémente les méthodes de Home et Remote – Le lien est fait par le descripteur de déploiement • Renommage des méthodes de Home – create() ­> ejbCreate(), etc... – Exception si appel direct ! (méthode inexistante)
  38. 38. Indirection : implémentations • Génération de code (JOnAS, WebLogic) – Code d ’interposition entre le bean et le   conteneur – Généré à partir des interfaces du bean – Paramétré par le descripteur de déploiement • Dynamic Proxy (JBoss) – Pas de génération / compilation – Plus souple, mais moins efficace
  39. 39. Optimisations liées à l ’indirection  • Stateless Session Bean : Sans état – Pool d ’instances  – Le serveur peut y accéder via un pool de threads • Stateful session et Entity beans – Activation / Passivation (appel par le container de  ejbActivate() après activation / ejbPassivate() avant  passivation)
  40. 40. Conséquences de l ’indirection...  • Attention à « this »...    – Pas de « this.methode() » sur les méthodes     d ’interfaces « local » ou « remote »          – Eviter de passer « this » en paramètre    • Utiliser les références ! – Remote : context.getEJBObject() – Local : context.getEJBLocalObject() – Contexte initialisé par le conteneur appel setSessionContext ou setEntityContext après la création (méthode à implémenter).
  41. 41. Descripteur de déploiement : Persistance Bean­managed (BMP) <persistence­type>Bean</persistence­type> Container­managed (CMP) <persistence­type>Container</persistence­type> <cmp­field>   <field­name>codeFournisseur</field­name> </cmp­field>
  42. 42. Persistance BMP • Bean­managed persistence – Le bean gère sa persistance – Exemple : usage direct de JDBC • Appels de méthodes par le conteneur – ejbLoad() ­ restaurer l ’état  – ejbStore() ­ sauvegarder l ’état  – Méthodes jamais appelées par le Bean ! (ne pas  appeler depuis activate / passivate)
  43. 43. Persistance CMP • Persistance gérée par le conteneur – Gestion déclarative (descripteur de déploiement) – Champs persistants (avec méthodes get/set) – Relations entre instances d ’entités CMP  (CMP2)   (cardinalité 1­1 ou 1­N, uni ou bi­directionnel) • EJB­QL (CMP2) – Basé sur SQL92 (« select… from… where »)    – Méthodes « find » associées à des requêtes avec     paramètres
  44. 44. Exemple CMP: Home interface public interface BookHome extends EJBHome  {    public Book create(String id, String author)       throws RemoteException, CreateException;    public Book findByPrimaryKey (String id)       throws RemoteException, FinderException;    public Collection findByAuthor(String author)       throws RemoteException, FinderException; }
  45. 45. CMP: Descripteur de déploiement  <entity>      <display­name>Book</display­name>  <ejb­name>Book</ejb­name>      <home>BookHome</home> <remote>Book</remote>  <ejb­class>BookEJB</ejb­class>      <persistence­type>Container</persistence­type>      <prim­key­class>java.lang.String</prim­key­class>      <cmp­field><field­name>title</field­name></cmp­field>      <cmp­field><field­name>author</field­name></cmp­field>      <cmp­field><field­name>price</field­name></cmp­field>      <primkey­field>title</primkey­field>      <query>         <description></description>         <query­method>           <method­name>findByAuthor</method­name>           <method­params>            <method­param>java.lang.String</method­param>           </method­params>          </query­method>         <ejb­ql>select distinct object(b) from Book b where b.author=?1</ejb­ql>       </query> </entity> Inutile d ’implémenter la   méthode findByAuthor() 
  46. 46. CMP: Méthodes find et ejbSelect • « Finder methods » (findBy…)    – Retournent 1 bean (interface métier) ou une  Collection • Méthodes ejbSelect – Equivalent aux « findBy… »    – Local à un bean (pas d ’accès externe) 
  47. 47. Transactions • Applicable aux 3 profils de composants – Session, Entité, Message driven • Limitation pour le MessageDriven (attributs « Required » ou     « NotSupported » seulement).    • Gestion explicite – Utilisation de javax.transaction.UserTransaction (JTA) – Contrôle de la transaction (timeout, « rollbackOnly »)    – Exemple UserTransaction utx =   (UserTransaction)ctx.lookup(« java:comp/UserTransaction »);    utx.begin(); … utx.commit();
  48. 48. Descripteur de déploiement : Gestion déclarative des Transactions <assembly­descriptor>   <container­transaction>     <method>       <ejb­name>Fournisseur</ejb­name>       <method­name>*</method­name>     </method>     <trans­attribute>Required</trans­attribute>   </container­transaction>  ... </assembly­descriptor> NotSupported Required RequiresNew Mandatory Supports Never
  49. 49. Gestion déclarative des transactions • Au niveau de la méthode du bean ! (démarcation) • NotSupported – Si transaction courante, elle est suspendue • Required – Si pas de transaction, nouvelle transaction • RequiresNew – Nouvelle transaction (si tx courante, suspendue) • Mandatory – Exception si pas de transaction courante • Supports – Si transaction courante, l ’utiliser  • Never – Exception si transaction courante
  50. 50. Gestion des évènements  transactionnels (Session Bean) • Interception par un EJB des évènements  transactionnels (produits par le conteneur) – Implantation de javax.ejb.SessionSynchronization • Evènements (appelés par le conteneur) – afterBegin : appelé après UserTransaction.begin – beforeCompletion : appelé avant  UserTransaction.commit – afterCompletion(true | false) : appelé après commit  ou rollback
  51. 51. Descripteur de déploiement : Sécurité <assembly­descriptor> ...   <security­role>   <description>Personnel administratif de gestion</description>   <role­name>administratif</role­name>  </security­role>  <method­permission>   <role­name>administratif</role­name>   <method>     <ejb­name>Fournisseur</ejb­name>     <method­name>*</method­name>   </method>  </method­permission> </ assembly­descriptor> Définition de rôle Permissions accordées à un rôle
  52. 52. JCA • Java Connector Architecture • Intégration avec les SI d ’entreprise (EIS)  – Applications (ERP, Supply Chain…) – Middleware (gestionnaire de transactions…) • Connecteur composé de : – Contrats système – API cliente – Resource Adapter
  53. 53. Contrats Système • Interaction entre le SI et le serveur  d ’applications  – Gestion des connexions et pooling – Gestion des transactions (par le serveur  d ’application et/ou le SI)  – Sécurité (accès sécurisé au SI)
  54. 54. API clientes • Standard : CCI (Common Client Interface) – Avantage : API standard – Inconvénient : trop général et peu compréhensible  (pas de « sens » métier), implémentation     facultative. • Spécifique : API spécifique au SI, fournie par  le « resource adapter »    – Avantage : API « métier »    – Inconvénient : spécifique au SI concerné, donc  différente selon le connecteur...
  55. 55. Resource Adapter • Implémentation de l ’interfaçage avec le SI  – Classes d ’interface  – Librairies natives du SI • Descripteur de déploiement – Configuration du connecteur au sein du serveur  d ’application  • Classes d ’implémentation des interfaces standard  • Fonctionnalités supportées ou non (transactions,  sécurité…)
  56. 56. Déploiement • Packaging en fichier .rar (RA archive) – Déployé par le serveur d ’application  – Format jar avec organisation standard – Contient tous les éléments du connecteur – Descripteur de déploiement (ra.xml) dans  META­INF : configuration du connecteur
  57. 57. Rôles définis par la spec. EJB • Fournisseur de beans – Développeur qui crée les EJB • Assembleur d ’application  – Crée l ’application par assemblage d ’EJB    • Administrateur – Déploiement, sécurité, explotation, montée en  charge… – Analogue au rôle de DBA pour les BD
  58. 58. Packaging • Application J2EE (aggrégarion de différents tiers) – Fichier « .ear » + descripteur « application.xml »        • Tiers client – Web : fichier « .war » + descripteur « web.xml »        – Application : fichier « .jar » + descripteur     « application­client.xml » (lancement du main() de la     classe spécifiée dans le « manifest », attribut « Main­      Class »)  • Tiers EJB – Fichier « .jar » + descripteur « ejb­jar.xml »        • Tiers « EIS » (connecteurs JCA)    – Fichier « .rar » + descripteur « rar.xml »       
  59. 59. Persistance + Transactions : exemple EB1 DBM REG JMX EJB EB2 DBM EJB JMX JTM SrVlt JMX Web Conteneur EJB Conteneur EJB Conteneur WEB DD 2­phase commit R1 R2 DB1 DB2 admin Appli client Admin client http server3 server2 server1 no cust
  60. 60. Répartition de charge : notations web ejbweb web ejb Apache mod_jk ejbUn conteneur Web Un conteneur EJB Un serveur qui héberge un conteneur Web Un serveur qui héberge un conteneur EJB Un serveur Apache avec le module mod_jk Un noeud (machine) qui héberge un ou plusieurs serveurs Un serveur qui héberge un conteneur Web et un conteneur EJB
  61. 61. Répartition de charge : scenarii (1) ejbweb web ejb Compact Réparti (au sein d ’un même nœud)  web ejb Réparti Répartition du serveur J2EE
  62. 62. Répartition de charge : scenarii (2) Apache mod_jk ejbweb ejbweb (1) Apache mod_jk Apache mod_jk web ejb web (3) Apache mod_jk web ejb web ejb (4) Répartition de charge EJB Réplication session http web ejb web ejb (2)
  63. 63. Répartition de charge et clustering Apache Tomcat DB Tomcat Tomcat JNDIJNDIJNDI JOnAS EJB Container JOnAS EJB Container JOnAS EJB Container Mod_jk Source : ObjectWeb JOnAS

×