35
Une introduction aux Enterprises Java Bean Michel RIVEILL – Université de Nice – Sophia Antipolis http://www.polytech.unice.fr/~riveill - [email protected] 2 © 2006, M. Riveill Cours très complet… Plus de 500 transparents Que nous allons faire d’une manière incomplète Nous 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 JavaBeans Standard industriel pour un modèle de composant logiciel distribué, 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,

Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

  • Upload
    tranthu

  • View
    217

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

Une introduction auxEnterprises Java Bean

Michel RIVEILL – Université de Nice – Sophia Antipolishttp://www.polytech.unice.fr/~riveill - [email protected]

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,

Page 2: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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.

Page 3: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 4: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 5: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 6: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 7: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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, …

Page 8: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 9: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 10: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 11: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 12: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 13: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 14: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 15: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 16: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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.

Page 17: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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 !

Page 18: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 19: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 20: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 21: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 22: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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;}

Page 23: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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();…

Page 24: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 25: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 26: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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();

}}

Page 27: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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.

Page 28: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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.

Page 29: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 30: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 31: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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

Page 32: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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){}

}

Page 33: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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…

Page 34: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

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()…

Page 35: Une introduction aux Enterprises Java Bean - i3s.unice.frriveill/mes-cours/serveurs-entreprises/javaee/... · Il est possible d'acheter ou de réutiliser une partie de ... Simple

Introduction aux Entity Beans