Vous êtes sur la page 1sur 42

Par Oussama IDRISSI

OUKILI
Problème
Construire des applications pour
entreprises
Sures
Sécurisées
Supportant la montée en charge (scalable)
Disponibles
Favorisant la réutilisation
Maintenables et extensibles
Pour moins cher
Moyen
Utiliser une architecture distribuée
Plusieurs tiers
Les clients (front end)
Les sources de données (back end)
Un ou plusieurs tiers entre eux pour
 Implanter les nouveaux services
 Intégrer les différentes sources de données
 Masquer la complexité de l’entreprise aux clients
Architecture à composants
distribués
Permettent la construction d’applications
multi-tiers
Objectif
Simplifier la création d’application à base
d’objets distribués.
Promouvoir la programmation par composant
pour le coté serveur
Composant logiciel
Doit permettre la construction de logiciel
par composition
Exporte des propriétés et des méthodes
Peut être configuré de façon externe
Un composant peut être réutilisable à
différent degré
Composants connus :
COM/DCOM
Java Beans
Enterprise Java Beans
Composants Corba
Objet distribué (rmi)
Middleware Explicite

transfer(Account account1, Account account2,


long amount) {
// 1: Call middleware API to perform a security
check
// 2: Call middleware API to start a transaction
// 3: Call middleware API to load rows from the
database
// 4: Subtract the balance from one account, add
to the other
// 5: Call middleware API to store rows In the
Architecture 3-tiers
Les solutions existantes
Microsoft DNA (Distributed interNet
Applications Architecture)
Windows NT + DCOM + MSMQ (message
queue) + MTS (transactions) + Wolfpack
(clustering) + IIS (web server)+ MMC
(administration et déploiement)
Sun J2EE (spécification)
OMG Corba (specification) et les composants
Corba.
J2EE
Définit une architecture standard incluant
Un modèle de programmation (application
multi-tiers, client légers)
Une plate-forme (ensemble de spécifications et
de politiques requises)
Un ensemble de test de compatibilité
Une implantation de référence
Architecture d’une application
J2EE
La plateforme J2EE
 EJB : définit la façon dont les composant doivent être écrit et le
contrat qu’ils doivent respecter avec le serveur d’application
 RMI : communication inter procédés
 JNDI : service de nommage
 JDBC : connection vec les bases de données
 JTA : service de transaction
 JMS : service de messagerie
 JSP : servlet et Java Server Page adapté à la construction de
composant réseau
 Java IDL : permet l’intégration avec d’autres langages (en
particulier à travers CORBA)
 JavaMail
 Connectors : intégration à des systèmes d’information existant
 XML
Les Enterprise JavaBeans
Spécification d’une architecture permettant
la création d’applications distribuées
2 versions
 1.1 : la plus courante
 3.0 : la plus récente

Implantations de la spec :
 BEA WebLogic, Jonas, Borland Appserver, IBM Websphere,
Jboss (open source)
Composant développé pour être exécuté sur
un serveur d’EJB
Ne pas confondre avec un java bean
Les Enterprise JavaBeans
Objectifs des EJB
Fournir une plate-forme standard pour la
construction d’applications distribuées en
Java
Simplifier l’écriture de composants
serveurs
Portabilité
Considérer le développement, le
déploiement et l’exécution des applications
Division des
responsabilités
Le fournisseur de bean
Produit les composants métier
Le fournisseur de conteneur EJB
Fournit l’environnement permettant l’exécution
des beans
Le fournisseur de serveur EJB
Fournit l’environnement d’exécution pour un ou
plusieurs conteneurs
L’assembleur d’application
Le déployeur (installateur)
L’administrateur
Les Enterprise Beans
Composants qui peuvent être déployés dans un
environnement multi-tiers et distribué.
Exposent une interface qui peut être appelé par
ses clients
Configurés de façon externe
L’interface et l’implantation du bean doivent être
conforme à la spécification EJB
Les clients peuvent être
 Un servlet
 Une applet
 Un autre bean
Les Enterprise Beans
Les types de Beans
Session Beans : contiennent la logique métier
de l’application
Stateful session bean
Stateless session bean
Entity Beans : contiennent la logique de
gestion des données persistantes
Message bean : contiennent la logique
orientée message
Session Bean
Fournit un service à un client
Durée de vie limitée à celle du client
Effectue des calculs ou des accès à une base
de donnée
Peut être transactionnel
Non recouvrable
Peuvent être sans état ou conversationnel
(stateless ou stateful)
Exemple de Session bean
public class CartBean implements SessionBean {

String customerName;
Vector contents;
public void ejbCreate(String person) throws CreateException {
… initialisation du bean
}
// business method
public void addBook(String title) { … // code de la méthode}
public void removeBook(String title) throws BookException {… }
public Vector getContents() {…}

// methodes appelées par le conteneur


public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
L’interface
L’interface décrit le contrat avec les clients

public interface Cart extends EJBObject {

public void addBook(String title) throws RemoteException;


public void removeBook(String title) throws BookException,
RemoteException;
public Vector getContents() throws RemoteException;

}
La factory
Définit les méthodes permettant de créer, trouver
et détruire des objets EJB

public interface CartHome extends EJBHome {

Cart create(String person) throws RemoteException, CreateException;


}
Le descripteur de
déploiement
 Fournit les informations nécessaires au déploiement dans le
conteneur et pour la configuration des intercepteurs
<enterprise-beans>
<session>
<display-name>CartEJB</display-name>
<ejb-name>CartEJB</ejb-name>
<home>CartHome</home>
<remote>Cart</remote>
<ejb-class>CartBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
<security-identity>
<description></description>
<use-caller-identity></use-caller-identity>
</security-identity>
</session>
</enterprise-beans>
Déploiement (suite)
<assembly-descriptor>
<method-permission>
<role-name>user<role-name/>
<method>
<ejb-name>CartEJB</ejb-name>
<method-intf>Remote</method-intf>
<method-name>getContents</method-name>
<method-params />
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>CartEJB</ejb-name>
<method-intf>Remote</method-intf>
<method-name>getContents</method-name>
<method-params />
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
Le client
public class CartClient {
public static void main(String[] args) {
Context initial = new InitialContext(); // context JNDI
CartHome home = initial.lookup("java:comp/env/ejb/SimpleCart");
// Recherche de l’interface de la factory

// Creation de l’objet session


Cart shoppingCart = home.create("Duke DeEarl« xs);

// appel de quelques business méthodes


shoppingCart.addBook("The Martian Chronicles");
Vector bookList = new Vector();
bookList = shoppingCart.getContents();

shoppingCart.removeBook("Alice in Wonderland");

// suppression de l’objet session


shoppingCart.remove();
}
Les entity beans
Implantation d’objets métiers persistants
(client, compte,…)
Persistance gérée par
Les conteneurs (CMP)
Le bean lui-même (BMP)
Le conteneur gère également les
transactions et la sécurité pour le
composant.
Utile pour gérer les accès concurrents à
des données persistantes.
Exemple d’entity bean
(CMP)

public class BookEJB implements
javax.ejb.EntityBean { // Méthodes requises par le conteneur
public String author; public void ejbPostCreate(String
public String titlel; _author,String _title) { }
public int price; public void ejbRemove() { }
private EntityContext context; public void ejbLoad() { }
public void ejbStore() {}
public String getTitle() {return title;}
public String getAuthor() {return author;}; public void setEntityContext(EntityContext
public int getPrice() {return price;} context) {
public void setPrice(int _price) this.context = context;}
{price=_price;}
public void unsetEntityContext() {
public String ejbCreate (String _author,
String _title) throws CreateException { context=null; }
author=_author;
title=_title; public void ejbActivate() { }
price=0; public void ejbPassivate() { }
return null; }
}


Home interface
public interface BookHome extends EJBHome
{

public Book create(String id, String url) throws RemoteException, CreateException;

public Book findByPrimaryKey (String id) throws RemoteException, FinderException;

public Collection findAll() throws RemoteException, FinderException;

Public Collection findByAuthor(String author) throws RemoteException, FinderException;


}
Interface de l’Entity Bean
public interface Book extends EJBObject {

public String getAuthor() throws RemoteException;


public String getTitle() throws RemoteException;
public int getPrice() throws RemoteException;
public void setPrice(int mode) throws RemoteException;

}
Le descripteur de
l’entity bean
<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>
<reentrant>False</reentrant>
<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>
Message Driven Bean
(ejb2.0)
Intégration des EJB et de JMS
Interactions asynchrones
Utilisé pour réagir à des messages JMS
Stateless bean
Une seule méthode dans l’interface
onMessage()
Exemple de message
bean
<message-driven>
<ejb-name>ValueContainerListener</ejb-name>
<ejb-class>hero.container.ValueContainerListener</ejb-class>
<message-selector>JMSType='ValueContainer'</message-selector>
<transaction-type>Container</transaction-type>
<ejb-ref>
<description>Value Container Home</description>
<ejb-ref-name>ejb/valuecontainer</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<ejb-link>ValueContainer</ejb-link>
<home>hero.container.ValueContainerHome</home>
<remote>hero.container.ValueContainer</remote>
</ejb-ref>
<message-driven-destination>
<destination-type>javax.jms.Topic</destination-type>
<subscription-durability>NonDurable</subscription-durability>
</message-driven-destination>
</message-driven>
Déploiement
Création d’un paquetage contenant
Les classes des beans
Le fichier de description
Les fichiers de configuration spécifique au
serveur
D’autres librairies
Mise en place dans le serveur (outils
spécifique ou déploiement à chaud)
Intérêt des EJB
Simplicité de l’écriture des composants
Mais le design est plus complexe
Portabilité des composants
A l’exception des adaptations des serveurs
Réutilisation/Composition
Il faut quand même programmer
Indépendance par rapport aux vendeurs
Bénéfices d’un serveur
d’EJB
Gestion automatisée des stocks de
ressources
Gestion automatisée du cycles de vie des
composants
Gestion de la concurrence
Scalabilité
Fonctionnalités déclaratives
Disponibilité et tolérance aux pannes
Modèle d’objet distribué
…
Limites actuelles (variables
selon les serveurs)
Maturité de la spécification, des technologies,

Moins vrai depuis la version 2.0
Performances ?
Environnements de développement
Complexité du design
Expérience des développeurs
Bibliographie et sources des
schémas
 J2EE Specification
 Java.sun.com/products/j2ee
 Enterprise Java Beans Specification 1.1 et 2.0
 Java.sun.com/products/ejb
 Mastering Enterprise JavaBeans and the Java 2 Platform Enterprise
Edition – Ed Roman – Wiley Computer publishing 1999
 www.theserverside.com
 java.sun.com/j2ee/tutorial
 www.jboss.org (serveur Open Source)
 Support de cours de Didier Donsez (université de Valenciennes)
 J2EE blueprints (java.sun.com)
 Mastering Enterprise JavaBeans II – Ed Roman -
(www.theserverside.com)