une introduction aux enterprises java bean -...
Post on 02-May-2018
219 Views
Preview:
TRANSCRIPT
Une introduction auxEnterprises Java Bean
Michel RIVEILL – Université de Nice – Sophia Antipolishttp://www.polytech.unice.fr/~riveill - riveill@unice.fr
2© 2006, M. Riveill
Cours très complet…Plus de 500 transparents
Que nous allons faire d’une manière incomplèteNous allons en regarder uniquement une 100 aines
Nombreux transparents masqués
Mais visible dans version pdf par 4
Pour nous arrêté uniquement sur les principes de base
3© 2006, M. Riveill
Les promesses des EJB
Enterprise JavaBeansStandard industriel pour un modèle de composant logicieldistribué,
Permet d'implémenter des "objets métier" d'une manière propre et réutilisable,
Pour le développement RAD d'applications côté serveur
Fait partie des spécifications J2EE
4© 2006, M. Riveill
Motivation des EJBs
Considérons :un site de gestion de portefeuille boursier,
une application bancaire,
un centre d'appel,
un système d'analyse de risque,
…
5© 2006, M. Riveill
Choses à considérer lorsqu'on construit une application distribuée
Si on prend une application monolithiquePuis
on la transforme en application distribuée,
plusieurs clients se connectent sur plusieurs serveurs
Les serveurs utilisent plusieurs SGBD.
Que faut-il mettre en place ?
6© 2006, M. Riveill
Choses à considérer lorsqu'on construit une application distribuée
Protocoles d'accès distants (CORBA, RMI, IIOP…)Gestion de la charge,Gestion des pannes,Persistence, intégration au back-end,Gestion des transactions,Clustering,Redéploiement à chaud,Arrêt de serveurs sans interrompre l'application,Gestion des traces, règlages (tuning and auditing),Programmation multithreadProblèmes de nommageSecurité, performances, Gestion des étatsCycle de vie des objetsGestion des ressources (Resource pooling)Requête par message (message-oriented midddleware)
7© 2006, M. Riveill
Qui s'occupe de tout ceci : l’intergiciel (middleware) !
Dans le passé, la plupart des entreprises programmaient leur propre intergiciel
Qui adressaient rarement tous les problèmes,Qui demandait des compétences spécifiques,
Différentes du secteur d'activité de l'entreprise (banque, commerce…)Difficulté de développement, de maintenance
Aujourd’hui, les entreprises achètent un produitOracle, IBM, BEA, …
proposent depuis plusieurs années des solutions…Il y a aussi plusieurs proposition ‘libre’
Consortium ObjectWeb (Bull, France Telecom et l’INRIA)
Aujourd’hui les intergiciels intègrent : le web, l’accès aux données…serveurs d'application.
8© 2006, M. Riveill
Serveur d'application : mutualiser les compétences !
Un serveur d'application fournit les services intergiciels les plus courants,
Transaction, sécurité, cycle de vie, …
Permettent de se focaliser sur l'application que l'on développe, sans s'occuper du reste.Le code est déployé sur le serveur d'application.Séparation des métiers et des spécificités :
d'un côté la logique métier,
de l'autre les aspects techniques.
9© 2006, M. Riveill
Serveurs d'application : construction des applications selon le modèle 3-parties
HTML
JavaApplication
Business LogicBusiness Logic
DistributedObjects
Transactions
ContentManagement
Scalability Reliability Security Manageability
Enterprise Deployment Services
Development Tools
PresentationPresentation
Java
HTML
Data
Data AccessData Access
Enterprise DataConnectors
Data AccessObjects
10© 2006, M. Riveill
Encore mieux ! Utilisons des composants
Il est possible d'acheter ou de réutiliser une partie de la logique métier !
Vous développez votre application à l'aide de composants.
Code qui implémente des interfaces prédéfinies.Sorte de boîte noire.Un bout de logique facilement réutilisable.Un composant n'est pas une application complète.
Juste un bout.On assemble les composants comme un puzzle, afin de résoudre des problèmes importants.
Et on les configure pour les adapter au problème à résoudre
11© 2006, M. Riveill
Composant logiciel réutilisable
Une entreprise peut acheter un composantOn parle alors de COTS
et l'intégrer avec des composants qu'elle a développé.Par exemple, un composant qui sait gérer des prix.
On lui passe une liste de produits et il calcule le prix total.
Simple en apparence,
mais la gestion des prix peut devenir très complexe :remises,promotions,lots,clients privilégiés,règles complexes en fonction du pays,des taxes,etc…
12© 2006, M. Riveill
Composant logiciel réutilisable
Ce composant répond à un besoin récurrentVente en ligne de matériel informatique,
Gestion des coûts sur une chaîne de production automobile,
Facturation interne à une entreprise,
Etc…
13© 2006, M. Riveill
Composant logiciel réutilisable
14© 2006, M. Riveill
Composant logiciel réutilisable
15© 2006, M. Riveill
Composant logiciel réutilisable
16© 2006, M. Riveill
Quel intérêt ?
Moins d'expertise requise pour répondre à certains points du cahier des charges,Développement plus rapide.Normalement, les vendeurs de composants assurent un service de qualité (BEA, IBM…)Réduction des frais de maintenance.Naissance d'un marché des composants.
Pas encore l'explosion attendue mais…
17© 2006, M. Riveill
Architectures de composants
Plus de 50 serveurs d'applications ont vu le jour depuis une dizaine d'années,Au début, composants propriétaires uniquement.
Pas de cohabitation entre composants développés pour différents serveurs d'applicationDépendant d'un fabriquant une fois le choix effectué.
Dur à avaler pour les développeurs java qui prônent la portabilité et l'ouverture !
18© 2006, M. Riveill
Architectures de composants
Nécessité de standardiser la notion de composantsEnsemble de définitions d'interfaces entre le serveur d'application et les composants
Ainsi n'importe quel composant peut tourner ou être recompilé sur n'importe quel serveur
Un tel standard s'appelle une architecture de composants
Penser aux CDs audio, à la télé, au VHS, etc…
19© 2006, M. Riveill
Architecture à composants
Qu’est-ce qui est important pour définir un composant ?
Plusieurs réponses possiblesJava BeansCCM.Net componentsJ2EE components
La notion de composants est en train de dérivé vers la notion de services
La aussi plusieurs réponses possibleServices Web
20© 2006, M. Riveill
Enterprise JavaBeans (EJB)
Le standard EJB http://java.sun.com/products/ejb/index.html
EJB est une architecture de composants pour des composants serveur écrits en java.
Adopté par l'industrie. "Train once, code anywhere"
Portable facilement
Rapid Application Development (RAD)
Attention : EJB != Java BeansJava beans = composants côté client
http://java.sun.com/docs/books/tutorial/javabeans/index.html
21© 2006, M. Riveill
Enterprise Java Beans
EJB signifie deux choses :Une spécification
Un ensemble d'interfaces
Permet la création d’applications réparties selon l’architecture 3 parties
interface
Traitement – c’est la partie concernée par les EJB
persistance
Le composant de traitement est exécuté sur un serveur et il est appelé par un client généralement distant
22© 2006, M. Riveill
Enterprise JavaBeans
Cahier des chargesRendre une application
facile à développer, déployer et administrer
indépendamment de la plate-forme permettant son exécution
Favoriser la réutilisationUn EB (EnterpriseBean) n’est pas spécifique de la plate-forme dans laquelle il est utilisé
Accélerer le déploiementLe déploiement d’un EB se fait sans recompilation ou modification du code source
23© 2006, M. Riveill
La plate-forme Java J2EE
Les EJB ne sont qu’une partie de la spécification J2EE
J2EE = architecture distribuée en javaPour le développement d'application serveur
Ensemble de spécifications et d'APIs
Java contient deux autres architectures
1. J2ME (Java 2 Micro Edition) : pour les mobiles2. J2SE : pour applications et applets standards
Non attaché à un vendeur particulier.
Quiconque respecte les spécification est "J2EE compliant"
Applications développées indépendantes des vendeurs d'outils.
24© 2006, M. Riveill
La plate-forme Java J2EE
Chaque API dans J2EE à sa propre spécification (PDF)Batterie de logiciels pour valider les implémentations
test suites
Implémentation de référenceJ2EE est livrée avec un serveur d'application qui sert d’exemple…
Ensemble de "blueprints«Définit précisément le rôle de chaque API (PDF)
Donne des conseils pour construire une application et utiliser l’architecture
25© 2006, M. Riveill
J2EE : les APIs
J2EE comprend en plus de J2ME et J2SEEJB : standard de définition de composantsJava 2 RMI et RMI-IIOP : objets distribuésJNDI (Java Naming and Directory Interface)JDBC (Java Data Base Connectivity)JTA (Java Transaction API)JMS (Java Messaging Service)Java Servlets and Java Pages (JSP)Java IDL (Corba)JavaMailJCA (J2EE Connector Architecture) : ponts vers SAP/3, CICS…JAXP (Java API for XML Parsing)JAAS (Java Authentification and Authorization Service)
26© 2006, M. Riveill
Plate-forme Enterprise Java
Composants Java beans
Plate-forme EJB(Conteneur + Serveur)
Plate-forme Serveur (Unix, NT) + JVM + JDK
JTA
Composants Enterprise Java Beans
...JNDIJMS
JDBC
RMI (JRMP, IIOP)
...
27© 2006, M. Riveill
Consistent, Integrated Architecture
Scalability Reliability Security Manageability
JTS/JTA JNDI JavaMail RMI-IIOP JMS
PresentationPresentation
Servlets/JSP
On DemandJava
Business LogicBusiness Logic
EJB
Triggers
ContentManagement
Data AccessData Access
JDBC 2.0
Enterprise DataConnectors
Visual Servlets Data AccessObjects
Enterprise Deployment Services
Distributed Data Cache
Development and Deployment ToolsDevelopment and Deployment Tools
HTML
JavaApplication
Data
28© 2006, M. Riveill
EJBCaractéristiques principales
L’architecture EJB identifie les éléments suivants :composants logiciels ou beans (EB),conteneurs,serveurs,clients.
Les conteneurs isolent les beans du client et d’une implémentation spécifique d’un serveur
Rappel : les beans sont dans la partie serveur
Conteneurs et serveurs implémentent les mécanismes de bas niveau utilisés par les applications
transactions, persistance, gestion mémoire, …
29© 2006, M. Riveill
EJBCaractéristiques principales
EJB s’intéresse aux activités liées au développement, au déploiement et à l’exécution d’une applicationEJB définit différents rôles associés aux différentes parties intervenant dans la production d’une applicationEJB définit des contrats associés à un bean
Ces contrats sont passés entre le conteneur et les clients qui utilisent le bean.
=> ce sont des règles (obligations) qui doivent être respectées par le fournisseur de l’EB et de conteneur
30© 2006, M. Riveill
L’écosystème des EJBsMise en évidence de différents rôles
Fournisseur d’EB
Assembleur d’application
L’installateur
Fournisseur de conteneur EJB
Fournisseur de serveur EJB
Développementde l’application
Enterprise Bean (EB)
Application
Conteneur
Serveur
Déploiementet exécution
ProduitUtilise
Développementdu serveur
EJB
31© 2006, M. Riveill
L'écosystème EJB
Pour déployer et exécuter un projet à base d'EJBs, six métiers sont impliqués1 - Le fournisseur d'EJBs
Peut-être un membre de votre équipe, ou bien une entreprise qui vend des EJBs (www.componentsource.com ou www.flashline.com pour voir une liste)
32© 2006, M. Riveill
L'écosystème EJB
2 - L'assembleur d'applicationIl s'agit de l'architecte de l'applicationIl est client des EJBs achetées ou développéesIl décide de la combinaison de composants dont il a besoinFournit un GUI à l'applicationConçoit et développe de nouveau composantsConçoit et développe les programmes clientsDéfinit le mapping avec les données manipulées par les différents composantsEn général, c'est un expert en Génie Logiciel, en UML et en développement Java.Il peut s'agir d'un intégrateur de systèmes, d'un consultant, d'une équipe de développeurs/concepteurs maison…
33© 2006, M. Riveill
L'écosystème EJB
3 - Le déployeur d'EJBsAprès que l'application ait été assemblée, elle doit être déployée sur un ou plusieurs serveurs d'applicationAttention à la sécurité (firewall, etc…)Branchement de services annexes (LDAP, Lotus Notes, Microsoft Active Directory, etc…) sur le serveur d'applications.Choix du hardware, des SGBD, etc…Paramétrage du serveur d'application, optimisation des performances…Il adapte les composants et le serveur à l'applicationIl peut être une équipe ou une personne, un consultant ou un vendeur d'hébergement de serveurs d'applications. Exemples aux USA : www.hostJ2EE.com ou www.loudcloud.com
34© 2006, M. Riveill
L'écosystème EJB
4 - L'administrateur systèmeVérifie le bon fonctionnement de l'application en exploitation.
Il utilise les outils de monitoring des serveurs d'application.
Il effectue la maintenance hardware et software (lancement, arrêt) du système.
Certains serveurs d'application savent téléphoner et appeler l'administrateur système en cas de problème.
Ponts avec les outils de Tivoli, Computer Associates, … via JMX.
35© 2006, M. Riveill
L'écosystème EJB
5 - Le fournisseur du serveur d'application et des containers
EJB container = environnement au sein du serveur dans lequel lesEJB vivent.Le container EJB fournit les services middleware et manage les EJBs.Exemples : Weblogic, Websphere, BES, Oracle Orion Server, JRun, JBoss…Il existe d'autre containers spécialisés (container Web comme Tomcat, Resin…)Le fournisseur du serveur d'application est le même que le fournisseur de containers EJB.On confond en général container et serveur d'application.
36© 2006, M. Riveill
L'écosystème EJB
6 - Les vendeurs d'outilsDévelopper une application à base d'EJB est assez lourd. Pourtant la manière de développer, construire, maintenir, déployer les EJBsest standard.
Il est très pratique d'utiliser un IDE pour simplifier les tâches répétitives comme le déploiement, etc…
Principaux IDEs : JBuilder, Visual Age, Visual Cafe.
Autres outils : les outils UML comme Together/J, Rational Rose
Outil de test (JUnit), de stress (LodeRunner), etc…
37© 2006, M. Riveill
Les différents métiers…
Bientôt un nouveau métier : le "persistence manager"Développe des outils qui se "branchent" sur le serveur d'application et implémentent les mécanismes de persistance.
Mapping BD relationnelles/Objets
Mapping BD objet/Objets
Etc…
38© 2006, M. Riveill
La spécification EJB défini plusieurs contrats
Nécessaire Garantir la complémentaritédes différents métiers
Garantir la portabilité du code
Fournir un modèle de développement uniforme pour les applications qui utilisent les composants EB
client
EnterpriseBean
EBJ conteneur
Contratconteneur
EJB serveur
Contratclient
Fichier ejb-jar
Contratparckaging
39© 2006, M. Riveill
La spécification EJB défini plusieurs contrats
Contrat coté clientfournir une vue uniforme du bean au client.
vue est indépendante de la plate-forme de déploiement
client
EnterpriseBean
EBJ conteneur
Contratconteneur
EJB serveur
Contratclient
Fichier ejb-jar
Contratparckaging
40© 2006, M. Riveill
EJBLe contrat coté client
Un client accède toujours à un bean par son interfaceLocaliser le bean
utilisation de JNDI
Utiliser le beanutilisation de l’interface standard fournie par l’EB provider
Home Interface (méthodes liées à la gestion du bean : create, remove, finder, ...)Remote Interface (méthodes de l’application)
Le container implémente le mécanisme de délégation permettant de “faire suivre” l’appel au bean
le client ne communique pas directement avec le bean mais avec le container
41© 2006, M. Riveill
La spécification EJB défini plusieurs contrats
Contrat coté conteneurpermettre la portabilité des beans sur différents serveurs EJB
client
EnterpriseBean
EBJ conteneur
Contratconteneur
EJB serveur
Contratclient
Fichier ejb-jar
Contratparckaging
42© 2006, M. Riveill
EJBLe contrat du “conteneur”
L’EJB conteneur permetgestion du cycle de vie, gestion de l’état, sécurité, transaction distribuée, concurrence, extensibilité
ces services appellent des méthodes fournies par le bean (callback methods)
Les conteneurs gèrent plusieurs types de beanspropriétés et cycle de vie différent selon la nature du Bean
Avec ou sans étatAvec ou sans données persistantesCommunication par appel de méthode ou envoie de message
43© 2006, M. Riveill
La spécification EJB défini plusieurs contrats
Contrat coté “packaging”(ejb-jar file)
fournir un format de fichier standard pour “packager” les beans. Ce format doit être supporter par tous les outils liés aux EJB
client
EnterpriseBean
EBJ conteneur
Contratconteneur
EJB serveur
Contratclient
Fichier ejb-jar
Contratparckaging
44© 2006, M. Riveill
Enterprise Beanen résumé
Composant serveur qui peut être déployéComposé de un ou plusieurs objetsLes clients d'un Bean lui parlent au travers d'une interfaceCette interface, de même que le Bean, suivent la spécification EJBCette spécification requiert que le Bean expose certaines méthodes
45© 2006, M. Riveill
Enterprise Bean
Le client d'un Bean peut êtreUne servlet
Une applet
Une application classique
Un autre Bean
On peut décomposer une application en un graphe de tâches/sous-tâchesExemple : achat d'un CD à partir du code-barre
Scanner (qui a une JVM embarquée) client d'un Bean sur le Serveur
Ce Bean client d'autres Beans : gestion de catalogue, de commandes, de gestion de transaction VISA, etc…
Modèle flexible, extensible…
46© 2006, M. Riveill
3 types de Beans : Session Bean
Session BeansModélisent un traitement (business process)
Correspondent à des verbes, à des actions
Ex : gestion de compte bancaire, affichage de catalogue de produit, vérifieur de données bancaires, gestionnaire de prix…
Les actions impliquent des calculs, des accès à une base de données, consulter un service externe (appel téléphonique, etc.)
Souvent clients d'autres Beans
47© 2006, M. Riveill
3 types de Beans : Entity Bean
Entity beansModélisent des données
Correspondent à des noms
Ex : un Bean Personne, un Bean compte bancaire, un Bean produit, un Bean commande.
Ce sont des objets java qui cachent des données d'une base de données
Ils sont persistantsServent de proxy entre la logique métier et les base de donnéesPermettent le mapping d’une base de donnée relationnelle dans un langage à objets
Sont très souvent utilisé par des Beans Session
Rarement par un client
48© 2006, M. Riveill
3 types de Beans : Message-DrivenBean
Message-Driven BeansNouveau dans EJB 2.0,
Similaire aux Session bean : représentent des verbes ou des actions,
On les invoque en leur envoyant des messages,
Ex : message pour déclencher des transactions boursières, des autorisations d'achat par CB,
Souvent clients d'autres beans…
49© 2006, M. Riveill
Exemple de Session/Entity bean
Commande, Produit, ligne de commande
Gestion d'achats
Enchère, ProduitGestionnaire d'enchères
ProduitsGestion de catalogue
Commande, ligne de commandeSystème d'entrée gestion de commandes
Carte de créditVérificateur de CB
Compte bancaireGestion de compte
Entity BeanSession Bean
50© 2006, M. Riveill
3 types de Beans : pourquoi ?
Pas d'Entity Beans dans les solutions Microsoft par exemple…
DataSet est l’objet qui s’en rapproche le plus
Nombreuses compagnies impliquées dans les standards EJB/J2EE
Leurs clients ont des besoins variés,
Solution proposée flexible mais plus complexe,
Standard EJB plus difficile à apprendre,
Risque de mauvaise utilisation mais…
On est gagnant sur le long terme.
51© 2006, M. Riveill
Clients interagissant avec un serveur à base d'EJBs
52© 2006, M. Riveill
Les objets distribués au cœur des EJBs
53© 2006, M. Riveill
Les objets distribuéset l’intergiciel (middleware)
Lorsqu'une application devient importante, des besoins récurrents apparaissent : sécurité, transactions, cycle de vie, etc…C'est là qu'intervient l’intergiciel (middleware) !Deux approches
Intergiciel explicite,
Intergiciel implicite
54© 2006, M. Riveill
Intergiciel explicite
55© 2006, M. Riveill
Intergiciel explicite
ExpliciteC’est le composant qui appelle les services techniques
Exemple :transfert d'un compte bancaire vers un autretransfert(Compte c1, Compte c2, long montant)
Appel vers l'API middleware qui fait une vérification de sécurité,Appel vers l'API de transaction pour démarrer une transaction,Appel vers l'API pour lire des lignes dans des tables d'une BD,Faire le calcul : enlever de l'argent d'un compte pour le mettredans l'autreAppeler l'API pour mettre à jour les lignes dans les tables,Appeler l'API de transaction pour terminer la transaction.
56© 2006, M. Riveill
Intergiciel explicite
Difficile à écrire,Difficile à maintenir,Votre code est dépendant des API du vendeur de middleware que vous utilisez
La portabilité est loin d’être acquise
57© 2006, M. Riveill
Intergiciel implicite
Le principe de mise en oeuvre
InterpositionObject, Home et descripteurs
59© 2006, M. Riveill
Constitution d'un EJB : Enterprise Bean class
La classe du Bean (Enterprise Bean class)Une classe qui implémente une interface précise et qui respecte certaines règles,
Il s'agit de l'implémentation du bean lui-même,
Session Bean : logique métier, calculs, transfert de compte bancaire, saisie de commandes, etc…Entity Bean : logique orientée donnée, par exemple comment changer le nom d'un client, diminuer un compte bancaire…Message-Driven Bean : logique orientée message, traitement après réception d'un ordre d'achat d'actions boursières…
60© 2006, M. Riveill
Constitution d'un EJB : Enterprise Bean class
Interfaces implémentées par la classe du BeanTous les beans implémentent javax.ejb.EnterpriseBean
Juste un marqueur,
Important
Cette interface dérive de SerializableSera utilisé pour ‘passivé’ / ‘activé’ le bean
Chaque type de bean implémente des interfaces plus spécifiques :
Javax.ejb.SessionBeanJavax.ejb.EntityBeanJavax.ejb.MessageDrivenBean
61© 2006, M. Riveill
Constitution d'un EJB : EJB Object
Les clients n'invoquent jamais directement les méthodes de la classe du BeanLes appels de méthodes (requests) sont interceptés par le Container, afin d'assurer le traitement middleware implicite,Une fois ce traitement effectué, le container appelle les méthodes de la classe du BeanLe développeur de composant se concentre sur la logique, ignore la partie intergiciel
Et donc les appels aux services technique
62© 2006, M. Riveill
Constitution d'un EJB : EJB Object
Que se passe-t-il lors de l'interception ?Prise en compte des transactions,Sécurité : le client est-il autorisé ?Gestion des ressources + cycle de vie des composants : threads, sockets, connexions DB, pooling des instances (mémoire),Persistance,Accès distant aux objets,Threading des clients en attente,Activation / passivation,Clustering,Monitoring : statistiques, graphiques temps réel du comportement du système……
63© 2006, M. Riveill
Constitution d'un EJB : EJB Object
Container = couche d'indirection entre le client et le beanCette couche est matérialisée par un objet unique : l'EJB Object
64© 2006, M. Riveill
Constitution d'un EJB : EJB Object
L'EJB Object contient du code spécifique au container (vendeur-dépendant)Il appelle les méthodes de la classe du Bean,Il est généré par le container !Chaque container est livré avec des outils pour générer les EJB Object pour chaque Bean.
65© 2006, M. Riveill
EJB Server
EJB Container
EJ BeanEJ BeanEJ Bean
EJ BeanEJ BeanEJ Bean
Container EJB
ServeurEJB
• Code simple
• Génération du code àpartir du Bean
• Le code généré fournitTransactions, Securité, Persistance, AccèsDistant, Gestion des ressources, etc.
• Fournit les services au container
EJB : classe du Bean et EJB Object
66© 2006, M. Riveill
ServeurEJB
ContainerEJB
EJ BeanEJ BeanEJ Bean
EJ BeanEJ BeanEJ Bean
Container EJB
• Utilisation du descripteurde déploiement (fournipar l'auteur du Bean)
• Paramètres de déploiement = securité, mappings objets/BD relationelle, etc.)
• Génération du code pour intégrer le bean dans le container, ajout du ‘plumbing’ (persistance, securité, etc…)
Code généré
EJB Object : génération du code
67© 2006, M. Riveill
Constitution d'un EJBl'interface distante
Les clients invoquent les méthodes des EJB Objects,Ces EJB Objects doivent cloner toutes les méthodes que le bean expose,Comment l'outil qui génère l'EJB Object peut-il connaître la liste des méthodes à cloner ?Réponse : il utilise une interface fournie par le programmeur du bean, l'interface distante
68© 2006, M. Riveill
Constitution d'un EJBl'interface distante
Le programmeur du Bean dérivera son interface distante de javax.ejb.EJBObject,Rajoutera les signatures des méthodes qu'il souhaite exposer,L'EJB Object sera généré par le container !Presque rien à faire pour le développeur de bean !
69© 2006, M. Riveill
Constitution d'un EJBHome Object
Nous avons vu comment les clients appelaient les méthodes d'un Bean : via l'EJB Object.Mais comment obtiennent-ils une référence sur l'EJB Object ?En effet : pas d'instanciations lorsque on travaille avec des objets distants !Solution : le client demande la référence à une fabrique d'EJB Objects (EJB Object Factory)
Design pattern que vous avez sûrement utilisé dans le cadre de Java RMI
70© 2006, M. Riveill
Constitution d'un EJBHome Object
L'EJB factory est responsable de l'instanciation et de la destruction des EJB Objects.La spécification EJB appelle cette factory un Home Object.Responsabilités du Home Object
Créer les EJB Objects,
Trouver les EJB Objects existants (Entity beans seulement)
Supprimer les EJB Objects.
71© 2006, M. Riveill
Constitution d'un EJBHome Object
Comme les EJB Objects, les Home Objects sont générés par le container
Contiennent du code spécifique,
Assurent le load-balancing, etc…
72© 2006, M. Riveill
Constitution d'un EJB : l'interface Home
Comme pour les EJB Objects, le développeur du bean doit spécifier une interface HomeL'interface Home définit
Les méthodes pour créer, détruire et localiser les EJB Objects
Le Home Object (généré par le container) implémente cette interface.
L'interface fournie par le développeur dérive de javax.ejb.EJBHome
Javax.ejb.EJBHome dérive de java.rmi.Remote
Les Home objects sont aussi des objets distants, compatibles RMI-IIOP
73© 2006, M. Riveill
Constitution d'un EJB
Attention : la création de bean et l'appel de méthode distante coûtent cher !
74© 2006, M. Riveill
Constitution d'un EJBles interfaces locales
Commentaires sur la figure précédenteLe client appelle un stub (souche),
Le stub encode les paramètres dans un format capable de voyager sur le réseau,
Le stub ouvre une connexion sur le skeleton (squelette),
Le skeleton décode les paramètres,
Le skeleton appelle l'EJB Object,
L'EJB Object effectue les appels middleware,
L'EJB Object appelle la méthode du bean,
Le Bean fait son travail,
On fait le chemin inverse pour retourner la valeur de retour vers le client !
…Sans compter le chargement dynamique des classes nécessaires !
75© 2006, M. Riveill
Constitution d'un EJBles interfaces locales
Pour améliorer les performances… dans le cadre d’appels locauxNouveau dans EJB 2.0 : les interfaces locales.Introduit la notion de Local Object, en remplacement de EJB ObjectLes Local Objects implémentent une interface locale au lieu d'une interface distanteExemple d'appel de méthode distante
Le client appelle le Local Object,Le Local Object appelle le middleware puis la méthode du beanLa valeur de retour est renvoyée au Local Object, puis au client
76© 2006, M. Riveill
Constitution d'un EJBles interfaces locales
Pour l'appel distant de méthodes, le développeur peut fournir une interface locale, qui sera implémentée par le container en tant que Local Object
A distinguer du cas "normal" (EJB 1.1) ou on a interface distante implémentée par EJB Object
Pour la création/localisation de beans, le développeur peut fournir une interface home interface locale, qui sera implémentée par le container en tant que Home Object local
A comparer avec Home Interface implémentée par le container en tant que Home Object
77© 2006, M. Riveill
Constitution d'un EJBles interfaces locales
Les interfaces locales ne tournent que si les EJB sont dans le même processus (même container),Attention, paramètres et valeurs de retour (lors des appels de méthodes) se passent maintenant par référence
Toujours par valeur dans le cas d'appels distants!
Plus performant mais sémantique différente.
Difficile de passer d'une implémentation locale à une implémentation classique
Aurait pu être fait dans les descripteurs (weblogic)
78© 2006, M. Riveill
Constitution d'un EJBles descripteurs de déploiement
Pour informer le container des besoins ‘intergiciel’, on utilise un descripteur de déploiement (XML)
Standardisé,A l'extérieur de l'implémentation du bean.Attention si on les écrit à la main!Outils d'aide au déploiement : IDEs (Jbuilder, Visual Cafe), outils spécifiques (Borland Application Server, Weblogic 6.1)Descripteurs peuvent être modifiés après le déploiement.
Descripteurs spécifiques au serveur d'applicationChaque vendeur ajoute des trucs en plus : load-balancing, persistance complexe, clustering, monitoring…Dans des fichiers spécifiques (inprise-ejb.xml avec Borland)
79© 2006, M. Riveill
Déploiement : un fichier .jar
80© 2006, M. Riveill
Les EJB en résumé
Enterprise Bean classInterface distante (remote interface)/Interface localeEJB Object/Local ObjectHome interface/Local Home interfaceHome Object/Local Home ObjectDescripteur de déploiement standardDescripteurs spécifiques au vendeurFichier .jar de l'EJB
81© 2006, M. Riveill
Principaux bénéfices
Application complexe “facile” à écriregestion des transaction de manière déclarative
gestion de la persistance
gestion intégré de la sécurité
gestion de la répartition
La plate-forme et le bus logiciel (middleware) sont indépendants des applicationsExtensibilité du modèle
Mon premier Bean…
Hello world… pour faire original
83© 2006, M. Riveill
Comment s'y prendre ?
Ordre typique des opérations1. Ecrire les fichiers .java qui composent le bean,
2. Ecrire le descripteur du bean,
3. Compiler les .java de l'étape 1,
4. Créer un .jar contenant les .class et le descripteur,
5. Deployer le .jar (via outil ou simple copie),
6. Vérifier que le serveur fonctionne et a bien déployé le bean, sinon, vérifier la config,
7. Ecrire, compiler, exécuter un client de test du bean.
84© 2006, M. Riveill
Modèle objet du bean HelloWorld
85© 2006, M. Riveill
L'interface distante
package examples;/*** This is the HelloBean remote interface.** This interface is what clients operate on when* they interact with EJB objects. The container* vendor will implement this interface; the* implemented object is the EJB object, which* delegates invocations to the actual bean.*/
public interface Hello extends javax.ejb.EJBObject {/*** The one method - hello - returns a greeting to the client.*/public String hello() throws java.rmi.RemoteException;
}
86© 2006, M. Riveill
L'interface locale
package examples;/*** This is the HelloBean local interface.** This interface is what local clients operate* on when they interact with EJB local objects.* The container vendor will implement this* interface; the implemented object is the* EJB local object, which delegates invocations* to the actual bean.*/
public interface HelloLocal extends javax.ejb.EJBLocalObject {/*** The one method - hello - returns a greeting to the client.*/public String hello();
}
87© 2006, M. Riveill
L'interface Home
package examples;/*** This is the home interface for HelloBean. This interface* is implemented by the EJB Server's tools - the* implemented object is called the Home Object, and serves* as a factory for EJB Objects.** One create() method is in this Home Interface, which* corresponds to the ejbCreate() method in HelloBean.*/
public interface HelloHome extends javax.ejb.EJBHome {/** This method creates the EJB Object.** @return The newly created EJB Object.*/
Hello create() throws java.rmi.RemoteException,javax.ejb.CreateException;
}88© 2006, M. Riveill
L'interface Home locale
package examples;/*** This is the local home interface for HelloBean.* This interface is implemented by the EJB Server's* tools - the implemented object is called the* local home object, and serves as a factory for* EJB local objects.*/
public interface HelloLocalHome extends javax.ejb.EJBLocalHome {/** This method creates the EJB Object.** @return The newly created EJB Object.*/
HelloLocal create() throws javax.ejb.CreateException;}
89© 2006, M. Riveill
La classe du bean
package examples;/*** Demonstration stateless session bean.*/
public class HelloBean implements javax.ejb.SessionBean {private SessionContext ctx;//// EJB-required methodspublic void ejbCreate() { System.out.println("ejbCreate()"); }public void ejbRemove() { System.out.println("ejbRemove()"); }public void ejbActivate() { System.out.println("ejbActivate()"); }public void ejbPassivate() { System.out.println("ejbPassivate()"); }public void setSessionContext(javax.ejb.SessionContext ctx) { this.ctx = ctx;}//// Business methodspublic String hello() {
System.out.println("hello()");return "Hello, World!";
}}
90© 2006, M. Riveill
La classe du bean
ejbCreate()correspond au create() de l'interface Home
Une seule méthode métier : hello()On la retrouve dans les interfaces distante et locales.
ejbActivate() et ejbPassivate() n'ont pas d'utilité dans le cas de session bean stateless
Elles sont vides.
Etudiées plus tard.
91© 2006, M. Riveill
Les EJBContexts : le lien avec le container
Sert à encapsuler le domaine dans lequel évolue le bean dans un objet.setSessionContext() appelé par le container.Un contexte par type de Bean
SessionContext, EntityContext, MesageDrivenContext
Méthodes correspondantes
setSessionContext(),setEntityContext(),setMessageDrivenBeanContext()
92© 2006, M. Riveill
Les EJBContexts : le lien avec le container
Tous les contextes implémentent
public interface javax.ejb.EJBContext {/*
* Call these from within your bean to access
* your own home object or local home object.
*
* You can use them to create, destroy, or
* find EJB objects and EJB local objects
* of your own bean class type.
*/
public javax.ejb.EJBHome getEJBHome();public javax.ejb.EJBLocalHome getEJBLocalHome();…
93© 2006, M. Riveill
Les EJBContexts : le lien avec le container
...
/*
* These are transaction methods – sera vu plus tard ☺
*/
public boolean getRollbackOnly();public void setRollbackOnly();public javax.transaction.UserTransaction getUserTransaction();
/*
* These are security methods – ne sera pa vu
*/
public boolean isCallerInRole(java.lang.String);public java.security.Principal getCallerPrincipal();
}
94© 2006, M. Riveill
Les EJBContexts : le lien avec le container
95© 2006, M. Riveill
Le descripteur de déploiement
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
<ejb-jar><enterprise-beans><session><ejb-name>Hello</ejb-name><home>examples.HelloHome</home><remote>examples.Hello</remote><local-home>examples.HelloLocalHome</local-home><local>examples.HelloLocal</local><ejb-class>examples.HelloBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session>
</enterprise-beans></ejb-jar>
96© 2006, M. Riveill
Le descripteur de déploiement spécifique
Selon les serveurs d'application, il peut y avoir un descripteur en plus, spécifique.Voir pendant les exercices…
Nous allons utiliser Jonas
Et il y a un container spécifique
97© 2006, M. Riveill
Le fichier .jar de l'EJB
Il faut mettre tous les fichiers compilés+ descripteurs
dans un .jar
A faire depuis un IDE ou à la mainjar cf HelloWorld.jar *
Contenu de HelloWorld.jarMETA-INF/MANIFEST.MF
META-INF/ejb-jar.xml
examples/HelloBean.class
examples/HelloLocalHome.class
examples/HelloHome.class
examples/HelloLocal.class
examples/Hello.class
98© 2006, M. Riveill
Déployer le bean
Cette étape varie selon le containerSimple copie dans un répertoire spécifique avec JBoss,
A l'aide d'un outil de déploiement spécifique avec Jonas
Lors du déploiementVérification du fichier.jar,
Le container génère les EJBObjects et EJBHome,
Le container génère les stubs et skeletons pour les appels RMI-IIOP.
Vérifier le déploiementLe serveur doit vous avertir qu'il a bien chargé le bean.
99© 2006, M. Riveill
Écriture d'un client
Deux types de clientsClients JAVA RMI-IIOP : ils utilisent JNDI pour localiser les objets et Java Transaction API pour contrôler les transactions.
Clients CORBA : par exemple écrits en C++… Ils utilisent COS Naming Service et Object Transaction Service (OTS) pour les transactions…
Quel que soit le clientLocaliser (lookup) un objet Home,
Utiliser cet objet Home pour créer (create) un EJBObject,
Appeler les méthodes de l'EJBObject,
Supprimer (remove) l'EJBObject.
100© 2006, M. Riveill
Client : localiser (lookup) un objet Home,
On ne sait pas où se trouve l'objet…Utilisation de JNDI
JNDI sert à lier des ressources sur des noms logiques : utilisateurs, services, imprimantes, EJB, Datasource (base de données)…
JNDI est un pont vers des services d’annuaire tels que LDAP, Microsoft Active Directory, Lotus Notes Domino Server, iPlanetDirectory Server…
JNDI permet de rendre transparente la localisation des objets…
101© 2006, M. Riveill
Client : les étapes en images
102© 2006, M. Riveill
Client : le code
package examples;
import javax.naming.Context;import javax.naming.InitialContext;import java.util.Properties;
/*** This class is an example of client code which invokes* methods on a simple stateless session bean.*/
public class HelloClient {public static void main(String[] args) throws Exception {
/* Setup properties for JNDI initialization.* These properties will be read-in from* the command-line. */Properties props = System.getProperties();…
103© 2006, M. Riveill
Client : le code
…/* Obtain the JNDI initial context.* The initial context is a starting point for* connecting to a JNDI tree. We choose our JNDI* driver, the network location of the server, etc* by passing in the environment properties. */
Context ctx = new InitialContext(props);…
104© 2006, M. Riveill
Client : le code
.../* Get a reference to the home object - the* factory for Hello EJB Objects */Object obj = ctx.lookup("HelloHome");/* Home objects are RMI-IIOP objects, and so* they must be cast into RMI-IIOP objects* using a special RMI-IIOP cast.* See Appendix X for more details on this. */HelloHome home = (HelloHome)
javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class);/* Use the factory to create the Hello EJB Object */Hello hello = home.create();/* Call the hello() method on the EJB object. The* EJB object will delegate the call to the bean,* receive the result, and return it to us.* We then print the result to the screen. */System.out.println(hello.hello());/* Done with EJB Object, so remove it.* The container will destroy the EJB object. */hello.remove();
}}
105© 2006, M. Riveill
Exécution du client de test
Place aux exercices !!!!A faire en TP lors de la première séance pour vérifier que vous avez bien compris
Tiens, une questionque représente le mot-clé this pour un EJB ?
Introduction aux Session Beans
107© 2006, M. Riveill
Session Bean : rappel
Un Session Bean représenteune action, un verbe,
une logique métier, un algorithme,
Un enchaînement de tâches…
ExemplesSaisie d'une commande,
Compression vidéo,
Gestion d'un caddy, d'un catalogue de produits,
Transactions bancaires…
108© 2006, M. Riveill
Durée de vie d'un Session Bean
Durée de vie = la sessionEn gros, le temps qu'un client reste connecté sur le bean.
Dans une logique e-commerce, le temps qu'un utilisateur est connecté sur le site.
Le container crée une instance lorsqu'un client se connecte sur le Session Bean.Il peut le détruire lorsque le client se déconnecte.Les Session Beans ne résistent pas à des crashes du serveur.
Ce sont des objets en mémoire, non persistants.
Le contraire des Entity Beans que nous verrons plus tard.
109© 2006, M. Riveill
Types de Session Beans
Chaque EJB a un moment donné entretient une conversation avec un client.
Conversation = suites d'appels de méthodes.
Il existe deux types de Session Beans1. Stateful Session Beans,
2. Stateless Session Beans.
Chacun modélisant un type particulier de conversation.
110© 2006, M. Riveill
Stateful Session Beans
Certaines conversations se déroulent sous forment de requêtes successives.
Exemple : un client surfe sur un site de e-commerce, sélectionne des produits, remplit son caddy…
D'une requête HTTP à l'autre, il faut un moyen de conserver un état (le caddy par ex.)
Autre exemple : une application bancaire. Le client effectue plusieurs opérations. On en va pas à chaque fois lui redemander son No de compte…
111© 2006, M. Riveill
Stateful Session Beans
En résumé, un Stateful Session Bean est utile pour maintenir un état pendant la durée de vie du client
au cours d'appels de méthodes successifs.
Au cours de transactions successives.
Si un appel de méthode change l'état du Bean, lors d'un autre appel de méthode l'état sera disponible.
Conséquence : une instance de Stateful Session Bean par client.Avec certains containers, les Stateful Session Beanspeuvent être persistants (BAS/BES…) par sérialisation.
112© 2006, M. Riveill
Stateless Session Beans
Certaines conversations peuvent se résumer à un appel de méthode, sans besoin de connaître l'état courant du Bean
Ex : simple traitement, simple calcul (validation de No de CB), compression…
Le client passe toutes les données nécessaires au traitement lors de l'appel de méthode.
Le container est responsable de la création et de la destruction du Bean
Il peut le détruire juste après un appel de méthode, ou le garder en mémoire pendant un certain temps pour réutilisation.
Conséquence : une instance de Stateless Session Bean n'est pas propre à un client donné, elle peut être partagée entre chaque appel de méthode.
113© 2006, M. Riveill
Pooling de Stateless Session Beans
114© 2006, M. Riveill
Pooling des Stateful Session Beans
Le pooling des instances de Stateful Session Beans n'est pas aussi simple…Le client entretient une conversation avec le bean, dont l'état doit être disponible lorsque ce même client appelle une autre méthode.Problème si trop de clients utilisent ce type de Bean en même temps.
Ressources limitées (connexions, mémoire, sockets…)
Mauvaise scalabilité du système,
L'état peut occuper pas mal de mémoire…
Problème similaire à la gestion des tâches dans un OS…
115© 2006, M. Riveill
Pooling des Stateful Session Beans
Avec un OS : on utilise le concept de mémoire virtuelle…Lorsqu'un processus ne fait plus rien (Idle), on swappe son état mémoire sur disque dur, libérant de la place.Lorsqu'on a de nouveau besoin de ce processus, on fait l'inverse.Ceci arrive souvent lorsqu'on passe d'une application à l'autre…
116© 2006, M. Riveill
Pooling des Stateful Session Beans
Avec les Stateful Session Beans on fait pareil !Entre chaque appel de méthode, un client ne fait rien (Idle),
Un utilisateur d'un site de e-commerce lit les infos sur la page www, réfléchit… de temps en temps il clique sur un bouton…
Pendant qu'il ne fait rien, l'état du bean est swappé mais les ressources telles que les connexions BD, sockets, la mémoire intrinsèque qu'il occupe, peuvent être utilisées par un autre client.
Etc…
117© 2006, M. Riveill
Pooling des Stateful Session Beans
Ceci a un coût :l'activation/passivation génère des E/S
Choix du bean à swapper par LRU le plus souvent(Least Recent Used)
Choix du bean à activer : lorsqu'on le demande(just in time)
118© 2006, M. Riveill
En quoi consiste l'état d'un Bean Stateful?
L'état conversationnel d'un bean suit les règles de la sérialisation d'objets en java.
En effet, la passivation (swap de la mémoire d’exécution vers la mémoire de stockage - disque) et l'activation (l'inverse) sont réalisées par sérialisation.
Rappelez-vous que javax.ejb.EnterpriseBeanimplémente java.io.SerializableTous les attributs du Bean non transients sont donc concernés.
119© 2006, M. Riveill
En quoi consiste l'état d'un Bean Stateful?
Sont concernées également tous les attributs issus du container
Références vers EJBObject, EJBHome, EJBContext, contextes JNDI…
120© 2006, M. Riveill
Passivation d'un Stateful Session Bean
121© 2006, M. Riveill
Activation d'un Stateful Session Bean
122© 2006, M. Riveill
Activation/Passivation callbacks
Lorsqu'un bean va être mis en passivationle container l'avertit en appelant sa méthode ejbPassivate()Il peut libérer des ressources (connexions…)
Idem lorsque le bean vient d'être activé,le container appelle ejbActivate()
123© 2006, M. Riveill
Cycle de vie d'un Session Bean stateless
124© 2006, M. Riveill
Cycle de vie d'un Session Bean stateful
Un exemple de statefull session bean
126© 2006, M. Riveill
Count : l'interface distante
package examples;import javax.ejb.*;import java.rmi.RemoteException;/*** These are CountBean ’s business logic methods.** This interface is what clients operate on when they* interact with EJB objects.The container vendor will* implement this interface;the implemented object is* the EJB object,which delegates invocations to the* actual bean.*/public interface Count extends EJBObject {
/*** Increments the int stored as conversational state*/public int count()throws RemoteException;
}
127© 2006, M. Riveill
CountBean : la classe du bean
package examples;import javax.ejb.*;/*** Demonstration Stateful Session Bean.This Bean is initialized* to some integer value,and has a business method which* increments the value.** This example shows the basics of how to write a stateful* session bean,and how passivation/activation works.*/public class CountBean implements SessionBean {
// The current counter is our conversational state.public int val;////Business methods//
128© 2006, M. Riveill
CountBean : la classe du bean
/** Counts up */public int count(){System.out.println("count()");return ++val;
}//// EJB-required methods//public void ejbCreate(int val)throws CreateException {this.val =val;System.out.println("ejbCreate()");
}public void ejbRemove(){System.out.println("ejbRemove()");
}public void ejbActivate(){System.out.println("ejbActivate()");
}public void ejbPassivate(){System.out.println("ejbPassivate()");
}public void setSessionContext(SessionContext ctx){}
}
129© 2006, M. Riveill
CountBean : la classe du bean
Val est serializable, représente l'état du beanLe bean est stateful mais ce n'est précisé nulle part dans le code.setSessionContext(SessionContext)
Appelé par le container,L'objet SessionContext implémente
public interface javax.ejb.SessionContext extends javax.ejb.EJBContext {public javax.ejb.EJBLocalObject getEJBLocalObject();public javax.ejb.EJBObject getEJBObject();
}
Ces deux méthodes permettent de récupérer une référence sur l'EJBObject associé au Bean, remplace le this pour les EJB !
130© 2006, M. Riveill
CountHome : l'interface Home
package examples;import javax.ejb.*;import java.rmi.RemoteException;/*** This is the home interface for CountBean. This interface* is implemented by the EJB Server’s glue-code tools - the* implemented object is called the Home Object, and serves* as a factory for EJB Objects.** One create() method is in this Home Interface, which* corresponds to the ejbCreate() method in the CountBean file.*/public interface CountHome extends EJBHome {
/** This method creates the EJB Object.* @param val Value to initialize counter to* @return The newly created EJB Object.*/Count create(int val) throws RemoteException, CreateException;
}
131© 2006, M. Riveill
ejb-jar.xml : descripteur de déploiement
<!DOCTYPE ejb-jar PUBLIC"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN""http://java.sun.com/dtd/ejb-jar_2_0.dtd"><ejb-jar><enterprise-beans><session><ejb-name>Count</ejb-name><home>examples.CountHome</home><remote>examples.Count</remote><ejb-class>examples.CountBean</ejb-class><session-type>Stateful</session-type><transaction-type>Container</transaction-type></session></enterprise-beans></ejb-jar>
132© 2006, M. Riveill
Descripteur de déploiement propriétaire
Rien de spécial à signaler…Truc intéressant à faire : indiquer au container que l'on ne désire pas plus de deux instances de l'EJB dans le pool.
Si on crée trois Beans, ça va obliger le container à mettre en œuvre le pooling, à swapper l'état d'une instance lors des requêtes…
133© 2006, M. Riveill
Client de l'EJB
package examples;import javax.ejb.*;import javax.naming.*;import java.util.Properties;/** This class is a simple example of client code.* We create 3 EJB Objects in this example, but we only allow* the container to have 2 in memory. This illustrates how* beans are passivated to storage. */public class CountClient {
public static void main(String[] args) {try {/* Get System properties for JNDI initialization */Properties props = System.getProperties();/* Get a reference to the Home Object - the* factory for EJB Objects */Context ctx = new InitialContext(props);CountHome home = (CountHome)javax.rmi.PortableRemoteObject.narrow(
ctx.lookup("CountHome"), CountHome.class);
134© 2006, M. Riveill
Client de l'EJB
/* An array to hold 3 Count EJB Objects */Count count[] = new Count[3];int countVal = 0;/* Create and count() on each member of array */System.out.println("Instantiating beans . . . ");for (int i=0; i < 3; i++) {/* Create an EJB Object and initialize it* to the current count value */count[i] = home.create(countVal);/* Add 1 and print */countVal = count[i].count();System.out.println(countVal);/* Sleep for 1/2 second */Thread.sleep(500);
} // try...
135© 2006, M. Riveill
Client de l'EJB
/* Let’s call count() on each EJB Object to* make sure the beans were passivated and* activated properly. */System.out.println("Calling count() on beans . . . ");for (int i=0; i < 3; i++) {/* Add 1 and print */countVal = count[i].count();System.out.println(countVal);/* Sleep for 1/2 second */Thread.sleep(500);
} // for/* Done with EJB Objects, so remove them */for (int i=0; i < 3; i++) {count[i].remove();
}} catch (Exception e) {e.printStackTrace();
} // try} // main
}
136© 2006, M. Riveill
Exécution du client, déploiement du Bea,n
Sortie clientInstantiating beans . . .123Calling count() on beans . . .234
Sortie serveurejbCreate()count()ejbCreate()count()ejbCreate()ejbPassivate()count()ejbPassivate()ejbActivate()count()ejbPassivate()ejbActivate()count()ejbPassivate()ejbActivate()count()ejbPassivate()ejbActivate()ejbRemove()ejbActivate()ejbRemove()…
Introduction aux Entity Beans
top related