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>
CartEJB <ejb-name>CartEJB
CartHome Cart <ejb-class>CartBean <session-type>Stateful
Container <security-identity> <description> <use-caller-identity>
Déploiement (suite)
<method-permission> user <method> <ejb-name>CartEJB <method-intf>Remote <method-name>getContents <method-params /> <method> <ejb-name>CartEJB <method-intf>Remote <method-name>getContents <method-params /> Required
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 { public String author; public String titlel; public int price; private EntityContext context; public String getTitle() {return title;} public String getAuthor() {return author;}; public int getPrice() {return price;} public void setPrice(int _price) {price=_price;} public String ejbCreate (String _author, String _title) throws CreateException { author=_author; title=_title; price=0; return null; } …
… // Méthodes requises par le conteneur public void ejbPostCreate(String _author,String _title) { } public void ejbRemove() { } public void ejbLoad() { } public void ejbStore() {} public void setEntityContext(EntityContext context) { this.context = context;} public void unsetEntityContext() { context=null; } public void ejbActivate() { } public void ejbPassivate() { } }
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 public public public }
String getAuthor() throws RemoteException; String getTitle() throws RemoteException; int getPrice() throws RemoteException; void setPrice(int mode) throws RemoteException;
Le descripteur de l’entity bean
<entity>
Book <ejb-name>Book
BookHome Book <ejb-class>BookEJB
Container <prim-key-class>java.lang.String
False title author price <primkey-field>title
<description> <method-name>findByAuthor <method-params><method-param>java.lang.String <ejb-ql>select distinct object(b) from Book b where b.author=?1
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-class>hero.container.ValueContainerListener <message-selector>JMSType='ValueContainer'
Container <ejb-ref> <description>Value Container Home <ejb-ref-name>ejb/valuecontainer <ejb-ref-type>Entity <ejb-link>ValueContainer
hero.container.ValueContainerHome hero.container.ValueContainer <message-driven-destination> <destination-type>javax.jms.Topic <subscription-durability>NonDurable
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)