CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Session Module Java Expert
Module UV EJB Page 2 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module Java n Vue densemble du langage Java n Le langage Java : syntaxe et sémantique n Programmation multi-tâche : les threads n Accéder aux bases de données n Composants réutilisables : le modèle MVC n Développement Client/Serveur n Présentation d un IDE : WSAD / Forté / JBuilder n Les serveurs dapplications J2EE n Les Enterprise JavaBeans : les EJBs Sessions n Ré-ingénierie dapplications Java
Module UV EJB Page 3 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Définition du Bean de Session n Un bean session représente un simple client J2EE, celui-ci invoque les méthodes du bean pour accéder aux services de lapplication J2EE. n Pour accéder à une application déployée sur un serveur, le client invoque les méthodes du bean session. n Il réalise le travail du client, en lui cachant la complexité applicative en exécutant des opérations métiers à lintérieur du serveur.
Module UV EJB Page 4 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Type de beans Session? n Les beans ne sont pas persistants et ne sont pas partagés par les clients. n Il existe deux types de bean session : –Un bean session est utilisé pour mettre en place une communication avec état (stateful) entre un client et un serveur. –Un bean session sans état (stateless) n implémente pas une telle communication.
Module UV EJB Page 5 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle La session stateful n Létat dun objet consiste en les valeurs de ses variables dinstance. n Dans un bean stateful, les variables dinstance représentent : –létat dun unique client, car le client interagit (" parle ") avec son bean, –cet état est appelé létat conversationnel. n Létat est maintenu pendant la durée de la session du bean client. Si le client supprime le bean (remove) ou quitte la connexion, la session se termine et létat disparaît.
Module UV EJB Page 6 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Quand utiliser les beans session? n En règle générale, on utilise un bean session dans les circonstances suivantes : –A nimporte quel moment, un unique client a accès à linstance dun bean. –Létat dun bean nest pas persistant, car il nexiste que pour une courte période de temps (de lordre de quelques heures).
Module UV EJB Page 7 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Quand utiliser les beans session? n Les beans session stateful sont appropriés dans les conditions suivantes: –Létat du bean représente linteraction entre le bean et un client spécifique. –Le bean a besoin de conserver des informations concernant le client à travers les différentes invocations de méthodes. –Le bean est un médiateur entre le client et les autres composants de lapplication, présentant ainsi une vue simplifiée au client. –Derrière la scène, le bean gère le work flow de plusieurs beans enterprises.
Module UV EJB Page 8 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Quand utiliser les beans session? n Pour améliorer la performance, on peut choisir un bean stateless pour les raisons suivantes : –Létat du bean ne possède pas de données relatives à un client en particulier. –Lors dune simple invocation de méthode, le bean réalise une tâche générique pour tous les clients. exemple, on peut utiliser une bean stateless pour envoyer un e- mail qui confirme une commande en ligne. –Le bean extrait dune base de données un ensemble de données en lecture seule, qui est souvent utilisé par les clients (cache). Un tel bean peut récupérer les lignes dune table qui représentent les produits qui ont été vendus ce mois.
Module UV EJB Page 9 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle La session stateless n Une session stateless ne maintient pas létat conversationnel avec son client. n Lorsquun client invoque une méthode du bean stateless, les variables dinstance peuvent contenir un état, mais uniquement pour la durée de linvocation. n Sauf pendant linvocation de la méthode, toutes les instances dun bean stateless sont identiques, permettant au conteneur EJB dassigner une instance à nimporte quel client.
Module UV EJB Page 10 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle La session stateless n Comme les beans stateless peuvent supporter de multiples clients, ils permettent doffrir une meilleure extensibilité des applications J2EE. n En fait, une application J2EE ne nécessite que très peu de beans stateless par rapport aux beans stateful pour supporter la même charge de clients. n Le conteneur EJB nécrira jamais de beans stateless en mémoire secondaire. Ainsi, ils peuvent offrir de meilleures performances que les beans stateful.
Module UV EJB Page 11 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Utiliser un bean Session? n Pour implanter la logique session dapplications Web. Par exemple : saisir les renseignements de livraison et de facturation concernant un client via des pages JSP. n Pour implanter la logique session dapplications classiques. Par exemple : saisir les renseignements de livraison et de facturation concernant un client, utilisant JFC/Swing (application cliente).
Module UV EJB Page 12 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Cycle de vie n Un bean session avec ou sans état ne dure que le temps de la connexion du client. n Une session est définie entre la création et la suppression du bean session. n L état du client peut être stocké en mémoire secondaire : état conversationnel
Module UV EJB Page 13 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les clients vis-à-vis du conteneur EJB n Utiliser JNDI pour trouver un composant : Home –Java Naming and Directory Interface –Abstraction des services de nommage (CosNaming, etc.) et des services daccès aux structures arborescentes (répertoires, annuaire LDAP, etc.) n Accès aux services du composant : Remote n Appeler les méthodes du composant à distance pour réaliser les services. EJB Container Home Remote Client Code JNDI Client Stub
Module UV EJB Page 14 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle EJB Container Remote Vue interne du conteneur Remote Home Les objets Home et Remote sont automatiquement générés par le conteneur et implémentent les méthodes définies dans les interfaces Session Bean Session Bean Session Bean Session Bean Entity Bean Entity Bean Entity Bean Entity Bean EJBbeans, écrits par les développeurs et instanciés par le conteneur si nécessaire. Les objets Home et Remote redirigent les appels vers ces beans. Ils sont des objets services qui gèrent des appels à des méthodes particulières. Remote
Module UV EJB Page 15 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Structure des Beans Enterprise n La classe bean enterprise est une classe Java: –les méthodes métiers et –les méthodes du cycle de vie d un objet, –nom de la classe : nomEJB n L API client-vue : –interface home : create(), remove(), find() (uniquement Entité) et nom de la classe : nomHome –interface remote: nom de la classe : nomRemote (Sun préconise nom)
Module UV EJB Page 16 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Etat des Beans Sessions stateful inst1: nomBean inst2: nomBean inst3: nomBean obj1: nom (Remote) Client 1 Client 2 Client 3 obj2: nom (Remote) obj3: nom (Remote) Container EJB délègue toujours à la même instance Objets sessions (répartis) Instances sessions (avec état)
Module UV EJB Page 17 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Etat des Beans Sessions stateless inst1: nomBean inst2: nomBean inst3: nomBean Client 1 Client 2 Client 3 obj2: nom (Remote) Container EJB délègue à nimporte quelle instance disponible Instances sessions (sans état) Un seul Objet session (réparti)
Module UV EJB Page 18 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Structure dun Bean Enterprise Session > MonEJB_Home create() remove() > MonEJB_Remote AjouterUnProduit() Acheter() > MonEJB_EJB ejbCreate() ejbRemove() AjouterUnProduit() Acheter() métier
Module UV EJB Page 19 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Interface Bean Home n Elle contrôle le cycle de vie des objets EJBs. n Les méthodes permettent de créer, de localiser, et de supprimer des EJBs. n Elles sont héritées des interfaces javax.ejb.EJBHome et java.rmi.Remote
Module UV EJB Page 20 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle LInterface Home n Associée à un Objet Home qui est automatiquement généré par le conteneur EJB –Il sera nécessaire de définir les implémentations des méthodes dans la classe de lEJB: create => ejbCreate –La création effective de l EJB est réalisée par le constructeur de MonEJB. –La méthode create ne remplace pas le constructeur de l objet, elle sert uniquement à initialiser l état de l EJB, à charger des ressources, etc.
Module UV EJB Page 21 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Interface Bean Home n Il peut y avoir plusieurs méthodes create() avec un nombre de paramètres variables. n Un client récupère linterface Remote du bean créé. n Les méthodes create retournent soit linterface Remote, soit une collection de telles interfaces.
Module UV EJB Page 22 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de bean Home import java.rmi.*; import javax.ejb.*; public interface MonEJB_Home extends javax.ejb.EJBHome { public MonEJB_Remote create(String nomclient) throws RemoteException, CreateException; public void remove(Handle handleEJB) throws RemoteException, RemoveException; }
Module UV EJB Page 23 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Interface Bean Remote n Elle définit les méthodes métiers quun client peut appeler sur chaque objet bean enterprise. n Le Bean hérite des interfaces javax.ejb.EJBObject et java.rmi.Remote
Module UV EJB Page 24 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle L Interface Remote n Elle définit les méthodes qui peuvent être appelées par les clients –Les méthodes sont appelées sur des Objets distants qui sont automatiquement générés par le conteneur EJB n Pas de conventions de nommage n Il est obligatoire dimplémenter dans la classe MonEJB les méthodes déclarées dans cette spécification du métier de lEJB.
Module UV EJB Page 25 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Interface Bean Remote import java.rmi.*; import javax.ejb.*; public interface MonEJB_Remote extends javax.ejb.EJBObject { boolean AjouterUnProduit(int numeroProduit) throws java.rmi.RemoteException; boolean Acheter() throws java.rmi.RemoteException; }
Module UV EJB Page 26 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Interface Bean Enterprise (session) n Elle spécifie des méthodes à implémenter pour la création, la suppression des objets métiers et les méthodes métiers. n Les méthodes métiers accèdent aux classes utilitaires (métiers). n La classe du bean session doit : –être déclarée public, –contenir un constructeur publique sans paramètres, –ne pas être final ou abstract –ne pas définir de destructeurs (finalize) n La classe du bean session implémente linterface javax.ejb.SessionBean
Module UV EJB Page 27 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Interface Bean Enterprise import java.rmi.*; import javax.ejb.*; public class MonEJB_EJB implements SessionBean { public MonEJB_EJB(){ super(); } public boolean AjouterUnProduit(int numeroItem) { // le code pour ajouter des items au panier // peut se connecter via JDBC. } public boolean Acheter() { // le code pour acheter.} public void ejbCreate(String nomClient) { // code d initialisation de l objet} //… plus les méthodes héritées de SessionBean }
Module UV EJB Page 28 / 28 Deruelle Laurent Copyright © 2002 Laurent Deruelle Connexion à un bean session n Le client dun EJB session devra récupérer linterface Home de lEJB via JNDI. n Il devra impérativement effectuer un appel à la méthode create() pour récupérer une référence sur lEJB (remote). MonEJBRemote objremote = home.create(); n Ensuite il sera possible dinvoquer les méthodes métiers de lEJB. objremote.Acheter()