Cours Complet2012
-
Upload
patrick-tanis -
Category
Documents
-
view
214 -
download
0
Transcript of Cours Complet2012
-
7/21/2019 Cours Complet2012
1/369
Enterprise JavaBeans 3.0Introduction gnrale
Michel Buffa ([email protected]), UNSA 2006
mailto:[email protected]:[email protected] -
7/21/2019 Cours Complet2012
2/369
Les promesses des EJB
Enterprise JavaBeans Standard industriel pour un modle de composant logiciel
distribu,
Permet d'implmenter des "objets mtier" d'une manirepropre et rutilisable,
Pour le dveloppement RAD d'applications ct serveur
Questions : De quoi a-t-on besoin lorsqu'on dveloppe une application
distribue oriente objet ? Qu'est-ce que les EJBs et qu'apportent-elles ?
Quels sont les acteurs dans l'cosystme EJB ?
-
7/21/2019 Cours Complet2012
3/369
Motivation des EJBs
Considrons : un site de gestion de portefeuilleboursier, une application bancaire, un centred'appel, un systme d'analyse de risque
Nous parlons ici d'applications distribues.
-
7/21/2019 Cours Complet2012
4/369
Choses considrer lorsqu'on construit
une application distribue
Si on prend une application monolithique etqu'on la transforme en application distribue,o plusieurs clients se connectent sur plusieursserveurs qui utilisent plusieurs SGBD, quelsproblmes se posent alors ?
-
7/21/2019 Cours Complet2012
5/369
Choses considrer lorsqu'on construit
une application distribue
Protocoles d'accs distants (CORBA, RMI, IIOP) Gestion de la charge, Gestion des pannes, Persistence, intgration au back-end, Gestion des transactions, Clustering, Redploiement chaud, Arrt de serveurs sans interrompre l'application, Gestion des traces, rglages (tuning and auditing), Programmation multithread Problmes de nommage Securit, performances, Gestion des tats Cycle de vie des objets
Gestion des ressources (Resource pooling) Requte par message (message-oriented midddleware)
-
7/21/2019 Cours Complet2012
6/369
Qui s'occupe de tout ceci : le middleware !
Dans le pass, la plupart des entreprisesprogrammaient leur propre middleware.Adressaient rarement tous les problmes, Gros risque : a revient cher (maintenance,
dveloppement) Orthogonal au secteur d'activit de l'entreprise
(banque, commerce)
Pourquoi ne pas acheter un produit ? Oracle, IBM, BEA proposent depuis plusieurs
annes des middlewareAussi appels serveurs d'application.
-
7/21/2019 Cours Complet2012
7/369
-
7/21/2019 Cours Complet2012
8/369
Serveurs d'application
HTML
JavaApplication
Business Logic
DistributedObjects
Transactions
ContentManagement
Scalability Reliability Security Manageability
Enterprise Deployment Services
Development Tools
Presentation
Java
HTML
Data
Data Access
Enterprise DataConnectors
Data AccessObjects
-
7/21/2019 Cours Complet2012
9/369
Encore mieux !
Il est possible d'acheter ou de rutiliser unepartie de la logique mtier !
Vous dveloppez votre application l'aide de
composants. Code qui implmente des interfaces prdfinies. Sorte de bote noire. Un bout de logique facilement rutilisable.
Un composant n'est pas une application complte.Juste un bout. On assemble les composants comme un puzzle,
afin de rsoudre des problmes importants.
-
7/21/2019 Cours Complet2012
10/369
Composant logiciel rutilisable
Une entreprise peut acheter un composant etl'intgrer avec des composants qu'elle advelopp. Par exemple, un composant qui sait grer des prix.
On lui passe une liste de produits et il calcule le prixtotal.
Simple en apparence, car la gestion des prix peutdevenir trs complexe : remises, promotions, lots,clients privilgis, rgles complexes en fonction dupays, des taxes, etc
-
7/21/2019 Cours Complet2012
11/369
Composant logiciel rutilisable
Ce composant rpond un besoin rcurrent Vente en ligne de matriel informatique,
Gestion des cots sur une chane de productionautomobile,
Calcul des prix des expditions par la poste,
Etc
-
7/21/2019 Cours Complet2012
12/369
Composant logiciel rutilisable
-
7/21/2019 Cours Complet2012
13/369
Composant logiciel rutilisable
-
7/21/2019 Cours Complet2012
14/369
Composant logiciel rutilisable
-
7/21/2019 Cours Complet2012
15/369
Quel intrt ?
Moins d'expertise requise pour rpondre certains points du cahier des charges,
Dveloppement plus rapide.
Normalement, les vendeurs de composantsassurent un service de qualit (BEA, IBM)
Rduction des frais de maintenance.
Naissance d'un march des composants. Pas encore l'explosion attendue mais
-
7/21/2019 Cours Complet2012
16/369
Architectures de composants
Plus de 50 serveurs d'applications ont vu lejour depuis une dizaine d'annes,
Au dbut, composants propritaires
uniquement. Pas de cohabitation entre composants dveloppspour diffrents serveurs d'application
Dpendant d'un fabriquant une fois le choixeffectu.
Dur avaler pour les dveloppeurs java quiprnent la portabilit et l'ouverture !
-
7/21/2019 Cours Complet2012
17/369
Architectures de composants
Ncessit de standardiser la notion decomposants Ensemble de dfinitions d'interfaces entre le
serveur d'application et les composants
Ainsi n'importe quel composant peut tourner ou trerecompil sur n'importe quel serveur
Un tel standard s'appelle une architecture de
composants Penser aux CDs audio, la tl, au VHS, etc
-
7/21/2019 Cours Complet2012
18/369
Architectures de composants
-
7/21/2019 Cours Complet2012
19/369
Enterprise JavaBeans (EJB)
Le standard EJB est une architecture decomposants pour des composants serveurcrits en java.
1. Adopt par l'industrie. "Train once, codeanywhere"
2. Portable facilement
3. Rapid Application Development (RAD)
EJB signifie deux choses :1. Une spcification
2. Un ensemble d'interfaces
-
7/21/2019 Cours Complet2012
20/369
Pourquoi java ?
EJB = uniquement en java Sparation entre l'implmentationet l'interface
Robuste et sr : mcanismes + riche API +spcificit du langage (reflexivit, introspection,
chargement dynamique) Portable
Autre possibilits Composants Microsoft .NET Ruby on rails, Python turbo gears, frameworks java
plus lgers comme WebWork, Spring, etc.
EJB pour dvelopper des composants
-
7/21/2019 Cours Complet2012
21/369
EJB pour dvelopper des composants
business
Implmenter de la logique mtier : calcul des taxes surun ensemble d'achats, envoyer un mail de confirmationaprs une commande, etc
Accder un SGBD
Accder un autre systme d'information (CICS,COBOL, SAP R/3, etc)
Applications web : intgration avec JSP/Servlets
Web services bass sur XML (SOAP, UDDI, etc) Exemple : DELL attaque le serveur d'INTEL directement
travers un protocole XML pour rserver des pices.
-
7/21/2019 Cours Complet2012
22/369
EJB ne fournit pas de GUI
GUI = ct clientApplications
classiques
Servlets/JSP
-
7/21/2019 Cours Complet2012
23/369
L'cosystme EJB
Pour dployer et excuter un projet based'EJBs, six mtiers sont impliqus
1 - Le fournisseur d'EJBs Peut-tre un membre de votre quipe, ou bien une
entreprise qui vend des EJBs(www.componentsource.comouwww.flashline.compour voir une liste)
http://www.componentsource.com/http://www.flashline.com/http://www.flashline.com/http://www.componentsource.com/ -
7/21/2019 Cours Complet2012
24/369
L'cosystme EJB
2 - L'assembleur d'application Il s'agit de l'architecte de l'application
Il est client des EJBs achetes ou dveloppes
Il dcide de la combinaison de composants dont il a besoin
Fournit un GUI l'application Conoit et dveloppe de nouveau composants
Conoit et dveloppe les programmes clients
Dfinit le mapping avec les donnes manipules par lesdiffrents composants
En gnral, c'est un expert en Gnie Logiciel, en UML et endveloppement Java.
Il peut s'agir d'un intgrateur de systmes, d'un consultant,d'une quipe de dveloppeurs/concepteurs maison
-
7/21/2019 Cours Complet2012
25/369
L'cosystme EJB
3 - Le dployeur d'EJBs Aprs que l'application ait t assemble, elle doit tre
dploye sur un ou plusieurs serveurs d'application Attention la scurit (firewall, etc) Branchement de services annexes (LDAP, Lotus Notes,
Microsoft Active Directory, etc) sur le serveur d'applications. Choix du hardware, des SGBD, etc Paramtrage du serveur d'application, optimisation des
performances Il adapteles composants et le serveur l'application
Il peut tre une quipe ou une personne, un consultant ou unvendeur d'hbergement de serveurs d'applications. Exemples aux USA : www.hostJ2EE.comou
www.loudcloud.com
http://www.hostj2ee.com/http://www.hostj2ee.com/ -
7/21/2019 Cours Complet2012
26/369
L'cosystme EJB
4 - L'administrateur systme Vrifie 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, arrt) du systme. Certains serveurs d'application savent tlphoner et
appeler l'administrateur systme en cas deproblme.Ponts avec les outils de Tivoli, ComputerAssociates, via JMX.
-
7/21/2019 Cours Complet2012
27/369
L'cosystme EJB
5 - Le fournisseur du serveur d'application et descontainers
EJB container = environnement au sein du serveur danslequel les EJB vivent.
Le container EJB fournit les services middleware et manageles EJBs.
Exemples : Weblogic, Websphere, BES, Oracle Orion Server,JRun, JBoss
Il existe d'autre containers spcialiss (container Web comme
Tomcat, Resin) Le fournisseur du serveur d'application est le mme que le
fournisseur de containers EJB.
On confond en gnral container et serveur d'application.
-
7/21/2019 Cours Complet2012
28/369
L'cosystme EJB
6 - Les vendeurs d'outils Dvelopper une application base d'EJB est assez
lourd. Pourtant la manire de dvelopper,construire, maintenir, dployer les EJBs est
standard. Il est trs pratique d'utiliser un IDE pour simplifier
les tches rptitives comme le dploiement, 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
-
7/21/2019 Cours Complet2012
29/369
Les diffrents mtiers
-
7/21/2019 Cours Complet2012
30/369
Les diffrents mtiers
Bientt un nouveau mtier : le "persistencemanager" Dveloppe des outils qui se "branchent" sur le
serveur d'application et implmentent les
mcanismes de persistance. Mapping BD relationnelles/Objets
Mapping BD objet/Objets
Etc
Pas encore standardis dans la spcificationEJB 2.0
-
7/21/2019 Cours Complet2012
31/369
La plate-forme Java J2EE
EJB = la cl de vote d'une architecture distribuejava appele J2EE Pour le dveloppement d'application serveur
Ensemble de spcifications et d'APIs
Contient deux autres architectures1. J2ME (Java 2 Micro Edition) : pour les mobiles
2. J2SE : pour applications et applets standards
Non attach un vendeur particulier.
Quiconque respecte les spcification est "J2EE compliant"
Applications dveloppes indpendantes des vendeursd'outils.
-
7/21/2019 Cours Complet2012
32/369
La plate-forme Java J2EE
Chaque API dans J2EE sa proprespcification (PDF)
Batterie de logiciel pour valider les
implmentations (test suites) Implmentation de rfrence
J2EE est livre avec un serveur d'application par
exemple Ensemble de "blueprints" : dfinit prcisment
le rle de chaque API (PDF)
-
7/21/2019 Cours Complet2012
33/369
J2EE : les APIs
J2EE comprend en plus de J2ME et J2SE EJB : standard de dfinition de composants Java 2 RMI et RMI-IIOP : objets distribus JNDI (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) JavaMail JCA (J2EE Connector Architecture) : ponts vers SAP/3,
CICS JAXP (Java API for XML Parsing) JAAS (Java Authentification and Authorization Service)
-
7/21/2019 Cours Complet2012
34/369
J2EE
-
7/21/2019 Cours Complet2012
35/369
J2EE for the Real World
HTML
JavaApplication
JTS/JTA JNDI JavaMail RMI-IIOP JMS
Presentation
Servlets/JSP
On DemandJava
Business Logic
EJB
Triggers
ContentManagement
Data Access
JDBC 2.0
Enterprise DataConnectors
Visual Servlets Data AccessObjects
Scalability Reliability Security Manageability
Enterprise Deployment Services
DistributedData Cache
Development and Deployment Tools
Data
-
7/21/2019 Cours Complet2012
36/369
Consistent, Integrated Architecture
Scalability Reliability Security Manageability
JTS/JTA JNDI JavaMail RMI-IIOP JMS
Presentation
Servlets/JSP
On DemandJava
Business Logic
EJB
Triggers
ContentManagement
Data Access
JDBC 2.0
Enterprise DataConnectors
Visual Servlets Data AccessObjects
Enterprise Deployment Services
DistributedData Cache
Development and Deployment Tools
HTML
JavaApplication
Data
-
7/21/2019 Cours Complet2012
37/369
EJB : les fondamentaux
Michel Buffa ([email protected]), UNSA 2002
mailto:[email protected]:[email protected] -
7/21/2019 Cours Complet2012
38/369
Enterprise Bean
Composant serveur qui peut tre dploy
Composdeun ou plusieurs objets
Les clients d'un Bean lui parlent au traversd'une interface
Cette interface, de mme que le Bean, suiventla spcification EJB
Cette spcification requiert que le Bean exposecertaines mthodes
E t i B
-
7/21/2019 Cours Complet2012
39/369
Enterprise Bean
Le client d'un Bean peut tre Une servlet Une applet Une application classique Un autre Bean
On peut dcomposer une application en un graphe detches/sous-tches
Exemple : achat d'un CD partir du code-barre
Scanner (qui a une JVM embarque) client d'un Bean sur leServeur Ce Bean client d'autres Beans : gestion de catalogue, de
commandes, de gestion de transaction VISA, etc
Modle flexible, extensible
3 t d B S i B
-
7/21/2019 Cours Complet2012
40/369
3 types de Beans : Session Bean
Session Beans Modlisent un traitement (business process)
Correspondent des verbes, des actions
Ex : gestion de compte bancaire, affichage decatalogue de produit, vrifieur de donnesbancaires, gestionnaire de prix
Les actions impliquent des calculs, des accs unebase de donnes, consulter un service externe
(appel tlphonique, etc.)
Souvent clients d'autres Beans
3 t d B E tit B
-
7/21/2019 Cours Complet2012
41/369
3 types de Beans : Entity Bean
Entity beans Modlisent des donnes
Correspondent des noms
Ce sont des objets java qui cachentdes donnes d'une basede donnes
Ce sont des objets persistants
Ex : un Bean Personne, un Bean compte bancaire, un Beanproduit, un Bean commande.
Serveurs pour des Beans Session le plus souvent
Servent de proxy entre la logique mtier et les base dedonnes
Mapping base de donne relationnelle/Objet facilit par EJB2.0
E l d S i /E tit b
-
7/21/2019 Cours Complet2012
42/369
Exemple de Session/Entity bean
Session Bean Entity Bean
Gestion de compte Compte bancaire
Vrificateur de CB Carte de crdit
Systme d'entre gestionde commandes
Commande, ligne decommande
Gestion de catalogue Produits
Gestionnaire d'enchres Enchre, ProduitGestion d'achats Commande, Produit,
ligne de commande
3 t d B M D i B
-
7/21/2019 Cours Complet2012
43/369
3 types de Beans : Message-Driven Bean
Message-Driven Beans Introduits prtir de la norme EJB 2.0, nous
sommes aujourdhui en 3.0
Similaire aux Session bean : reprsentent des
verbes ou des actions, On les invoque en leur envoyant des messages,
Ex : message pour dclencher des transactionsboursires, des autorisations d'achat par CB,
Souvent clients d'autres beans
-
7/21/2019 Cours Complet2012
44/369
Clients interagissant avec un serveur
-
7/21/2019 Cours Complet2012
45/369
Clients interagissant avec un serveur base d'EJBs
L bj t di t ib d EJB
-
7/21/2019 Cours Complet2012
46/369
Les objets distribus au cur des EJBs
Les objets distrib s et le middle are
-
7/21/2019 Cours Complet2012
47/369
Les objets distribus et le middleware
Lorsqu'une application devient importante,des besoins rcurrents apparaissent :scurit, transactions,etc
C'est l qu'intervient le middleware! Deux approches
1. Middleware explicite,
2. Middleware implicite
Middleware explicite
-
7/21/2019 Cours Complet2012
48/369
Middleware explicite
-
7/21/2019 Cours Complet2012
49/369
Middleware explicite
-
7/21/2019 Cours Complet2012
50/369
Middleware explicite
Difficile crire,
Difficile maintenir,
Votre code est dpendant des API du vendeurde middleware que vous utilisez.
Middleware implicite
-
7/21/2019 Cours Complet2012
51/369
Middleware implicite
Les EJB : middleware implicite mais API pour
-
7/21/2019 Cours Complet2012
52/369
p p
descendre au bas niveau, Explicite
La plupart du temps le dveloppeur demeureau niveau implicite,
Mais il peut, mme si le travail est plus
complexe, utiliser des APIs de J2EE pourcontrler manuellement les transactions, lascurit, etc.
EJB et SOA (Service Oriented Architecture)
-
7/21/2019 Cours Complet2012
53/369
EJB et SOA (Service Oriented Architecture)
Une application = ensemble de services, Un service = ensemble de composants,
Un composant = des classes,
Les services peuvent tourner sur des nuds diffrents (des cpus diffrents) etdonc former une architecture distribue
Avantage : souplesse, mise jour, etc Lecode ne change pas quon soit en mono-cpuou en distribu.
EJB et SOA (Service Oriented Architecture)
-
7/21/2019 Cours Complet2012
54/369
EJB et SOA (Service Oriented Architecture)
SOA = un paradigme de conception Service = indpendant, faiblement coupl aux
autres
Les Web Service = un exemple de SOA, maisil y en a dautres.
Par exemple des services fait dEJBs, les
services du Robotic Studio de Microsoft, etc.
-
7/21/2019 Cours Complet2012
55/369
-
7/21/2019 Cours Complet2012
56/369
EJB 2.0 : constitution dun bean, les
principes sont les mmes en 3.0 sauf
que lon a pas crire autant de code
-
7/21/2019 Cours Complet2012
57/369
-
7/21/2019 Cours Complet2012
58/369
-
7/21/2019 Cours Complet2012
59/369
-
7/21/2019 Cours Complet2012
60/369
Constitution d'un EJB : EJB Ob ject
-
7/21/2019 Cours Complet2012
61/369
Constitution d un EJB : EJB Ob ject
L'EJB Objectcontient du code spcifique aucontainer (vendeur-dpendant)
Il appelle les mthode de la classe du Bean,
Il est gnrpar le container !
Chaque container est livr avec des outils pourgnrer les EJB Objectpour chaque Bean.
-
7/21/2019 Cours Complet2012
62/369
-
7/21/2019 Cours Complet2012
63/369
Constitution d'un EJB : l ' in terface d istante
-
7/21/2019 Cours Complet2012
64/369
Constitution d un EJB : l in terface d istante
Les clients invoquent les mthodes des EJBObjects,
Ces EJB Objects doivent clonertoutes les
mthodes que le bean expose, Comment l'outil qui gnre l'EJB Object peut-il
connatre la liste des mthodes cloner ?
Rponse : il utilise une interface fournie par leprogrammeur du bean, l'interface distante
-
7/21/2019 Cours Complet2012
65/369
Constitution d'un EJB : l ' interface distante
-
7/21/2019 Cours Complet2012
66/369
Constitution d un EJB : l interfacedistante
Le programmeur du Bean drivera soninterface distante dejavax.ejb.EJBObject,
Rajoutera les signatures des mthodes qu'il
souhaite exposer, Qui implmentera cette interface ?
L'EJB Object gnr par le container !
Presque rien faire pour le dveloppeur debean !
Java RMI-IIOP et EJB Objects
-
7/21/2019 Cours Complet2012
67/369
Java RMI IIOP et EJB Objects
Javax.ejb.EJBObject drive dejava.rmi.Remote,
Quiconque implmente Remote est appelable
distance depuis une autre JVM, EJB Objects = RMI-IIOP + EJB compatibles
RMI-IIOP = convention de passage de
paramtres + valeurs de retour lors d'appels demthode distante, entre autres
Constitution d'un EJB : Home Object
-
7/21/2019 Cours Complet2012
68/369
Constitution d un EJB : Home Object
Nous avons vu comment les clients appelaientles mthodes d'un Bean : via l'EJB Object.
Mais comment obtiennent-ils une rfrencesur
l'EJB Object ? En effet : pas d'instanciations lorsque on
travaille avec des objets distants !
Solution : le client demande la rfrence unefabrique d'EJB Objects (EJB Object Factory) Design pattern!
Constitution d'un EJB : Home Object
-
7/21/2019 Cours Complet2012
69/369
Constitution d un EJB : Home Object
L'EJB factory est responsable de l'instanciationet de la destruction des EJB Objects.
La spcification EJB appelle cette factory un
Home Object.
Responsabilits duHome Object Crer les EJB Objects,
Trouver les EJB Objects existants (Entity beansseulement)
Supprimer les EJB Objects.
-
7/21/2019 Cours Complet2012
70/369
Constitution d'un EJB : l ' in terface Home
-
7/21/2019 Cours Complet2012
71/369
Constitution d un EJB : l in terface Home
Comment un Home objectsait de quellemanire le client veut initialiser l'EJB Object ? Rappel : au lieu d'appeler un constructeur, on
demande au Home object de retourner une
rfrence. Comme pour les constructeurs, il est possible de
passer des paramtres d'initialisation.
Comme pour les EJB Objects, le dveloppeurdu bean doit spcifier une interface Home
Constitution d'un EJB : l ' in terface Home
-
7/21/2019 Cours Complet2012
72/369
Co st tut o d u J
L'interface Homedfinit Les mthodes pour crer, dtruire et localiser les
EJB Objects
Le Home Object (gnr par le container)
implmente cette interface. L'interface fournie par le dveloppeur drive de
javax.ejb.EJBHome
Javax.ejb.EJBHomedrive dejava.rmi.Remote
Les Home objectssont aussi des objets distants,compatibles RMI-IIOP
-
7/21/2019 Cours Complet2012
73/369
-
7/21/2019 Cours Complet2012
74/369
Constitution d'un EJB : les interfacesl l
-
7/21/2019 Cours Complet2012
75/369
locales
Commentaires sur la figure prcdente1. Le client appelle un stub (souche),2. Le stubencode les paramtres dans un format capable de
voyager sur le rseau,3. Le stubouvre une connexion sur le skeleton(squelette),
4. Le skeletondcode les paramtres,5. Le skeletonappelle l'EJB Object,6. L'EJB Objecteffectue les appels middleware,7. L'EJB Objectappelle la mthode du bean,8. Le Bean fait son travail,
9. On fait le chemin inverse pour retourner la valeur de retourvers le client !10. Sans compter le chargement dynamique des classes
ncessaires !
Constitution d'un EJB : les interfacesl l
-
7/21/2019 Cours Complet2012
76/369
locales
Nouveau dans EJB 2.0 : les interfaces locales. Introduit la notion de Local Object, en remplacement
deEJB Object
Les Local Objectsimplmentent une interface localeau lieu d'une interface distante
Exemple d'appel de mthode distante1. Le client appelle le Local Object,
2. Le Local Objectappelle le middlewarepuis la mthode dubean
3. La valeur de retour est renvoye au Local Object, puis auclient
Constitution d'un EJB : les interfacesl l
-
7/21/2019 Cours Complet2012
77/369
locales
Pour l'appel distant de mthodes, le dveloppeur peutfournir une interface locale, qui sera implmente parle container en tant que Local Object A distinguer du cas "normal" (EJB 1.1) ou on a interface
distanteimplmente par EJB Object
Pour la cration/localisation de beans, le dveloppeurpeut fournir une interface home interface locale, quisera implmente par le container en tant que HomeObject local
A comparer avec Home Interfaceimplmente par le containeren tant que Home Object
Constitution d'un EJB : les interfaceslocales
-
7/21/2019 Cours Complet2012
78/369
locales
Les interfaces locales ne tournent que si les EJB sontdans le mme processus (mme container),
Attention, paramtres et valeurs de retour (lors desappels de mthodes) se passent maintenantpar
rfrence Toujours par valeur dans le cas d'appels distants!
Plus performant mais smantique diffrente.
Difficile de passer d'une implmentation locale une
implmentation classique Aurait pu tre fait dans les descripteurs (weblogic)
Constitution d'un EJB : les desc r ipteursde d p lo iemen t
-
7/21/2019 Cours Complet2012
79/369
de dplo iemen t
Pour informer le container des besoinsmiddleware, on utilise un descripteur dedploiement(XML) Standardis,
A l'extrieur de l'implmentation du bean.Attention si on les crit la main!
Outils d'aide au dploiement : IDEs (Jbuilder, VisualCafe), outils spcifiques (Borland ApplicationServer, Weblogic 6.1)
Descripteurs peuvent tre modifis aprs ledploiement.
Constitution d'un EJB : les desc r ipteursde dplo iemen t
-
7/21/2019 Cours Complet2012
80/369
de dplo iemen t
Descripteurs spcifiques au serveurd'application Chaque vendeur ajoute des trucs en plus : load-
balancing, persistance complexe, clustering,
monitoring Dans des fichiers spcifiques (inprise-ejb.xml avec
Borland)
-
7/21/2019 Cours Complet2012
81/369
Rsum
-
7/21/2019 Cours Complet2012
82/369
Enterprise Bean class Interface distante (remote interface)/Interface locale
EJB Object/Local Object
Home interface/Local Home interface
Home Object/Local Home Object
Descripteur de dploiement standard
Descripteurs spcifiques au vendeur
Fichier .jar de l'EJB
-
7/21/2019 Cours Complet2012
83/369
OUF !
-
7/21/2019 Cours Complet2012
84/369
Quest-ce qui a chang ?
-
7/21/2019 Cours Complet2012
85/369
Pas grand-chose sur le fond, les EJBs adressenttoujours le mme problme,
Beaucoup sur la forme. Pour les Session Beans et pour les Message Driven Beans :
modle POJO (Plain Old Java Object) Les dveloppeurs veulent crire du Java, pas du XML et
pas 50 fichiers pour faire HelloWorld !
Pour les Entity Beans, on utilisera les annotations de code pour indiquer le mapping entre la classe java et les donnes
dans la BD
Le modle EJB 3.0 utilise beaucoup les annotationsde code introduites avec java 1.5
-
7/21/2019 Cours Complet2012
86/369
Introduction aux Session Beans
Michel Buffa ([email protected]), UNSA 2002
mailto:[email protected]:[email protected] -
7/21/2019 Cours Complet2012
87/369
Dure de vie d'un Session Bean
-
7/21/2019 Cours Complet2012
88/369
Dure de vie = la session En gros, le temps qu'un client reste connect sur le bean.
Dans une logique e-commerce, le temps qu'un utilisateur estconnect sur le site.
Le container cre une instance lorsqu'un client seconnecte sur le Session Bean.
Il peut le dtruire lorsque le client se dconnecte.
Les Session Beans ne rsistent pas des crashes duserveur. Ce sont des objets en mmoire, non persistants.
Le contraire des Entity Beans que nous verrons plus tard.
Types de Session Beans
-
7/21/2019 Cours Complet2012
89/369
Chaque EJB a un moment donn entretientune conversationavec un client. Conversation = suites d'appels de mthodes.
Il existe deux types de Session Beans1. StatefulSession Beans,
2. StatelessSession Beans.
Chacun modlisant un type particulier deconversation.
-
7/21/2019 Cours Complet2012
90/369
Stateful Session Beans
-
7/21/2019 Cours Complet2012
91/369
En rsum, un Stateful Session Bean est utile pourmaintenir un tat pendant la dure de vie du client au cours d'appels de mthodes successifs.
Au cours de transactionssuccessives.
Si un appel de mthode change l'tat du Bean, lors d'un autre
appel de mthode l'tat sera disponible.
Consquence : une instance de Stateful Session Beanpar client.
Avec certains containers, les Stateful Session Beanspeuvent tre persistants (BAS/BES) par srialisation.
-
7/21/2019 Cours Complet2012
92/369
Pooling des Stateful Session Beans
-
7/21/2019 Cours Complet2012
93/369
Le pooling des instances de Stateful Session Beansn'est pas aussi simple
Le client entretient une conversation avec le bean,dont l'tat doit tre disponible lorsque ce mme clientappelle une autre mthode.
Problme si trop de clients utilisent ce type de Bean enmme temps. Ressources limites (connexions, mmoire, sockets) Mauvaise scalabilit du systme, L'tat peut occuper pas mal de mmoire
Problme similaire la gestion des tches dans unOS
Pooling des Stateful Session Beans
-
7/21/2019 Cours Complet2012
94/369
Avec un OS : on utilise le concept de mmoirevirtuelle
Lorsqu'un processus ne fait plus rien (Idle), on
swappe son tat mmoire sur disque dur,librant de la place.
Lorsqu'on a de nouveau besoin de ceprocessus, on fait l'inverse.
Ceci arrive souvent lorsqu'on passe d'uneapplication l'autre
Pooling des Stateful Session Beans
-
7/21/2019 Cours Complet2012
95/369
Avec les Stateful Session Beans on fait pareil ! Entre chaque appel de mthode, un client ne fait
rien (Idle),
Un utilisateur d'un site de e-commerce lit les infos
sur la page www, rflchit de temps en temps ilclique sur un bouton
Pendant qu'il ne fait rien, l'tat du bean est swappmais les ressources telles que les connexions BD,
sockets, la mmoire intrinsque qu'il occupe,peuvent tre utilises par un autre client.
Etc
-
7/21/2019 Cours Complet2012
96/369
-
7/21/2019 Cours Complet2012
97/369
-
7/21/2019 Cours Complet2012
98/369
Activation/Passivation callbacks
-
7/21/2019 Cours Complet2012
99/369
Lorsqu'un bean va tre mis en passivation, lecontainer peut lavertir (@PrePassivate) Il peut librer des ressources (connexions)
Idem lorsque le bean vient d'tre activ(@PostActivate)
-
7/21/2019 Cours Complet2012
100/369
Persistance dans Java EE 6 :
JPA2 et EJB 3.1
Michel Buffa ([email protected]), UNSA 2011
Note importante
mailto:[email protected]:[email protected] -
7/21/2019 Cours Complet2012
101/369
Ce cours couvre les besoins les plusimportants, vous pourrez retrouver un courstrs complet sur JPA2 et sur la persistence en
java en gnral sur la page de Richard Grin http://deptinfo.unice.fr/~grin/mescours/minfo/modper
sobj/supports/index.html
Aussi, une bonne rfrence en ligne sur JPA2
http://www.objectdb.com/api/java/jpa, en particulierla section JPA2 annotations
Contexte
http://deptinfo.unice.fr/~grin/mescours/minfo/modpersobj/supports/index.htmlhttp://deptinfo.unice.fr/~grin/mescours/minfo/modpersobj/supports/index.htmlhttp://www.objectdb.com/api/java/jpahttp://www.objectdb.com/api/java/jpahttp://deptinfo.unice.fr/~grin/mescours/minfo/modpersobj/supports/index.htmlhttp://deptinfo.unice.fr/~grin/mescours/minfo/modpersobj/supports/index.html -
7/21/2019 Cours Complet2012
102/369
Java EE 6 propose ce quon appelle un web
profile Un sous-ensemble de java EE pour le
dveloppement dapplication web simples
La suite sera aborde en partie lan prochain
Dans ce web profile on propose : Vue : JSP ou facelets/JSF2
Contrleur web : Servlets ou web service
Composant mtier : EJB type session + managedbeans + classes java standard,
Accs aux donnes dans une BD via JPA2/EJBtype entity
-
7/21/2019 Cours Complet2012
103/369
Contexte
-
7/21/2019 Cours Complet2012
104/369
Entity Bean, introducton
-
7/21/2019 Cours Complet2012
105/369
Un Entity Bean reprsente Des objets persistants stocks dans une base de
donne,
Des noms, des donnes
Gestion via JPA2 + sessions beans
Dans ce chapitre on tudiera Le concept de persistance,
Ce qu'est un entity bean, du point de vue duprogrammeur,
Les caractristiques des entity beans,
Les concepts de programmation des entity beans.
La persistance par srialisation
-
7/21/2019 Cours Complet2012
106/369
Srialisation = sauvegarde de l'tat d'un objet sousforme d'octets. Rappel : l'tat d'un objet peut tre quelque chose de trs
compliqu. Etat d'un objet = ses attributs, y compris les atributs hrits.
Si les attributs sont eux-mme des instances d'une classe, ilfaut sauvegarder aussi les attributs de ces instances, etc
A partir d'un tat srialis, on peut reconstruire l'objet
En java, au travers de l'interface
java.io.Serializable, des mthodes dejava.io.ObjectInputStreametjava.io.ObjectOutputStream
La persistance par srialisation
-
7/21/2019 Cours Complet2012
107/369
Dfauts nombreux Gestion des versions, maintenance
Pas de requtes complexes Ex : on srialize mille comptes bancaires. Comment
retrouver ceux qui ont un solde ngatif ?
Solution : stocker les objets dans une base de
donne!
La persistance par mapping objet/BDrelationelle
-
7/21/2019 Cours Complet2012
108/369
On stocke l'tat d'un objet dans une base dedonne.
Ex : la classe Personne possde deux attributsnometprenom, on associe cette classe unetablequi possde deux colonnes : nometprenom.
On dcompose chaque objet en une suite de
variables dont on stockera la valeur dans uneou plusieurs tables.
Permet des requtes complexes.
La persistance par mapping objet/BDrelationelle
-
7/21/2019 Cours Complet2012
109/369
La persistance par mapping objet/BDrelationelle
-
7/21/2019 Cours Complet2012
110/369
Pas si simple Dtermination de l'tat d'un objet parfois difficile,
tout un art
Il existe des produits pour nous y aider
EclipseLink, TopLink (WebGain), Hibernate (JBoss),Aujourd'hui la plupart des gens font a la main
avec JDBC ou SQL/J.
Mais SQL dur tester/debugger source de
La persistance l'aide d'une BD Objet
-
7/21/2019 Cours Complet2012
111/369
Les Base de donnes objet stockentdirectementdes objets.
Plus de mapping !
Object Query Language (OQL) permet demanipuler les objets
Relations entre les objets videntes (plus dejoin)
Bonnes performances mais mauvaisescalabilit.
Le modle de persistence JPA 2
-
7/21/2019 Cours Complet2012
112/369
JPA 2 propose un modle standard de persistance laide des Entity beans
Les outils qui assureront la persistance (Toplink,Hibernate, EclipseLink, etc.) sont intgrs auserveur dapplication et devront tre compatibles
avec la norme JPA 2.
Java EE 6 repose tous les niveaux sur de linjection de code via des annotations de code
Souvent, on ne fera pas de new , lesvariables seront cres/initialises par injectionde code.
Qu'est-ce qu'un Entity Bean
-
7/21/2019 Cours Complet2012
113/369
Ce sont des objets qui savent se mapperdansune base de donne.
Ils utilisent un mcanisme de persistance
(parmi ceux prsents) Ils servent reprsenter sous forme d'objets
des donnes situes dans une base dedonne Le plus souvent un objet = une ou plusieurs ligne(s)
dans une ou plusieurs table(s)
Qu'est-ce qu'un Entity Bean
-
7/21/2019 Cours Complet2012
114/369
Exemples Compte bancaire (No, solde), Employ, service, entreprises, livre, produit,
Cours, lve, examen, note,
Mais au fait, pourquoi nous embter passer par desobjets ? Plus facile manipuler par programme,
Vue plus compacte, on regroupe les donnes dans un objet.
On peut associer des mthodes simples pour manipuler cesdonnes
On va gagner la couche middleware !
Exemple avec un compte bancaire
-
7/21/2019 Cours Complet2012
115/369
On lit les informations d'un compte bancaire enmmoire, dans une instance d'un entity bean,
On manipule ces donnes, on les modifie en
changeant les valeurs des attributs d'instance, Les donnes seront mises jour dans la base
de donnes automatiquement !
Instance d'un entity bean = une vueenmmoire des donnes physiques
Fichiers composant un entity bean
-
7/21/2019 Cours Complet2012
116/369
Schma classique : La classe du bean se mappe dans une base de donnes. Cest une classe java normale (POJO) avec des attributs,
des accesseurs, des modifieurs, etc.
On utilisera les mta-donnes ou attributs de code pour
indiquer le mapping, la cl primaire, etc. Cl primaire = un objet srializable, unique pour chaque
instance. C'est la cl primaire au sens SQL.
Note : on peut aussi utiliser un descripteur XML la placedes annotations de code
On manipulera les donnes de la BD laide des EntityBeans+ laide dun PERSISTENT MANAGER.
Le PM soccupera de tous les accs disque, du cache, etc.
Lui seul contrle quand et comment on va accder la BD,cest lui qui gnre le SQL, etc.
Exemple dentity bean : un livre
-
7/21/2019 Cours Complet2012
117/369
@Entitypublic class Book {
@Id @GeneratedValueprivate Long id;@Column(nullable = false)
private String title;private Float price;@Column(length = 2000)private String description;private String isbn;
private Integer nbOfPage;private Boolean illustrations;
// Constructors, getters, setters}
Exemple dentity bean : un livre
-
7/21/2019 Cours Complet2012
118/369
@Entity
public class Book {@Id @GeneratedValueprivate Long id;@Column(nullable = false)private String title;private Float price;@Column(length = 2000)private String description;
private String isbn;private Integer nbOfPage;private Boolean illustrations
Les annotations de code JPA 2
-
7/21/2019 Cours Complet2012
119/369
Remarques gnrales (suite) Nombreuses valeurs par dfaut, par exemple une
classe entit Personne se mappera dans la tablePERSONNE par dfaut, un attribut nom sur la
colonne NOM, etc. Il existe de trs nombreux attributs pour les
annotations, ce cours prsente les principaux, pourune tude dtaille, voir la spcification, un livre, oule tutorial Java EE 6
Les rgles de JDBC sappliquent pour le mapping
des types. String vers VARCHAR, Long versBIGINT, Boolean vers SMALLINT, etc.
Les annotations de code JPA 2
-
7/21/2019 Cours Complet2012
120/369
Remarques gnrales String vers VARCHAR(255) par dfaut,
Les rgles peuvent changer dun SGBD lautre,
par exemple String est mapp sur VARCHAR avec
Derby, mais sur VARCHAR2 avec Oracle. UnInteger sur un INTEGER avec Derby mais sur unNUMBER avec Oracle. Etc.
Dans le cas des cls primaires auto-incrmentes,
la manire dont elles sont gres dpend du SGBDet de loutil de mapping relationnel-objet
Si on en change -> la structure des tableschange !
Exemple dinsertion dun livre
-
7/21/2019 Cours Complet2012
121/369
public class Main {
public static void main(String[] args) {
// On cre une instance de livreBook book = new Book();
book.setTitle("The Hitchhiker's Guide to the Galaxy");book.setPrice(12.5F);book.setDescription("Science fiction comedy book");
// On rcupre un pointeur sur lentity manager// Remarque : dans une appli web, pas besoin de faire tout cela !EntityManagerFactory emf =
Persistence.createEntityManagerFactory("chapter02PU");EntityManager em = emf.createEntityManager();
// On rend lobjet persistant dans la base (on linsre)EntityTransaction tx = em.getTransaction();tx.begin();em.persist(book);tx.commit();
em.close();emf.close();
}
Client sous forme de session bean
-
7/21/2019 Cours Complet2012
122/369
Dans le cas o le client est un sessionbean du code peut tre inject ,
Les transactions sont dclenches par dfaut,
@statelesspublic class UnSessionBean {
@PersistenceContext(unitName="EmployeeService")EntityManager em;
public Employee createEmployee(int id, String name, long salary
, byte[] pic) {Employee emp = new Employee(id);emp.setName(name);em.persist(emp);
return emp;
}
-
7/21/2019 Cours Complet2012
123/369
Client sous forme de session bean
-
7/21/2019 Cours Complet2012
124/369
@Statelesspublic class BookBean {
@PersistenceContext(unitName = "chapter04PU")private EntityManager em;
public void createBook() {Book book = new Book();
book.setId(1234L);book.setTitle("The Hitchhiker's Guide to the Galaxy");
book.setPrice(12.5F);book.setDescription("Science fiction created by Douglas Adams.");book.setIsbn("1-84023-742-2");book.setNbOfPage(354);book.setIllustrations(false);
em.persist(book);
// Rcupre le livre dans la BD par sa cl primairebook = em.find(Book.class, 1234L);
System.out.println(book);}
}
Remarques : quoi correspond le sessionbean ?
-
7/21/2019 Cours Complet2012
125/369
On codera la partie mtier Souvent on utilise un session bean pour la couche
DAO (avec des fonctions de cration,recherche, modification et suppression dentity
beans)
Exemple : GestionnaireUtilisateurs
On utilisera aussi des session beans pourimplmenter des services composites
Exemple : GestionnaireDeCommandes, quiutilisera dautres gestionnaires
Autres annotations
-
7/21/2019 Cours Complet2012
126/369
@Entity
public class Book {
@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;@Column(name = "book_title", nullable = false, updatable = false)private String title;private Float price;@Column(length = 2000)private String description;private String isbn;@Column(name = "nb_of_page", nullable = false)private Integer nbOfPage;
private Boolean illustrations;@Basic(fetch = FetchType.LAZY)@Lobprivate byte[] audioText;
// Constructors, getters, setters}
Autres annotations (suite)
-
7/21/2019 Cours Complet2012
127/369
@Column permet dindiquer des prfrences
pour les colonnesAttributs possibles : name, unique, nullable,
insertable, updatable, table, length, precision,scale
@GeneratedValue Indique la stratgie de gnration automatique des
cls primaires, La valeur : GenerationType.auto est recommande,
Va ajouter une table de squence @Lob indique large object (pour un BLOB)
Souvent utilis avec @Basic(fetch =FetchType.LAZY) pour indiquer quon ne chargera
lattribut que lorsquon fera un get dessus
Autres annotations (suite)
-
7/21/2019 Cours Complet2012
128/369
Il existe de nombreuses autres annotations, Voir par exemple : JPA Reference
http://www.objectdb.com/api/java/jpa
Il se peut que les TPs en introduisentcertaines.
Les curieux peuvent consulter la spcificationjava EE 6 ou le tutorial (ou un bon livre)
Exemple de fichier persistence.xml
-
7/21/2019 Cours Complet2012
129/369
Ce fichier configure le persistence manager
org.hibernate.ejb.HibernatePersistencejdbc/igift
Un exemple dentity bean : un compte bancaire
-
7/21/2019 Cours Complet2012
130/369
La classe = POJO,Srializable,
Un attribut = la cl primaire
Cest tout !
Client de lentity bean prcdent : un sessionbean (servant de faade/DAO)
-
7/21/2019 Cours Complet2012
131/369
Ce session bean est stateless,Utilise un EntityManager,
Sert envoyer des requtesJPQL,
Mthode persist(entity) pourcrer une nouvelle entre(insert)
Le reste passe par desappels de mthodesclassiques de lentity bean.
Autre version : on garde dans le session bean la mmoire de lentity bean
-
7/21/2019 Cours Complet2012
132/369
Le session beanest stateful,
Il garde larfrence delentity bean,
On a du tendre laporte duPersistenceManager
-
7/21/2019 Cours Complet2012
133/369
Caractristiques des entity beans
-
7/21/2019 Cours Complet2012
134/369
Survivent aux crashes du serveur, du SGBD Ce sont des vues sur des donnes dans un
SGBD
Modifier les donnes sans passer par lebean
-
7/21/2019 Cours Complet2012
135/369
Packager et dployer un Entity Bean
-
7/21/2019 Cours Complet2012
136/369
Les EB sont dploys dans des persistenceUnits , Spcifi dans le fichier persistence.xml qui est
dans le jar contenant les EJBs. Exemple le plus simple :
Mais on peut ajouter de nombreux paramtres :, , ,
etc.
Que faire avec un entity manager ?
-
7/21/2019 Cours Complet2012
137/369
Etats dun Entity Bean
-
7/21/2019 Cours Complet2012
138/369
Un EB peut avoir 4 tats1. New: le bean existe en mmoire mais nest pas encore
associ une BD, il nest pas encore associ un contexte
de persistence (via lentity manager)
2. Managed: aprs le persist() par exemple. Le bean est
associ avec les donnes dans la BD. Les changementsseront rpercuts (transaction termines ou appel a flush())
3. Detached: le bean est nest plus associ au contexte depersistenced
4. Removed: le bean est associ la BD, au contexte, et est
programm pour tre supprim (les donnes serontsupprimes aussi).
-
7/21/2019 Cours Complet2012
139/369
Exemple de merge() avec le bean stateless
-
7/21/2019 Cours Complet2012
140/369
Recherche d'entity beans
-
7/21/2019 Cours Complet2012
141/369
Les entity beans correspondant des lignesdans une BD, on peut avoir besoin de faire desrecherches.
Similaire un SELECT
Plusieurs fonctions sont proposes par lentity
manager
Recherche dentity beans
-
7/21/2019 Cours Complet2012
142/369
Recherche par cl primaire :
Excution de requtes JPQL
Recherche dentity beans
-
7/21/2019 Cours Complet2012
143/369
Requtes SQL:
Requtes nommes:
JPQL : Quelques exemples
-
7/21/2019 Cours Complet2012
144/369
Voir le fichier PDF fourni avec les TPs !
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
145/369
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
146/369
-
7/21/2019 Cours Complet2012
147/369
JPQL : Quelques exemples (suite)
Requter sur plusieurs attributs renvoie soit un
-
7/21/2019 Cours Complet2012
148/369
Requter sur plusieurs attributs renvoie soit un
tableau dObject, soit une collection de tableauxdObject
texte = "select e.nom, e.salaire " +" from Employe as e";
query = em.createQuery(texte);List liste =(List)query.getResultList();
for (Object[] info : liste) {System.out.println(info[0]+ "gagne"
+ info[1]);
}
-
7/21/2019 Cours Complet2012
149/369
Table des compagnies
Table des employs
-
7/21/2019 Cours Complet2012
150/369
-
7/21/2019 Cours Complet2012
151/369
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
152/369
WHERE et requtes paramtres
Autre exemple avec paramtres nomms
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
153/369
Expressions
Le % dans le LIKE = suite de caractres, le _ =un caractre
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
154/369
MEMBER OF
Sous-Requtes
Fonctions sur chanes, arithmtique
-
7/21/2019 Cours Complet2012
155/369
-
7/21/2019 Cours Complet2012
156/369
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
157/369
JPQL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
158/369
-
7/21/2019 Cours Complet2012
159/369
Utiliser une cl primaire composite
-
7/21/2019 Cours Complet2012
160/369
Similaire lexemple prcdent sauf que au
lieu dutiliser @Embedded / @Embeddable onutilisera @EmbbededId/ Embeddable
@Embeddable
public class CompositeId {String name;String email
}
@Entitypublic class Dependent {
@EmbeddedId// indique que la cl primaire est dans une autre classeCompositeId id;@ManyToOneEmployee emp;
}
http://www.objectdb.com/api/java/jpa/Embeddable/http://www.objectdb.com/api/java/jpa/Entity/http://www.objectdb.com/api/java/jpa/EmbeddedId/http://www.objectdb.com/api/java/jpa/ManyToOne/http://www.objectdb.com/api/java/jpa/ManyToOne/http://www.objectdb.com/api/java/jpa/EmbeddedId/http://www.objectdb.com/api/java/jpa/Entity/http://www.objectdb.com/api/java/jpa/Embeddable/ -
7/21/2019 Cours Complet2012
161/369
Relations avec les entity beans
Michel Buffa ([email protected]), UNSA 2002
On complique un peu l'tude des entitybeans !
mailto:[email protected]:[email protected] -
7/21/2019 Cours Complet2012
162/369
Les entity beans reprsentant des donnsdans une BD, il est logique d'avoir envie des'occuper de grer des relations
Exemples Une commande et des lignes de commande Une personne et une adresse Un cours et les lves qui suivent ce cours Un livre et ses auteurs
Nous allons voir comment spcifier cesrelations dans notre modle EJB
Concepts abords
-
7/21/2019 Cours Complet2012
163/369
Cardinalit (1-1, 1-n, n-n),
Direction des relations (bi-directionnelles, uni-directionnelles),
Agrgation vs composition et destructions en cascade,
Relations rcursives, circulaires, agressive-load, lazy-load,
Intgrit rfrentielle,
Accder aux relations depuis un code client, via desCollections,
Comment grer tout a !
Direction des relations (direct ional i ty)
-
7/21/2019 Cours Complet2012
164/369
Unidirectionnelle On ne peut aller que du bean A vers le bean B
Bidirectionnelle On peut aller du bean A vers le bean B et
inversement
Cardinalit
-
7/21/2019 Cours Complet2012
165/369
La cardinalit indique combien d'instances vontintervenir de chaque ct d'une relation
One-to-One (1:1) Un employ a une adresse
One-to-Many (1:N) Un PDG et ses employs
Many-to-Many (M:N) Des tudiants suivent des cours
-
7/21/2019 Cours Complet2012
166/369
Relations 1:1
-
7/21/2019 Cours Complet2012
167/369
Reprsente typiquement par une cltrangre dans une BD
Ex : une commande et un colis
Relations 1:1, le bean Order
-
7/21/2019 Cours Complet2012
168/369
Relations 1:1, le bean Order
-
7/21/2019 Cours Complet2012
169/369
Relations 1:1, le bean Shipment
-
7/21/2019 Cours Complet2012
170/369
Exemple de code pour insrer une commandeavec une livraison relie
-
7/21/2019 Cours Complet2012
171/369
Relations 1:1, exemple de client (ici un main)
-
7/21/2019 Cours Complet2012
172/369
Version bidirectionnelle (on modifie Shipment)
-
7/21/2019 Cours Complet2012
173/369
Version bidirectionnelle (suite)
-
7/21/2019 Cours Complet2012
174/369
Version bi-directionnelle (suite, code qui fait lepersist)
-
7/21/2019 Cours Complet2012
175/369
On peut maintenant ajouter au code de tout lheure (celui qui crit une commande) :
Version bi-directionnelle (suite, code du client)
-
7/21/2019 Cours Complet2012
176/369
Relations 1:N
-
7/21/2019 Cours Complet2012
177/369
Exemple : une entreprise a plusieurs employs
Relations 1:N
-
7/21/2019 Cours Complet2012
178/369
Exemple : une entreprise a plusieurs employs Solution plus propre (viter les BLOBs!)
Relations 1:N exemple
-
7/21/2019 Cours Complet2012
179/369
Relations 1:N exemple
-
7/21/2019 Cours Complet2012
180/369
Exemple de code qui insre des compagnies
-
7/21/2019 Cours Complet2012
181/369
Exemple de code qui liste des compagnies
-
7/21/2019 Cours Complet2012
182/369
-
7/21/2019 Cours Complet2012
183/369
Version bidirectionnelle
-
7/21/2019 Cours Complet2012
184/369
Version bidirectionnelle
-
7/21/2019 Cours Complet2012
185/369
Version bidirectionnelle
-
7/21/2019 Cours Complet2012
186/369
Relations M:N
U t di t it l i
-
7/21/2019 Cours Complet2012
187/369
Un tudiant suit plusieurs cours, un cours aplusieurs tudiants inscrits Table de jointure ncessaire.
Relations M:N, choix de conception
D ibilit l ' dli tt
-
7/21/2019 Cours Complet2012
188/369
Deux possibilits lorsqu'on modlise cetterelation avec des EJBs
1. Utiliser un troisime EJB pour modliser la tablede jointure. On veut peut-tre mmoriser la dateo un tudiant s'est inscrit, etc Cet EJB
possdera deux relations 1:N vers le bean Studentet le vers le bean Course
2. Si on a rien besoin de plus part la relation, onpeut utiliser simplement deux EJB, chacun ayant
un attribut correspondant une Collection del'autre EJB
Relations M:N, exemple
-
7/21/2019 Cours Complet2012
189/369
Relations M:N, exemple
-
7/21/2019 Cours Complet2012
190/369
-
7/21/2019 Cours Complet2012
191/369
Relations M:N, exemple
-
7/21/2019 Cours Complet2012
192/369
Relations M:N, exemple
-
7/21/2019 Cours Complet2012
193/369
La directionalit et le modle de donnesdans la DB
La directionalit peut ne pas correspondre
-
7/21/2019 Cours Complet2012
194/369
La directionalit peut ne pas correspondre celle du modle de donnes dans la DB
Schma normalis
Schma dnormalis
Choisir la directionalit ?
Premier critre : la logique de votre application
-
7/21/2019 Cours Complet2012
195/369
Premier critre : la logique de votre application,
Second critre : si le schma relationnel existe,s'adapter au mieux pour viter de mauvaisesperformances.
Lazy-loadingdes relations
Agressive loading
-
7/21/2019 Cours Complet2012
196/369
Agressive-loading Lorsqu'on charge un bean, on charge aussi tous les beans
avec lesquels il a une relation.
Cas de la Commande et des Colis plus tt dans ce chapitre. Dans le ejbLoad()on appelle des finders
Peut provoquer un norme processus de chargement si legraphe de relations est grand.
Lazy-loading On ne charge les beans en relation que lorsqu'on essaie
d'accder l'attribut qui illustre la relation.
Tant qu'on ne demande pas quels cours il suit, le beanEtudiant n'appelle pas de mthode findersur le bean Cours.
Agrgation vs Composition etdestructions en cascade
Relation par Agrgation
-
7/21/2019 Cours Complet2012
197/369
Relation par Agrgation Le bean utiliseun autre bean Consquence : si le bean A utilisele bean B, lorsqu'on dtruit
A on ne dtruit pas B. Par exemple, lorsqu'on supprime un tudiant on ne supprime
pas les cours qu'il suit. Et vice-versa.
Relation par Composition Le bean se compose d'unautre bean. Par exemple, une commande se compose de lignes de
commande Si on dtruit la commande on dtruit aussi les lignes
correspondantes. Ce type de relation implique des destructions en cascade..
-
7/21/2019 Cours Complet2012
198/369
-
7/21/2019 Cours Complet2012
199/369
Relations rcursives
Relation vers un bean de la mme classe
-
7/21/2019 Cours Complet2012
200/369
Relation vers un bean de la mme classe Exemple : Employ/Manager
Rien de particulier, ces relations sontimplmentes exactement comme les relationsnon rcursives
-
7/21/2019 Cours Complet2012
201/369
Relations circulaires
Plusieurs stratgies sont possibles
-
7/21/2019 Cours Complet2012
202/369
Plusieurs stratgies sont possibles1. Certains containers proposent d'optimiser le chargement d'un
bean en chargeant toutes ses relations en cascade dans leejbLoad(). Attention si relations circulaires !
2. Supprimer une des relations (!!!) si le modle de conceptionle permet.
3. Supprimer la bidirectionnalit d'une des relations pour briserle cercle, si le modle de conception le permet.
4. Utiliser le lazy-loading et ne pas faire de destruction encascade.
5. Les meilleurs moteurs CMP dtectent les relations circulaireset vous permettent de traiter le problme avant le runtime.
Intgrit rfrentielle
Un bean Compagnie Division etc a des
-
7/21/2019 Cours Complet2012
203/369
Un bean Compagnie, Division, etc a des
relations avec un bean Employ Si on supprime un employ, il faut vrifier qu'il est
bien supprim partout o on a une relation avec lui.
Problme classique dans les SGBDs Rsolus l'aide de triggers. Ils se dclenchent sittqu'une perte d'intgrit risque d'arriver et effectuentles oprations ncessaires.
On peut aussi utiliser des procdures stockes via
JDBC. Ces procdures effectuent la vrificationd'intgrit.
Intgrit rfrentielle
Grer l'intgrit dans le SGBD est intressant
-
7/21/2019 Cours Complet2012
204/369
Grer l intgrit dans le SGBD est intressant
si la BD est attaque par d'autres applicationsque les EJBs
Autre approche : grer l'intgrit dans les EJBs Solution plus propre, Le SGBD n'est plus aussi sollicit,
Avec les EJB: le travail est fait tout seul !
Intgrit rfrentielle
Et dans un contexte distribu ?
-
7/21/2019 Cours Complet2012
205/369
Et dans un contexte distribu ?
Plusieurs serveurs d'application avec le mmecomposant peuvent accder des donnessur le mme SGBD,
Comment mettre jour les relations ?
Problme rsolu par les transactions !!!
Trier les relations
Lorsquon accde aux relations par un getter
-
7/21/2019 Cours Complet2012
206/369
Lorsqu on accde aux relations par un getter,
on ne contrle pas par dfaut lordre deslments.
Plusieurs solutions sont possibles pour
rcuprer des relations sous forme decollections tries Utiliser lannotation @OrderBy juste avant la
dclaration de la relation ou juste avant le getter
Utiliser une requte avec un Order By
Annoter lattribut correspondant la colonne qui
sera ordonne, dans lentity de la relation
Trier des relations : annotation @OrderBy
@Entitypublic class Course {
http://www.objectdb.com/api/java/jpa/Entity/http://www.objectdb.com/api/java/jpa/Entity/ -
7/21/2019 Cours Complet2012
207/369
...@ManyToMany@OrderBy("lastname ASC")List students;
...}
Remarques
ASC ou DESC pour lordre de tri, ASC par dfaut, lastname est une proprit de lentit Student.java,
Si la proprit nest pas spcifie -> tri par lid
Trier des relations : annotation @OrderBy
@Entitypublic class Student {
http://www.objectdb.com/api/java/jpa/ManyToMany/http://www.objectdb.com/api/java/jpa/OrderBy/http://www.objectdb.com/api/java/jpa/OrderBy/http://www.objectdb.com/api/java/jpa/ManyToMany/http://www.objectdb.com/api/java/jpa/Entity/http://www.objectdb.com/api/java/jpa/Entity/ -
7/21/2019 Cours Complet2012
208/369
...@ManyToMany(mappedBy="students")@OrderBy// tri par cl primaire (dfaut)List courses;
...}
Remarques
ASC ou DESC pour lordre de tri, ASC par dfaut, lastname est une proprit de lentit Student.java,
Si la proprit nest pas spcifie -> tri par lid
Trier des relations : annotation @OrderBy
On peut utiliser loprateur si on trie sur
http://www.objectdb.com/api/java/jpa/ManyToMany/http://www.objectdb.com/api/java/jpa/OrderBy/http://www.objectdb.com/api/java/jpa/OrderBy/http://www.objectdb.com/api/java/jpa/ManyToMany/ -
7/21/2019 Cours Complet2012
209/369
On peut utiliser l oprateur . si on trie sur
une colonne qui est dfinie dans une autreclasse par @Embedded
@Entitypublic class Person {
...@ElementCollection@OrderBy("zipcode.zip,
zipcode.plusFour")Set residences;
...}
Trier des relations : annotation @OrderBy
@Embeddablepublic class Address {
http://www.objectdb.com/api/java/jpa/Entity/http://www.objectdb.com/api/java/jpa/ElementCollection/http://www.objectdb.com/api/java/jpa/OrderBy/http://www.objectdb.com/api/java/jpa/OrderBy/http://www.objectdb.com/api/java/jpa/ElementCollection/http://www.objectdb.com/api/java/jpa/Entity/http://www.objectdb.com/api/java/jpa/Embeddable/http://www.objectdb.com/api/java/jpa/Embeddable/ -
7/21/2019 Cours Complet2012
210/369
p {
protected String street;protected String city;protected String state;@EmbeddedZipcode zipcode;
}
@Embeddable
public class Zipcode {String zip;protected String plusFour;}
http://www.objectdb.com/api/type/Embedded/http://www.objectdb.com/api/java/jpa/Embeddable/http://www.objectdb.com/api/java/jpa/Embeddable/http://www.objectdb.com/api/type/Embedded/ -
7/21/2019 Cours Complet2012
211/369
Concepts avancs sur la persistence
Introduction
Et le polymorphisme ?
-
7/21/2019 Cours Complet2012
212/369
Et le polymorphisme ?
Et lhritage ?
Et EJB-QL ?
Hritage
Stratgies de mapping entre classes et tables
-
7/21/2019 Cours Complet2012
213/369
Stratgies de mapping entre classes et tablesquand on a de lhritage ? Une table pour toute la hirarchie de classes ?
Une table par classe/sous-classe ?
Autres solutions ?
Un exemple !
-
7/21/2019 Cours Complet2012
214/369
-
7/21/2019 Cours Complet2012
215/369
Code de Motorcycle.java
-
7/21/2019 Cours Complet2012
216/369
Code de Car.java
-
7/21/2019 Cours Complet2012
217/369
-
7/21/2019 Cours Complet2012
218/369
Code de Coupe.java
-
7/21/2019 Cours Complet2012
219/369
Premier cas : une seule table !
Une seule table reprsente toute la hirarchie.
-
7/21/2019 Cours Complet2012
220/369
p
Une colonne de discrimination est utilisepour distinguer les sous-classes.
Cette solution supporte le polymorphisme. Dsavantages :
Une colonne pour chaque champ de chaque classe,
Comme une ligne peut tre une instance de chaqueclasse, des champs risquent de ne servir rien(nullable)
Regardons le code avec les annotations !
-
7/21/2019 Cours Complet2012
221/369
(suite)
-
7/21/2019 Cours Complet2012
222/369
Motorcycle.java annot !
-
7/21/2019 Cours Complet2012
223/369
Car.java annot
-
7/21/2019 Cours Complet2012
224/369
Roadster.java annot
-
7/21/2019 Cours Complet2012
225/369
Coupe.java annot
-
7/21/2019 Cours Complet2012
226/369
Table correspondante
-
7/21/2019 Cours Complet2012
227/369
Quelques objets persistants !
-
7/21/2019 Cours Complet2012
228/369
Et les donnes correspondantes
-
7/21/2019 Cours Complet2012
229/369
-
7/21/2019 Cours Complet2012
230/369
-
7/21/2019 Cours Complet2012
231/369
Les tables (suite)
-
7/21/2019 Cours Complet2012
232/369
Requte SQL pour avoir tous les Roadsters
Il faut faire des joins !
-
7/21/2019 Cours Complet2012
233/369
Plus la hierarchie est profonde, plus il y aurade jointures : problmes de performance !
-
7/21/2019 Cours Complet2012
234/369
-
7/21/2019 Cours Complet2012
235/369
Cas 1 : Entity Bean tends classe java
On utilise lattribut @mappedsuperclass dans
-
7/21/2019 Cours Complet2012
236/369
la classe mre Indique quaucune table ne lui sera associe
Cas 1 (les sous-classes entities)
-
7/21/2019 Cours Complet2012
237/369
-
7/21/2019 Cours Complet2012
238/369
Remarques sur le cas 1
RoadVehicle naura jamais sa propre table,
-
7/21/2019 Cours Complet2012
239/369
Les sous-classes auront leur propre table,avec comme colonnes les attributs deRoadVehicle en plus des leurs,
Si on avait pas mis @MappedSuperclass dansRoadVehicle.java, les attributs hritsnauraient pas t des colonnes dans les
tables des sous-classes.
Classe abstraite et entity bean
Une classe abstraite peut tre un entity bean
-
7/21/2019 Cours Complet2012
240/369
(avec @entity)
Elle ne peut pas tre instancie, ses sous-classes concrtes oui,
Elle aura une table ddie,
Elle pourra faire lobjet de requtes
(polymorphisme) : trs intressant !
Polymorphisme ! Exemple avec un SessionBean
-
7/21/2019 Cours Complet2012
241/369
-
7/21/2019 Cours Complet2012
242/369
Polymorphisme : code client
-
7/21/2019 Cours Complet2012
243/369
-
7/21/2019 Cours Complet2012
244/369
-
7/21/2019 Cours Complet2012
245/369
EJB QL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
246/369
EJB QL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
247/369
EJB QL : Quelques exemples (suite)
Liste toutes les commandes qui ne
-
7/21/2019 Cours Complet2012
248/369
comprennent pas (LEFT) de produit dont leprix est suprieur une certaine quantit
Table des compagnies
-
7/21/2019 Cours Complet2012
249/369
Table des employs
EJB QL : Quelques exemples (suite)
Cette requte rcupre trois compagnies :
-
7/21/2019 Cours Complet2012
250/369
Mais celle-ci uniquement deux :
Celle-l : que la troisime
EJB QL : Quelques exemples (suite)
Provoque le chargement des entities relies
-
7/21/2019 Cours Complet2012
251/369
Prend le devant sur @FetchType.LAZY
Autre exemple :
EJB QL : Quelques exemples (suite)
WHERE et requtes paramtres
-
7/21/2019 Cours Complet2012
252/369
Autre exemple avec paramtres nomms
EJB QL : Quelques exemples (suite)
Expressions
-
7/21/2019 Cours Complet2012
253/369
Le % dans le LIKE = suite de caractres, le _ =un caractre
EJB QL : Quelques exemples (suite)
MEMBER OF
-
7/21/2019 Cours Complet2012
254/369
Sous-Requtes
Fonctions sur chanes, arithmtique
-
7/21/2019 Cours Complet2012
255/369
Fonctions sur chanes, arithmtique (suite)
-
7/21/2019 Cours Complet2012
256/369
EJB QL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
257/369
EJB QL : Quelques exemples (suite)
-
7/21/2019 Cours Complet2012
258/369
-
7/21/2019 Cours Complet2012
259/369
Message-Driven Beans
Michel Buffa ([email protected]), UNSA 2002
Message-Driven Beans
Nouveaut apparue avec EJB 2.0,
mailto:[email protected]:[email protected] -
7/21/2019 Cours Complet2012
260/369
Messaging= moyen de communication lger,compar RMI-IIOP,
Pratique dans de nombreux cas,
Message-Driven beans = beans accessiblespar messagingasynchrone.
Message-Driven Beans : motivation
Performance Un client RMI IIOP attend pendant q e le ser e r
-
7/21/2019 Cours Complet2012
261/369
Un client RMI-IIOP attendpendant que le serveureffectue le traitement d'une requte,
Fiabilit
Lorsqu'un client RMI-IIOP parle avec un serveur, cedernier doit tre en train de fonctionner. S'il crashe,ou si le rseau crashe, le client est coinc.
Pas de broadcasting ! RMI-IIOP limite les liaisons 1 client vers 1 serveur
Messaging
C'est comme le mail ! Ou comme si on avait
t i i t l li t t l
-
7/21/2019 Cours Complet2012
262/369
une troisime personne entre le client et leserveur !
Messaging
A cause de ce "troisime homme" les performances ne
sont pas toujours au rendez vous !
-
7/21/2019 Cours Complet2012
263/369
sont pas toujours au rendez-vous ! Message Oriented Middleware (MOM) est le nom
donn aux middlewares qui supportent le messaging. Tibco Rendezvous, IBM MQSeries, BEA Tuxedo/Q, Microsoft
MSMQ, Talarian SmartSockets, Progress SonicMQ, FioranoFioranoMQ,
Ces produits fournissent : messages avec garantie delivraison, tolrance aux fautes, load-balancing desdestinations, etc
The Java Message Service (JMS)
Les serveurs MOM sont pour la plupart
propritaires pas de portabilit des
-
7/21/2019 Cours Complet2012
264/369
propritaires : pas de portabilit desapplications !
JMS = un standard pour normaliser les
changes entre composant et serveur MOM, Une API pour le dveloppeur,
Un Service Provider Interface (SPI), pour rendreconnecter l'API et les serveurs MOM, via les drivers
JMS
JMS : Messaging Domains
Avant de faire du mesaging, il
faut choisir un domaine
-
7/21/2019 Cours Complet2012
265/369
faut choisir un domaine Domaine = type de messaging
Domaines possibles Publish/Subscribe (pub/sub) : n
producteurs, n consommateurs(tv)
Point To Point (PTP) : nproducteurs, 1 consommateur
JMS : les tapes
1. Localiser le driver JMS lookup JNDI. Le driver est une connection factory
C S
-
7/21/2019 Cours Complet2012
266/369
2. Crer une connection JMS obtenir une connection partir de la connection factory
3. Crer une session JMS
Il s'agit d'un objet qui va servir recevoir et envoyer des messages.
On l'obtient partir de la connection.4. Localiser la destination JMS
Il s'agit du canal, de la chane tl ! Normalement, c'est rgl par ledployeur. On obtient la destinationvia JNDI.
5. Crer un producteur ou un consommateur JMS
Utiliss pour crire ou lire un message. On les obtient partir de ladestinationou de la session.
6. Envoyer ou recevoir un message
JMS : les tapes
-
7/21/2019 Cours Complet2012
267/369
JMS : les interfaces
-
7/21/2019 Cours Complet2012
268/369
-
7/21/2019 Cours Complet2012
269/369
-
7/21/2019 Cours Complet2012
270/369
Intgrer JMS et les EJB
Pourquoi crer un nouveau type d'EJB ?
P i i dl l t il
-
7/21/2019 Cours Complet2012
271/369
Pourquoi ne pas avoir dlgu le travail unobjet spcialis ?
Pourquoi ne pas avoir augment lescaractristiques des session beans ?
Parce que ainsi on peut bnficier de tous lesavantages dj rencontrs : cycle de vie,
pooling, descripteurs spcialiss, codesimple
Qu'est-ce qu'un Message-Driven Bean ?
Un EJB qui peut recevoir des messages Il consomme des messages depuis les queues ou
-
7/21/2019 Cours Complet2012
272/369
Il consomme des messages depuis les queues outopics, envoys par les clients JMS
Qu'est-ce qu'un Message-Driven Bean ?
Un client n'accde pas un MDB via une interface, ilutilise l'API JMS,
-
7/21/2019 Cours Complet2012
273/369
Un MDB n'a pas d'interface Home, Local Home,Remote ou Local,
Les MDB possdent une seule mthode, faiblement
type : onMessage() Elle accepte un message JMS (BytesMessage,
ObjectMessage, TextMessage, StreamMessage ouMapMessage)
Pas de vrification de types la compilation.
Utiliser instanceofau run-time pour connatre le type dumessage.
Les MDB n'ont pas de valeur de retour Ils sont dcoupls des producteursde messages.
-
7/21/2019 Cours Complet2012
274/369
Qu'est-ce qu'un Message-Driven Bean ?
Le consommateur (celui qui peut les dtruire)
des messages est en gnral le Container
-
7/21/2019 Cours Complet2012
275/369
des messages est en gnral le Container C'est lui qui choisit d'tre durable ou non-durable,
S'il est durable, les messages rsistent au crash duserveur d'application.
Dvelopper un Message-Driven Bean
Les MDBs doivent implmenterpublic interface javax.jms.MessageListener {
public void onMessage(Message message);
}
-
7/21/2019 Cours Complet2012
276/369
}
public interface javax.ejb.MessageDrivenBean
extends EnterpriseBean {
public void ejbRemove()
throws EJBException;
public void setMessageDrivenContext(MessageDrivenContext ctx)
throws EJBException;
}
La classe d'implmentation doit fournir une mthodeejbCreate()qui renvoit voidet qui n'a pasd'arguments.
Dvelopper un Message-Driven Bean
Mthodes qui doivent tre implmentes onMessage(Message)
-
7/21/2019 Cours Complet2012
277/369
onMessage(Message) Invoque chaque consommation de message
Un message par instance de MBD, poolingassur par le container
setMessageDrivenContext(MessageDrivenContext)
Appele avant ejbCreate, sert rcuprer lecontexte.
Ne contient que des mthodes lies auxtransactions
Dvelopper un Message-Driven Bean
-
7/21/2019 Cours Complet2012
278/369
Un exemple simple
Un MDB qui fait du logging, c'est dire affiche
des messages de textes l'cran chaque fois
-
7/21/2019 Cours Complet2012
279/369
des messages de textes l cran chaque foisqu'il consomme un message. Utile pour dbugger.
Rappel : pas d'interfaces !
La classe du bean
-
7/21/2019 Cours Complet2012
280/369
La classe du bean (suite)
-
7/21/2019 Cours Complet2012
281/369
Question ?
Comment sait-on quelle queue ou quel topic de
messages le bean consomme ?
-
7/21/2019 Cours Complet2012
282/369
messages le bean consomme ? Cela n'apparat pas dans le descripteur !
C'est fait exprs pour rendre les MDB
portables et rutilisables. L'information se trouve dans
l@ActivationConfigProperty au dbut du code
Exemple de descripteur spcifique, tir
d'un autre exemple (Borland)
-
7/21/2019 Cours Complet2012
283/369
HelloEJBQueue
serial://jms/q
serial://jms/xaqcf
20
2
HelloEJBTopic
serial://jms/t
serial://jms/tcf
20
2
Le client (1)
import javax.naming.*;
import javax.jms.*;import java.util.*;
-
7/21/2019 Cours Complet2012
284/369
p j ;
public class Client {
public static void main (String[] args) throws Exception {
// Initialize JNDI
Context ctx = new InitialContext(System.getProperties());
// 1: Lookup ConnectionFactory via JNDI
TopicConnectionFactory factory =
(TopicConnectionFactory)
ctx.lookup("javax.jms.TopicConnectionFactory");
// 2: Use ConnectionFactory to create JMS connection
TopicConnection connection =
factory.createTopicConnection();
Le client (2)
// 3: Use Connection to create session
TopicSession session = connection.createTopicSession(false, Session.AUTO ACKNOWLEDGE);
-
7/21/2019 Cours Complet2012
285/369
, _ );
// 4: Lookup Destination (topic) via JNDI
Topic topic = (Topic) ctx.lookup("testtopic");
// 5: Create a Message Producer
TopicPublisher publisher = session.createPublisher(topic);
// 6: Create a text message, and publish it
TextMessage msg = session.createTextMessage();
msg.setText("This is a test message.");
publisher.publish(msg);}
}
Concepts avancs
Transactions et MBD,
La production et la consommation du message sont dans deuxtransactions spares
-
7/21/2019 Cours Complet2012
286/369
p gtransactions spares
Scurit, Les MDB ne reoivent pas les informations de scurit du
producteur avec le message. On ne peut pas effectuer lesoprations classiques de scurit sur les EJB.
Load-Balancing, Modle idal : les messages sont dans une queue et ce sont
les MDB qui consomment, d'o qu'ils proviennent.
Comparer avec les appels RMI-IIOP pour les session et entitybeans, ou on ne peut que faire des statistiques
Concepts avancs
Consommation duplique dans les
architectures en clusters : utiliser une queue auli d' t i i t l
-
7/21/2019 Cours Complet2012
287/369
architectures en clusters : utiliser une queue aulieu d'un topic si on veut que le message nesoit consomm qu'une fois !
Chaque container est un consommateur !
Concepts avancs
-
7/21/2019 Cours Complet2012
288/369
Piges !
Ordre des messages
Le serveur JMS ne garantit pas l'ordre de livraisondes messages
-
7/21/2019 Cours Complet2012
289/369
g pdes messages.
L'appel ejbRemove() n'est pas garanti,comme pour les session beans statelessA cause du pooling, En cas de crash.
Messages empoisonns (poison messages)
A cause des transactions un message peut nejamais tre consomm
Piges !
Messages empoisonns (poison messages)
A cause des transactions un message peut nej i t
-
7/21/2019 Cours Complet2012
290/369
g pjamais tre consomm
MDB empoisonn !
package examples;
import javax.ejb.*;
import javax.jms.*;
-
7/21/2019 Cours Complet2012
291/369
public class PoisonBean
implements MessageDrivenBean, MessageListener {
private MessageDrivenContext ctx;
public void setMessageDrivenContext(MessageDrivenContext ctx) {
this.ctx = ctx;
}
public void ejbCreate() {}public void ejbRemove() {}
...
MDB empoisonn !
...
public void onMessage(Message msg) {
try {System.out.println("Received msg " + msg.getJMSMessageID());
-
7/21/2019 Cours Complet2012
292/369
y p ( g g g g ());
// Let's sleep a little bit so that we don't see rapid fire re-sends of the message.
Thread.sleep(3000);
// We could either throw a system exception here or
// manually force a rollback of the transaction.
ctx.setRollbackOnly();
}
catch (Exception e) {
e.printStackTrace();
}}
}
MDB empoisonn !
Solutions
Ne pas lever d'exception,Utili d t ti l b
-
7/21/2019 Cours Complet2012
293/369
p p Utiliser des transactions gres par le bean, non par
le container,
Certains serveurs peuvent configurer une "poison
message queue" ou possder un paramtre "nbmax retries"
-
7/21/2019 Cours Complet2012
294/369
Comment renvoyer des rsultats
l'expditeur du message ?
Nanmoins, des problmes se posent si le
client est lui-mme un EJB de type statefulsession bean
-
7/21/2019 Cours Complet2012
295/369
ypsession bean Que se passe-t-il en cas depassivation?
Perte de la connexion la destination temporaire!
Solution : ne pas utiliser d'EJB SSB commeclient! Utiliser une Servlet ou un JSP
Autre solution : configurer un topic permanentpour les rponses, au niveau du serveur JMS.
Comment renvoyer des rsultats
l'expditeur du message ?
-
7/21/2019 Cours Complet2012
296/369
Comment renvoyer des rsultats
l'expditeur du message ?
D'autres solutions existent
JMS propose deux classes
-
7/21/2019 Cours Complet2012
297/369
p pjavax.jms.QueueRequestoretjavax.jms.TopicRequestorqui
implmentent une pattern simplequestion/rponse
Solution bloquante, pas de gestion detransactions
Le futur : invocation de mthode asynchrone
-
7/21/2019 Cours Complet2012
298/369
Gestion de transactions
Service cl pour le dveloppement ct serveur,
Permet des applications de fonctionner de manireb t
-
7/21/2019 Cours Complet2012
299/369
robuste,
Les transactions sont trs utiles lorsqu'on effectue desoprations de persistance, comme des mises--joursdans une base de donnes
Dans ce chapitre nous prsentons le concept detransaction et sa mise en application au sein des EJB.
Motivation pour les transactions
Oprations atomiques, bien que composes de
plusieurs petites oprations Ex : transfert de compte compte bancaire : on
-
7/21/2019 Cours Complet2012
300/369
p p p Ex : transfert de compte compte bancaire : on
enlve sur un compte, on dpose sur l'autre
Si une des deux oprations choue, perte de
cohrence ! On veut que soit les deux oprations russissent,
mais si une d'elles choue, on annule le tout et onremet les comptes dans l'tat initial !
On dit que les deux oprations forment une seule etmme transaction!
Traitement par exceptions
On peut s'en sortir en grant des exceptionstry {
// retirer de l'argent du compte 1
-
7/21/2019 Cours Complet2012
301/369
} catch (Exception e){
// Si une erreur est apparue, on arrte.
return;
}
try {
// Sinon, on dpose l'argent sur le compte 2
} catch (Exception e){
// Si une erreur est apparue, o s'arrte, mais avant, on redpose
//l'argent sur le compte 1
return;
}
Qu'en pensez-vous ?
Traitement par exceptions
Et si on choue la dernire opration et qu'on
arrive pas remettre l'argent sur le compte 1 ?
-
7/21/2019 Cours Complet2012
302/369
p g p Et si au lieu d'un traitement simple on a un
gros traitement faire qui se compose de 20
oprations diffrentes ? Comment on teste tous les cas d'erreur ?
Panne rseau ou panne machine
-
7/21/2019 Cours Complet2012
303/369
Panne rseau ou panne machine
Le rseau plante, le client reoit une RMI
Remote ExceptionL' t i t t ' l
-
7/21/2019 Cours Complet2012
304/369
L'erreur est intervenue avantqu'on enlvel'argent, ou aprs? Impossible de savoir
Peut-tre que le SGBD s'est crash ? Lamachine ? La BD est peut-tre devenueinconsistante ?
Le traitement par Exception est vraimentinacceptable ici, il n'est pas suffisant!
Partage concurrent de donnes
-
7/21/2019 Cours Complet2012
305/369
Partage concurrent de donnes
Plusieurs clients consultent et modifient les
mmes donnes
-
7/21/2019 Cours Complet2012
306/369
On ne peut tolrer de perte d'intgrit desdonnes !
Problmes rsolus par les t ransact ions!
Un transaction est une srie d'oprations qui
apparaissent sous la forme d'une largeopration atomique.
-
7/21/2019 Cours Complet2012
307/369
Soit la transactionrussit, soit elle choue. Traduire par "toutes les oprations qui la
composent"
Les transactions s'accordent avec les pannesmachines ou rseau,
Rpondent au problmes du partage dedonnes.
Un peu de vocabulaire
Objet ou composant transactionel Un composant bancaire impliqu dans une transaction. Un
EJB compte bancaire, un composant .NET, CORBA
-
7/21/2019 Cours Complet2012
308/369
Gestionnaire de transaction Celui qui en coulisse gre l'tat de la transaction
Ressource L'endroit o on lit et crit les donnes : un DB, une queue demessages, autre
Gestionnaire de ressource Driver d'accs une BD, une queue de message
Implmentent l'interface X/Open XA, standard de factopour lagestion de transactions
Les proprit ACID Atomicit
Nombreux acteurs : servlet, corba, rmi-iiop, ejbs, DB Tousvotent pour indiquer si la transaction s'est bien passe
Consistance
-
7/21/2019 Cours Complet2012
309/369
Le systme demeure consistent aprs l'excution d'unetransaction (comptes bancaires ok!)
Isolation Empche les transactions concurrentes de voir des rsultats
partiels. Chaque transaction est isoledes autres. Implment par des protocoles de synchronisation bas-niveau
sur les BDs
Durabilit Garantit que les mises jour sur une BD peuvent survivre un
crash (BD, machine, rseau) En gnral, on utilise un fichier de log qui permet de faire des
undospour revenir dans l'tat avant le crash.
Modles de transactions
Il existe deux modles
1. Flat transactionsou transactions plat
-
7/21/2019 Cours Complet2012
310/369
Supportes par les EJBs
2. Nested transactionsou transactions
imbriques Non supportes par les EJBs pour le moment
Flat transactions
Modle le plus simple.
Aprs qu'une transaction ait dmarr, on effectue desoprations
-
7/21/2019 Cours Complet2012
311/369
oprations
Si toutes les oprations sont ok, la trans