Cours Complet2012

download Cours Complet2012

of 369

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