5 - 1 Architecture J2EE et Enterprise Java Beans Enterprise Java Beans 5 - 2 HaIedh Mili Copyright 2002 Plan L'architecture J2EE L'architecture Enterprise Java Beans Services de base Les Sessions Bean Stateless Stateful Les Entity Bean JDBC Persistence gre par la bean (bean-managed) Persistence gre par le serveur (container-managed) Considrations de conception Examples Hafedh Mili 2002. Tous droits rservs 2 Enterprise Java Beans 5 - 3 HaIedh Mili Copyright 2002 Dfis du gnie logiciel de nos jours La ralit d'aujourd'hui (la "globalisation" ) requiert le dveloppement d'applications distribues et performantes Intgration de systmes d'information d'une entreprise (qui peut tre gographiquement distribue) Intgration de systmes d'informations de plusieurs entreprises, l'occasion de relations d'affaires (B2B) Le dveloppement de ces applications est trs complexe, et ce, pour plusieurs raisons: Dfis techniques ds intgralement l'infrastructure de calcul (rseaux de communication, distribution de charge, robustesse ("fault-tolerance") Difficult de mise en place de certains services (transaction, scurit) INTER-OPRABILIT!!!!! Enterprise Java Beans 5 - 4 HaIedh Mili Copyright 2002 Quatre approches diffrentes Ne rien faire (envoyer des fichiers par e-mail ou des hardcopy) Dvelopper vous mme et l'infrastructure de dploiement et d'excution et la logique d'affaires Utiliser l'infrastructure de dploiement et d'excution d'un fournisseur et vous concentrer sur la logique d'affaire Utiliser la solution propritaire d'UN fournisseur Se mettre d'accord, entre fournisseurs et clients, sur une architecture, permettant plusieurs fournisseurs de supporter cette architecture, et aux clients de pouvoir choisir sans se pr- occuper de l'inter-oprabilit des applications Hafedh Mili 2002. Tous droits rservs 3 Enterprise Java Beans 5 - 5 HaIedh Mili Copyright 2002 Trois grandes tendances Au dbut (88-93): COM/DCOM: solution propritaire de MICROSOFT COM marche mieux que DCOM/COM+ CORBA: standard dvelopp par l'OMG, un organisme volontaire de l'industrie regroupant clients et fournisseurs de technologie Que faire: COM est plus simple utiliser dans les environnements Windows Une base d'implantation assez importante CORBA est plus ouvert Produits pas mrs Pas d'inter-oprabilit Il fallait choisir entre les deux Enterprise Java Beans 5 - 6 HaIedh Mili Copyright 2002 Trois grandes tendances Aprs (93 96): MICROSOFT et OMG se rendent compte qu'ils doivent offrir des ponts entre leurs technologies pour que les choix de technologie soient moins pnibles et moins critiques Les outils CORBA murissent, mais le dveloppement d'applications CORBA n'en demeure pas moins relativement compliqu Hier (96/97 00) Les technologies Java rentrent dans le march d'abord par Java RMI: Infrastructure RMI simple (beaucoup plus simple que CORBA) Exige du Java de bout en bout On parle d'inter-oprabilit avec Microsoft Le grand coup d'clat avec J2EE, qui offre plus de services que COM et CORBA Hafedh Mili 2002. Tous droits rservs 4 Enterprise Java Beans 5 - 7 HaIedh Mili Copyright 2002 Trois grandes tendances Ce matin (00 aujourd'hui) Microsoft sort .NET et C# pour concurrencer J2EE et Java Une pntration assez forte de la technologie J2EE dans le march nord-amricain Un "alphabet soup" de technologies provenant de diffrents vendeurs Plusieurs couches de technologie bties par dessus (et des fois ct) des technologies de base Enterprise Java Beans 5 - 8 HaIedh Mili Copyright 2002 L'architecture J2EE - Principes Hafedh Mili 2002. Tous droits rservs 5 Enterprise Java Beans 5 - 9 HaIedh Mili Copyright 2002 L'architecture J2EE C'est une architecture trois/quatre tiers: Tiers client: couche assez mince, contenant la logique d'invocation et d'affichage des donnes Tiers application: reflte la logique d'affaires (oriente- objet), riche en fonctionnalits, et offrant plusieurs services "architecturaux" Tiers donnes, offrant la persistence et l'accs centralis aux donnes Enterprise Java Beans 5 - 10 HaIedh Mili Copyright 2002 Plusieurs scnarios de dploiement Hafedh Mili 2002. Tous droits rservs 6 Enterprise Java Beans 5 - 11 HaIedh Mili Copyright 2002 Un scnario quatre tiers simple pages HTML contenant applet qui utilise session et entity beans Enterprise Java Beans 5 - 12 HaIedh Mili Copyright 2002 L'architecture J2EE Sun spcifie des composants au niveau de chacun des tiers, et fournit des outils/classes dans chacun de ces tiers Pour ce faire, elle utilise beaucoup de technologies Hafedh Mili 2002. Tous droits rservs 7 Enterprise Java Beans 5 - 13 HaIedh Mili Copyright 2002 Rsum Enterprise Java Beans 5 - 14 HaIedh Mili Copyright 2002 Plan L'architecture J2EE L'architecture Enterprise Java Beans Services de base Les Sessions Bean Stateless Stateful Les Entity Bean JDBC Persistence gre par la bean (bean-managed) Persistence gre par le serveur (container-managed) Considrations de conception Examples Hafedh Mili 2002. Tous droits rservs 8 Enterprise Java Beans 5 - 15 HaIedh Mili Copyright 2002 Enterprise Java Beans "The Enterprise Java Beans architecture is a component architecture for the development and deployment of object-oriented distributed enterprise- level applications. Applications written using the Enterprise Java Beans architecture are scalable, transactional, and multi-user secure. These applications may be written once, and deployed on any server platform that supports the Enterprise Java Beans specification" Sun Microsystems's EJB specification, 1998 Enterprise Java Beans 5 - 16 HaIedh Mili Copyright 2002 L'architecture EJB Cette architecture spcifie Les services que doit support un serveur EJB ("EJB- compliant") Les interfaces (contrats) que les classes ou composants d'affaire doivent supporter pour pouvoir bnficier de ces services => Le modle de composants de EJB Hafedh Mili 2002. Tous droits rservs 9 Enterprise Java Beans 5 - 17 HaIedh Mili Copyright 2002 Caractristiques de serveurs EJB Infrastructure d' objets distribus Services de concurrence (accs partag aux mmes ressources) Service de transactions (ACID) Distribution de charge Gestion (optimale) des ressources Scurit Enterprise Java Beans 5 - 18 HaIedh Mili Copyright 2002 Distribution d' objets ma machine Auteur MonApplet getNom() ajouteLivre(livre) ma machine Auteur_proxy MonApplet getNom() ajouteLivre(livre) Auteur_serv Infrastructure RMI paramtres getLivres() rsultats Hafedh Mili 2002. Tous droits rservs 10 Enterprise Java Beans 5 - 19 HaIedh Mili Copyright 2002 Distribution d'objets (2) "Client" et "serveur" roulent dans deux processus et possiblement machines diffrentes Un "reprsentant local" (proxy) prend lieu de l'objet distant du ct du client, et se comporte comme son reprsentant Le passage de paramtres travers le rseau se fait par srialisation et dsrialisation de donnes (objets) L'identit d'un objet n'est plus lie un espace mmoire local, mais devient identifiable travers le rseau par d'autres caractristiques Enterprise Java Beans 5 - 20 HaIedh Mili Copyright 2002 Infrastructures "RMI" existantes ORBs, Java RMI, DCOM (et le TP2) offrent toutes l'invocation de mthodes distance Dans chacune de ces technologies l, les outils de dploiement gnrent des "proxies", du ct client, et des "skelettes", du ct serveur, partir d'une description "abstraite" (interface) de la fonctionnalit de l'objet: CORBA utilise CORBA IDL COM utilise COM IDL Java RMI utilise les interfaces Java Le dveloppeur doit implanter la fonctionnalit d'affaires du ct serveur Hafedh Mili 2002. Tous droits rservs 11 Enterprise Java Beans 5 - 21 HaIedh Mili Copyright 2002 Infrastructures existantes Plusieurs infrastructures offrent (ou dpendent de) un service d'adressage/nommage global: Ce service permet d'attribuer des "noms" des objets distants, et de les retrouver avec ces noms l Peuvent offrir d'autres services qui accompagnent ces services de base: Transactions (distribues, two-phase commit) (CORBA et probablement DCOM) Lifecycle (COM/DCOM et CORBA) Relations (CORBA) Scurit (CORBA, COM/DCOM, etc.) Enterprise Java Beans 5 - 22 HaIedh Mili Copyright 2002 Vue d'ensemble de l'architecture EJB RMI layer Concur- rency service Transac. service Security service
La couche RMI est ncessaire mais largement
insuffisante CORBA offre beaucoup de services, mais les dveloppeurs doivent les invoquer, et rgler les problmes d'intractions de services. La plupart des services EJB sont offerts d'office et configurables au moment du dploiement Hafedh Mili 2002. Tous droits rservs 12 Enterprise Java Beans 5 - 23 HaIedh Mili Copyright 2002 Varits de Beans Il y a deux (trois) grandes classes de beans: Entity beans: Ces bean reprsentent les entits du domaine d'affaires; ce sont les objets qui vont survivre au del d'une intraction client-serveur, et peuvent tre partags par plusieurs usagers (les serveur EJB grent l'accs partag) Session beans: elles reprsentent des processus d'affaires; sont transientes. Typiquement, elles implantent des use-cases. Elles sont spcifiques l'usager/client. Deux sortes Stateless beans: chaque appel de mthode est indpendant de l'appel suivant Stateful beans: les mthodes appeles ont des effets de bord qui sont utiliss pour les appels suivants. Reprsentent des transactions complexes Enterprise Java Beans 5 - 24 HaIedh Mili Copyright 2002 Type de beans La diffrence entre EntityBean et SessionBean est importante pour le dveloppeur (diffrentes conventions, diffrentes mthodes implanter) et pour les serveurs La diffrence entre stateful SessionBean et stateless SessionBean ne fait pas de diffrence au niveau de la programmation: Elle est spcifie au moment du dploiement Elle influence la faon dont le serveur traite les beans Hafedh Mili 2002. Tous droits rservs 13 Enterprise Java Beans 5 - 25 HaIedh Mili Copyright 2002 Composants d'une EJB L'interface remote (interface): dcrit la logique d'affaires. Doit tre une extension de l'interface EJBObject L'interface home (interface): reprsente l'objet qui nous permet de crr et rechercher les objets de la bean. Cette interface doit tre une extension de EJBHome La classe bean (class): cette classe doit implements l'interface EntityBean (SessionBean), et doit fournir une implantation pour les mthodes de l'interface remote et celles de l'interface home. Les interfaces EntityBean et SessionBean incluent des mthodes "callback" qui seront appeles par le serveur pour la gestion du cycle de vie et de la persistence des beans. Les classes "bean" doivent implanter ces mthodes Enterprise Java Beans 5 - 26 HaIedh Mili Copyright 2002 Vue globale simplifie AuteurHome_proxy Auteur_proxy AuteurHome_skele Auteur AuteurHome AuteurEJB Server Client create create MonApplet create () bla bla Auteur_impl Hafedh Mili 2002. Tous droits rservs 14 Enterprise Java Beans 5 - 27 HaIedh Mili Copyright 2002 Example: une session bean qui donne l'heure package quelleheureestil; import javax.ejb.EJBObject; import java.util.Calendar; import java.rmi.RemoteException; import javax.ejb.EJBException; /** * Title: Illustration de la plus simple bean */ public interface DonneLHeure extends EJBObject { public Calendar quelleHeureEstIl() throws RemoteException; public Calendar etEnTerreNeuve() throws RemoteException; } Enterprise Java Beans 5 - 28 HaIedh Mili Copyright 2002 Home interface package quelleheureestil; import javax.ejb.EJBHome; import javax.ejb.CreateException; import java.util.Calendar; import java.rmi.RemoteException; import javax.ejb.EJBException; public interface DonneLHeureHome extends EJBHome { public DonneLHeure create() throws RemoteException, CreateException; } Hafedh Mili 2002. Tous droits rservs 15 Enterprise Java Beans 5 - 29 HaIedh Mili Copyright 2002 L'implantation public class DonneLHeureEJB implements SessionBean { public DonneLHeureEJB() { System.out.println("Creation d'un donneur de l'heure"); } /** implantation de la methode de la remote interface */ public Calendar quelleHeureEstIl() throws RemoteException { System.out.println("On me demande l'Heure"); Calendar heure = GregorianCalendar.getInstance(); return heure; } public Calendar etEnTerreNeuve() throws RemoteException { System.out.println("On me demande l'Heure en Terre Neuve"); Calendar heure = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT-4:30")); return heure; } public void ejbCreate() throws RemoteException, CreateException { } public void ejbActivate() throws EJBException, RemoteException {} public void ejbPassivate() throws EJBException, RemoteException {} public void ejbRemove() throws EJBException, RemoteException {} public void setSessionContext(SessionContext parm1) throws EJBException, RemoteException {} } Enterprise Java Beans 5 - 30 HaIedh Mili Copyright 2002 L'application client public class Principale { public Principale() { } public static void main(String[] args) { try { // obtiens une instance du service de nommage Context instanceDeNamingService = new InitialContext(); // obtiens reference au serveur du serveur de temps Object reference = instanceDeNamingService.lookup("ServeurDuServeurDeTemps"); // faire un cast scuritaire DonneLHeureHome DonneLHeureHome serveurDuServeurDetemps = (DonneLHeureHome)PortableRemoteObject.narrow(reference,quelleheureestil.DonneLHeureHome .class); // obtiens un donneur d'heure DonneLHeure serveurDeTemps = serveurDuServeurDetemps.create(); System.out.println("L'heure chez le serveur est " +serveurDeTemps.quelleHeureEstIl()); } catch (Exception exception) { exception.printStackTrace(); } } } Hafedh Mili 2002. Tous droits rservs 16 Enterprise Java Beans 5 - 31 HaIedh Mili Copyright 2002 Plan L'architecture J2EE L'architecture Enterprise Java Beans Services de base Les Sessions Bean Stateless Stateful Les Entity Bean JDBC Persistence gre par la bean (bean-managed) Persistence gre par le serveur (container-managed) Considrations de conception Examples Enterprise Java Beans 5 - 32 HaIedh Mili Copyright 2002 Services de base Gestion des ressources Instance pooling Distribution de charge Services: Concurrence Transactions Persistence Distribution Naming Security Hafedh Mili 2002. Tous droits rservs 17 Enterprise Java Beans 5 - 33 HaIedh Mili Copyright 2002 Les beans Une application serveur peut dsservir plus milliers de clients en mme temps La cration de ces beans prend pas mal de place, mais surtout, pas mal de temps (allocation dynamique de mmoire) On peut optimiser l'utilisation des beans de deux faons: Ne pas dtruire les objets quand ils ne sont plus utiliss. On les "vide", mais on attend une nouvelle requte pour un autre bean pour pouvoir les rutiliser pour d'autres programmes clients Dans certains cas, on peut utiliser le mme objet pour rpondre plusieurs clients (stateless session bean) Enterprise Java Beans 5 - 34 HaIedh Mili Copyright 2002 tat d'un bean (entity) Etat neant Pooled state Etat prt instantiation aIIectation a un objet EJB Repondre aux besoins du client (1) (2) (3) (4) session client terminee (5) retour au neant Hafedh Mili 2002. Tous droits rservs 18 Enterprise Java Beans 5 - 35 HaIedh Mili Copyright 2002 tat d'un bean (entity) Etat neant Pooled state Etat prt setEntityContext() create() ejbCreate() ejbPostCreate() Repondre aux besoins du client (1) (2) (3) (4) remove() ejbRemove() (5) unsetEntityContext() ejbActivate() ejbPassivate() Enterprise Java Beans 5 - 36 HaIedh Mili Copyright 2002 Cycle de vie d'un bean home stub EJB home create() (1) newInstance() (2) (3) AIIectation d'une instance de bean a l'objet (4) AIIectation d'une instance de bean a l'objet home stub Auteur stub EJBObject EJB home Hafedh Mili 2002. Tous droits rservs 19 Enterprise Java Beans 5 - 37 HaIedh Mili Copyright 2002 Instance swapping Les session bean qui sont stateless peuvent tre passes entre clients pendant les pauses entre requtes d'un client Les session beans qui sont stateful sont srialises en mmoire secondaire lorsqu'elles ne sont pas utilises: ejbActivate(): que faire lors d'un chargement de mmoire secondaire ejbPassivate(): que faire lorsqu'on s'apprte sortir le session bean de la mmoire Enterprise Java Beans 5 - 38 HaIedh Mili Copyright 2002 Cycle de vie des session beans Etat neant (1) Etat prt (2) (3) create() setSessionContext() ejbCreate() remove() ejbRemove() sert les requtes du client Stateless Etat neant (1) Etat prt Etat "passiI" (2) (3) (4) (5) sert les requtes du client create() setSessionContext() ejbCreate() ejbPassivate() ejbActivate() remove() ejbRemove() StateIul Hafedh Mili 2002. Tous droits rservs 20 Enterprise Java Beans 5 - 39 HaIedh Mili Copyright 2002 Gestion des stateful session beans L'activation et la passivation des beans est laisse la discrtion du "container" Le but est de conserver les ressources L'une des techniques utilises est celle de la bean "Least Recently Used", i.e. dont l'utilisation remonte au plus longtemps Si tout n'est pas srialise, il faut veiller reconstituer l'tat de la bean (dans ejbActivate()) Enterprise Java Beans 5 - 40 HaIedh Mili Copyright 2002 Distribution de charge L'architecture J2EE ne spcifie pas de stratgie particulire de distribution de charge, mais Les implantations doivent permettre la distribution de charge entre plusieurs serveurs, de faon transparente par rapport au programme client Hafedh Mili 2002. Tous droits rservs 21 Enterprise Java Beans 5 - 41 HaIedh Mili Copyright 2002 Services Services de base Concurrence Transactions Persistence Distribution Naming Security Ces services sont des add-ons, qu'il faut invoquer explicitement dans CORBA Ils sont requis (et transparents) dans EJB Enterprise Java Beans 5 - 42 HaIedh Mili Copyright 2002 Concurrence Les session beans ne supportent pas la concurrence: Les stateful beans sont attribues une par programme client, et donc, pas besoin de les partager Les stateless beans n'ont pas de donnes faire partager entre plusieurs programmes clients, et donc, il n'y a pas lieu de les partager: on peut juste en crer d'autres pour rpondre aux requtes des clients Les entity beans: doivent tre partages entre programmes clients EJB interdit l'accs concurrent aux entity beans: chaque programme client verrouille l'entity bean qu'il manipule, durant sa manipulation (invocation de mthode) Hafedh Mili 2002. Tous droits rservs 22 Enterprise Java Beans 5 - 43 HaIedh Mili Copyright 2002 Concurrence des entity beans Les containers implementent la synchronization automatiquement: toutes les mthodes d'affaires des beans sont considres comme "synchronized" (sont excutes l'intrieur de blocs synchronized sur l'objet) On ne peut pas crer de thread dans les beans (les containers doivent maintenir le contrle total sur la concurrence dans le systme). Enterprise Java Beans 5 - 44 HaIedh Mili Copyright 2002 Les beans ne peuvent pas tre r- entrantes Client Auteur1 Livre12 ou habitent les co-auteurs de tes livres? Donnes moi les adresses de tes auteurs (1) (2) (3) Donnes moi ton adresse Pour le container, l'appel (3) est (1) paraissent comme venant de deux clients diIIerents Hafedh Mili 2002. Tous droits rservs 23 Enterprise Java Beans 5 - 45 HaIedh Mili Copyright 2002 Transactions Les container grent les transactions automatiquement Durant le dploiement, le dveloppeur spcifie les "attributs transactionnels" de chaque mthode Dans l'un des modes (required), le container excute les mthodes dans des transactions (si la mthode choue, les changements partiels effectus la BD sont rtracts) Enterprise Java Beans 5 - 46 HaIedh Mili Copyright 2002 Persistence Les entity bean sont, par dfinition, persistentes La persistence des entity beans peuvent tre accomplie de deux faons: Gre automatiquement par le "container" (container managed persistence) Gre " bras" par le dveloppeur (bean-managed persistence) Pour la "container-managed persistence", chaque vendeur choisit un(e) (ensemble de) technologie(s) de persistence adapte Pour la "bean-managed persistence", le dveloppeur peut faire comme il veut (y compris lire les donnes d'un fichier) Hafedh Mili 2002. Tous droits rservs 24 Enterprise Java Beans 5 - 47 HaIedh Mili Copyright 2002 Persistence Deux mthodes ("callback") figurent dans l'interface d'une entity bean pour synchronizer la base de donnes et les entity bean du container: ejbLoad() est appele pour initialiser une entity bean connue par sa cl primaire ejbSave() est appele pour sauvegarder l'tat de l'objet dans la BD Pour du container-managed, ces mthodes sont gnres Pour du bean-managed, le dveloppeur doit les coder D'autres mthodes seront ncessaires pour les fonctions d'accs aux objets associs Enterprise Java Beans 5 - 48 HaIedh Mili Copyright 2002 Container-managed persistence Deux types de technologies: Bases de donnes relationnelles: Le dveloppeur spcifie une correspondence entre les classes (entity bean) et les tables d'une base de donnes relationnelle On fait (trs bien) la correspondence entre attributs et navigation simple (relations un plusieurs) On fait depuis EJB 2.0 le mapping pour les relations plusieurs plusieurs Bases de donnes orientes objet Il n'y a quasiment rien faire. Hafedh Mili 2002. Tous droits rservs 25 Enterprise Java Beans 5 - 49 HaIedh Mili Copyright 2002 Bean-managed persistence La sauvegarde des donnes est faite grce du code que le dveloppeur devra crire Du fait sur mesure, permettant une certaine optimisation (lazy initialization) De l'ouvrage Enterprise Java Beans 5 - 50 HaIedh Mili Copyright 2002 Distribution Premire version de EJB (1.0) spcifique Java RMI Depuis EJB 1.1, il est en principe, possible d'interfacer un client CORBA avec un serveur EJB, grace au protocole RMI-IIOP, et un client ActiveX grace DCOM CORBA IIOP RMI-IIOP DCOM Client DCOM (ActiveX, etc.) Client Java Client CORBA (Java, C, Smalltalk, etc.) Hafedh Mili 2002. Tous droits rservs 26 Enterprise Java Beans 5 - 51 HaIedh Mili Copyright 2002 Nommage (naming) Java Naming and Directory Interface: API pour enregistrement et dpistage de clients JNDI peut se plugger sur plusieurs services de nommage // obtiens une instance du service de nommage Context instanceDeNamingService = new InitialContext(); // obtiens reference au serveur du serveur de temps Object reference = instanceDeNamingService.lookup("ServeurDuServeurDeTemps"); // faire un cast scuritaire DonneLHeureHome DonneLHeureHome serveurDuServeurDetemps = (DonneLHeureHome)PortableRemoteObject.narrow(reference,quelleheureestil.Donne LHeureHome.class); // obtiens un donneur d'heure DonneLHeure serveurDeTemps = serveurDuServeurDetemps.create(); Enterprise Java Beans 5 - 52 HaIedh Mili Copyright 2002 Scurit Les serveurs EJB supportent trois types de scurit: Identification: identifier les usagers du systme par code usager et mots de passe Authorizations: restreindre l'accs aux mthodes des EJBs certains usagers ou certains groupes d'usagers (roles) Communication confidentielle: les donnes transmises sont scurises Hafedh Mili 2002. Tous droits rservs 27 Enterprise Java Beans 5 - 53 HaIedh Mili Copyright 2002 Authorizations: modle base de rles On dfinit des rles On dfinit les permissions pour les mthodes par rapport aux rles On associe des usagers ou groupes d'usager des roles (via le deploytool) On s'identifie au moment de dmarrer l'application Enterprise Java Beans 5 - 54 HaIedh Mili Copyright 2002 Identification de l'usager
. Hafedh Mili 2002. Tous droits rservs 28 Enterprise Java Beans 5 - 55 HaIedh Mili Copyright 2002 On peut savoir qui appelle une mthode public abstract interface EJBContext { // Methods EJBHome getEJBHome(); EJBLocalHome getEJBLocalHome(); Properties getEnvironment(); Identity getCallerIdentity(); Principal getCallerPrincipal(); boolean isCallerInRole(Identity p0); boolean isCallerInRole(String p0); UserTransaction getUserTransaction() throws IllegalStateException; void setRollbackOnly() throws IllegalStateException; boolean getRollbackOnly() throws IllegalStateException; } Enterprise Java Beans 5 - 56 HaIedh Mili Copyright 2002 Plan L'architecture J2EE L'architecture Enterprise Java Beans Services de base Les Sessions Bean Stateless Stateful Les Entity Bean JDBC Persistence gre par la bean (bean-managed) Persistence gre par le serveur (container-managed) Considrations de conception Examples Hafedh Mili 2002. Tous droits rservs 29 Enterprise Java Beans 5 - 57 HaIedh Mili Copyright 2002 Session beans: rappel Session beans: elles reprsent des processus d'affaires; sont transientes. Typiquement, elles implantent des use- cases. Elles sont spcifiques l'usager/client. Deux sortes Stateless beans: chaque appel de mthode est indpendant de l'appel suivant Stateful beans: les mthodes appeles ont des effets de bord qui sont utiliss pour les appels suivants. Reprsentent des transactions complexes Enterprise Java Beans 5 - 58 HaIedh Mili Copyright 2002 Cycle de vie des session beans Etat neant (1) Etat prt (2) (3) create() setSessionContext() ejbCreate() remove() ejbRemove() sert les requtes du client Stateless Etat neant (1) Etat prt Etat "passiI" (2) (3) (4) (5) sert les requtes du client create() setSessionContext() ejbCreate() ejbPassivate() ejbActivate() remove() ejbRemove() StateIul Hafedh Mili 2002. Tous droits rservs 30 Enterprise Java Beans 5 - 59 HaIedh Mili Copyright 2002 Pour implanter une session bean Il faut dfinir trois interfaces: remote interface: une interface qui reprsente les fonctionnalits d'affaire de la "bean" home interface: une interface qui reprsente un "utilitaire" pour crer, ou chercher des instances de la home interface Classe EJB: classe qui implante la fonctionnalit de la session bean Enterprise Java Beans 5 - 60 HaIedh Mili Copyright 2002 L'interface "remote" Doit tre une extension de EJBObject Chaque mthode doit lancer: RemoteException ou EJBException pour reprsenter les exceptions d'infrastructure (lien de communication rompue, connexion des ressources non-disponibles, etc.) Les exceptions spcifiques au domaine d'application, au besoin Les arguments et rsultats de retour doivent tre acceptables pour RMI-IIOP Ils doivent tre srializables Peuvent reprsenter des rfrences des objets "distants" Hafedh Mili 2002. Tous droits rservs 31 Enterprise Java Beans 5 - 61 HaIedh Mili Copyright 2002 L'interface home Cette interface doit hriter de javax.ejb.EJBHome Cette interface contient des mthodes pour: Crer des beans (entity beans ou session beans) Appeler d'autre mthodes utilitaires (non appelable directement sur un objet du domaine) Doit inclure au moins une mthode "create" (peu importe le nombre d'arguments) Peut inclure des mthodes "remove" Les mmes restrictions pour les types de paramtres et de retour des mthodes Enterprise Java Beans 5 - 62 HaIedh Mili Copyright 2002 La classe "bean" Cette classe doit: Implanter l'interface SessionBean Implanter les mthodes incluses dans la remote interface Mme signature que dans la remote interface Implanter les mthodes incluses dans la home interface Nom de mthode de la home interface prfix par ejb. Exemple: si dans home interface la mthode s'appelle "create()", dans la classe Bean, il doit y avoir une mthode correspondente avec le nom ejbCreate, et qui lance les mmes exceptions Doit avoir un constructeur public sans arguments Hafedh Mili 2002. Tous droits rservs 32 Enterprise Java Beans 5 - 63 HaIedh Mili Copyright 2002 Cration d'une session bean (stateful) Client EJBHome EJB Object sc: Sessi on context instance create(args) new new new seSessionContext(sc) ejbCreate(args) Enterprise Java Beans 5 - 64 HaIedh Mili Copyright 2002 Cration d'une session bean (stateless) On cre le EJB object suite la demande du create() du client La "cration" de la bean instance, et son affectation au EJB object est reporte jusqu'au moment o on a besoin de la bean (invocation d'une mthode) Hafedh Mili 2002. Tous droits rservs 33 Enterprise Java Beans 5 - 65 HaIedh Mili Copyright 2002 Interface session bean public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException La bean doit emmagasiner le "contexte" dans une variable d'instance. Ce contexte permettra plus tard de savoir qui a appel (pour des questions de securit) public void ejbActivate() throws EJBException, RemoteException Le container appelle cette mthode la fin de la ractivation de la bean (stateful) public void ejbPassivate() throws EJBException, RemoteException Le container informe la bean qu'elle va se faire passiver public void ejbRemove() throws EJBException, RemoteException Le container informe la bean qu'elle va se faire effacer Enterprise Java Beans 5 - 66 HaIedh Mili Copyright 2002 Interface Session Bean Trs souvent, on peut laisser ejbPassivate() et ejbActivate() vides Dans certains cas, on les utilise pour: reconstruire certaines donnes non-srialises relcher ou racqurir les ressources qu'on utilise Typiquement, ejbRemove() et ejbPassivate() vont se ressembler ejbRemove() sera souvent appele automatiquement par le container, mais l'occasion par le client (via remove()) Hafedh Mili 2002. Tous droits rservs 34 Enterprise Java Beans 5 - 67 HaIedh Mili Copyright 2002 Plan L'architecture J2EE L'architecture Enterprise Java Beans Services de base Les Sessions Bean Stateless Stateful Les Entity Bean JDBC Persistence gre par la bean (bean-managed) Persistence gre par le serveur (container-managed) Considrations de conception Examples Enterprise Java Beans 5 - 68 HaIedh Mili Copyright 2002 Pour implanter une entity bean Il faut dfinir: remote interface: une interface qui reprsente les fonctionnalits d'affaires de la "bean" home interface: une interface qui reprsente un "utilitaire" pour crer, ou chercher des instances de la home interface Classe EJB: classe qui implante la fonctionnalit de la entity bean Classe cl primaire (optionnelle): une classe qui reprsente la cl primaire des entity bean. Cette classe peut tre String, si on est capable d'identifier uniquement les instances de la bean avec juste une valeur Hafedh Mili 2002. Tous droits rservs 35 Enterprise Java Beans 5 - 69 HaIedh Mili Copyright 2002 Remote et home interface Mmes restrictions que pour la session bean au niveau des signatures des mthodes La home interface doit inclure la signature <interface remote> findByPrimaryKey(<type de cl> arg)throws RemoteException, FinderException; N'est pas oblig d'avoir des mthodes "create()" La home interface peut inclure d'autres mthodes de fouilles d'entity bean. Les mthodes "finder" doivent: Commencer par le prfix "find" Soit retourner une instance de la bean (interface remote) Soit retourner une collection d'instances de la bean Doivent lancer au moins les exceptions RemoteException et FinderException Enterprise Java Beans 5 - 70 HaIedh Mili Copyright 2002 La bean class Cette classe doit: Implanter l'interface EntityBean Implanter les mthodes incluses dans la remote interface Mme signature que dans la remote interface Implanter les mthodes incluses dans la home interface Nom de mthode de la home interface prfix par ejb. Exemple: si dans home interface la mthode s'appelle "create()", dans la classe Bean, il doit y avoir une mthode correspondente avec le nom ejbCreate, et qui lance les mmes exceptions Doit avoir un constructeur public sans arguments L'implantation des mthodes "finder" doit retourner une cl primaire ou une collection de cls primaires Hafedh Mili 2002. Tous droits rservs 36 Enterprise Java Beans 5 - 71 HaIedh Mili Copyright 2002 Identit des objets Les objets sont identifis uniquement par: leur base (leur home) leur cl primaire Pour vrifier l'identit de deux objects, on utilise la mthode isIdentical(EJBObject unObject) Il ne faut pas utiliser "==" pour comparer des entity (ou session bean) du cot client Enterprise Java Beans 5 - 72 HaIedh Mili Copyright 2002 Cycle de vie d'une entity bean Etat neant Pooled state Etat prt setEntityContext() create() ejbCreate() ejbPostCreate() Repondre aux besoins du client (3) remove() ejbRemove() unsetEntityContext() ejbActivate() ejbPassivate() ejbLoad() ejbStore() find.() ejbFind.() Hafedh Mili 2002. Tous droits rservs 37 Enterprise Java Beans 5 - 73 HaIedh Mili Copyright 2002 Cycle de vie La bean instance est cre par le container avec BeanClass.newInstance(), suivi de setEntityContext(EntityContext ctx) Le contexte contient de l'information sur le container et sur l'objet qui appelle Dans l'tat pooled, l'instance de bean n'est pas attribue un EJBObject Dans ce temps l, elle peut excuter n'importe quelle mthode finder (mthodes de la home interface). L'instance ne va pas vers un ready state la fin d'une finder method (mme pas findByPrimaryKey()) Enterprise Java Beans 5 - 74 HaIedh Mili Copyright 2002 Cycle de vie (suite) C'est le container qui slectionne une bean instance pour l'attribuer un objet, et donc, la faire passer vers l'tat prt. Deux transitions possibles: Par le biais de ejbCreate() et ejbPostCreate() (en rponse un appel sur le home de la part du client) Par le biais d'un ejbActivate(), qui est appele automatiquement par le container quand il a besoin d'une bean instance pour rpondre aux besoins d'un client Hafedh Mili 2002. Tous droits rservs 38 Enterprise Java Beans 5 - 75 HaIedh Mili Copyright 2002 Cycle de vie (suite) A l'tat prt, la bean instance est associe un objet, et le container peut tre amen invoquer ejbLoad et ejbStore plusieurs fois pour synchroniser l'tat de la bean instance A l'tat prt, tout ce que l'on sait c'est que le contexte de la bean instance peut nous donner accs la cl primaire. La bean instance revient l'tat pooled de deux faons: le container peut appeler ejbPassivate() (gestion de ressources) le client appelle ejbRemove() unsetEntityContext() enlves une bean instance de l'tat pooled (la prpare pour la garbage collection) Enterprise Java Beans 5 - 76 HaIedh Mili Copyright 2002 L'interface EntityBean (suite) public void setEntityContext(EntityContext ctx) throws EJBException, RemoteException Il faut sauvegarder le contexte dans une variable d'instance pour pouvoir y rfrer dans d'autres mthodes (e.g. pour savoir qui appelle). On peut rserver des ressources ici public void unsetEntityContext() throws EJBException, RemoteException Le dernier soupir de la bean instance. On y lche les ressources acquises dans setEntityContext() Hafedh Mili 2002. Tous droits rservs 39 Enterprise Java Beans 5 - 77 HaIedh Mili Copyright 2002 L'interface EntityBean (suite) public <cle> ejbCreate(args~) throws CreateException, RemoteException, d'autres exceptions~ La bean instance existe, mais n'est pas attribue un objet encore Cette mthode valide les arguments (y compris les possibilits de conflict de cl primaire), initialise la bean instance, et insre l'objet dans la BD Retourne la cl primaire public void ejbPostCreate(args~) throws CreateException, RemoteException, d'autres exceptions~ La bean instance existe, mais et est attribue un objet Si on demander la cl primaire de l'objet ( partir du contexte), on la trouverait Sera trs souvent vide Peut servir pour notifier une autre bean de la cration de celle ci, en appelant getEJBObject() sur le contexte pour avoir la rfrence l'objet courant pour "se passer" comme argument Enterprise Java Beans 5 - 78 HaIedh Mili Copyright 2002 L'interface EntityBean (suite) public void ejbActivate() throws EJBException, RemoteException Cette mthode est appele quand le container slectionne la entity bean instance pour l'attribuer un objet La cl primaire est disponible On peut l'utiliser pour acqurir de nouvelles ressources Ce n'est pas ici qu'on synchronise la bean instance avec la BD (ejbLoad() s'en occupe, et elle sera appele par le container) public void ejbPassivate() throws EJBException, RemoteException Cette mthode est appele quand le container dcide de dissocier la entity bean instance d'un objet On peut l'utiliser pour relcher les ressources dtenues Ce n'est pas ici qu'on synchronize la bean instance avec la BD (ejbStore() s'en occupe, et elle sera appele par le container) Hafedh Mili 2002. Tous droits rservs 40 Enterprise Java Beans 5 - 79 HaIedh Mili Copyright 2002 L'interface EntityBean (fin) public void ejbLoad() throws EJBException, RemoteException appele par le container pour synchroniser l'tat de la bean instance avec la BD la cl primaire est disponible la cl primaire est la seule garantie de l'identit de l'objet public void ejbStore() throws EJBException, RemoteException appele par le container pour sauvegarder l'tat de la bean instance dans la BD Enterprise Java Beans 5 - 80 HaIedh Mili Copyright 2002 Les finders Les finders sont excuts par des bean instance qui sont dans l'tat pooled. On ne peut pas supposer que l'instance qui excute un findByPrimaryKey() sera la mme que le container choisira d'attribuer l'objet en question Pas la peine de rien initialiser dans cette mthode La home interface retourne des objets (remote interface) ou des collection d'objet), alors que dans la bean entity class, on retourne la cl primaire (ou une collection de cls primaires) Il faut laisser le choix au container de choisir les bean instance qu'il veut! Considrez les comme des mthodes statiques! Hafedh Mili 2002. Tous droits rservs 41 Enterprise Java Beans 5 - 81 HaIedh Mili Copyright 2002 Plan L'architecture J2EE L'architecture Enterprise Java Beans Services de base Les Sessions Bean Stateless Stateful Les Entity Bean JDBC Persistence gre par la bean (bean-managed) Persistence gre par le serveur (container-managed) Considrations de conception Exemples Enterprise Java Beans 5 - 82 HaIedh Mili Copyright 2002 Considrations de conception Les appels distants cotent chers Ne "beanez" pas toutes vos classes: Dans une aggrgation, ne beanez que l'objet principal La sauvegarde en BD s'assurera de tout sauvergarder Ce qui n'est accessible que indirectement peut rester sur le serveur Faut il manipuler des objets ou des identificateurs Granularit des mthodes des sessions bean Co-localisation des beans