Chapitre 3: Architectures distribuées EntrepriseJavaBeans (EJB) Limitationsdesarchitecturesn-tiers classiques • leserveurd’applicationconstituelapierreangulairedel'architecture etsetrouvesouventfortementsollicitéetilestdifficilederépartirla chargeentreclientsetserveur. • Onseretrouveconfrontéauxépineuxproblèmesde dimensionnementserveuretdegestiondelamontéeencharge rappelantl'époquedesmainframes. • Etlessolutionsmisesenœuvresontrelativementcomplexesà mainteniretlaréutilisationdescomposantsestpresqueimpossible. Verslesarchitecturesn-tiersdistribuées Entreprise Java Beans ArchitecturedesEJB Enterprise JavaBeans (EJB) • est une architecture distribuée offrant des composants logiciels déployés côté serveur. • Cette architecture propose un cadre pour créer des composants distribués et facilement réutilisables. ArchitecturedesEJB • Les EJB sont hébergés au sein d'un conteneur EJB évoluant dans un contexte transactionnel. • Ils permettent de : 1. représenter des données (EJB Entity), 2. de proposer des services avec ou sans conservation d'état entre les appels (EJB session), 3. ou encore d'accomplir des tâches de manière asynchrone (EJB dit message). LesversionsdesEJB • Stateful session etStateless session • Interfaces:Home Remote LesversionsdesEJB • BeanEntitéet • ledescripteurde déploiementXML LesversionsdesEJB • Introductionde Localeinterface pourlepassage parréférence. • miseencharge desrequêtesSQL LesversionsdesEJB • Priseencharge desservicesweb, • Etdesprotocoles SOAPandHTTP. LesversionsdesEJB • Unfocussurle ease ofuse, • Remplacement desspécifications duBeanEntity parJPA, • Introductionde l’Injectiondela dépendance • Lifecycle callbacks LesversionsdesEJB • • • • Ease ofuse,again ! Unenouvelle annotationfaitson apparition: @Schedule lesméthodesdes sessionsbeans peuvent êtreappeléesdefaçon asynchrone Aveclaversion3.1,les stateful webservices serontaussisupportés. TypesdesEJB Ilexistetroistypesd'EJB : • lesbeans desession(sessionbeans) • lesbeans entité(lesentity beans) • Depuislaversion2.0desEJB,ilexisteun troisièmetypedebean :lesbeans orientés message(messagedriven beans). BeanSession • Lessessionbeans peuventêtrededeux types :sansétat(stateless)ouavecétat (stateful). • Lesbeans desessionsansétatpeuvent êtreutiliséspourtraiterlesrequêtesde plusieursclients. • Lesbeans desessionavecétatnesont accessiblesquelorsd'unouplusieurs échangesaveclemêmeclient. BeanEntité Lesbeans entitésassurentlapersistancedesdonnées.Il existedeuxtypesd'entity bean : • persistancegéréeparleconteneur(CMP:Container Managed Persistence).Avecunbean entitéCMP (container-managed persistence),c'estleconteneur d'EJBquiassurelapersistancedesdonnées. • persistancegéréeparlebean (BMP:BeanManaged Persistence).Unbean entitéBMP(bean-managed persistence),assurelui-mêmelapersistancedes donnéesgrâceàducodeinclusdanslebean. Message-driven Bean • Lesbeans orientésmessages(messagedriven beans)peuventêtreutilisésdansun contexted’appelsasynchrones. Avantages • Lesservices (systemlevel) sontassuréspar leconteneurEJB • Encapsulationde lalogiquemétier • Réutilisationde lalogiquemétier Session Bean SessionBean Unbean sessionest untyped'EJBqui: • implémente l'interface SessionBean •représentel'état d'unseulclientdans unserveur. LestypesdeSessionBean Ilexiste deux typesdebeans session, • Stateful (avecétat) • stateless.(sans état) Stateless Utiliser unbean sessionsansétat (stateless)si: • Le bean n’enregistre pasdesdonnées d’unclient • le bean doitfaire unappel deméthode. • le bean estutilisé pourextraire des données d'une basededonnées sans persistance danslasession. • Pourconsulter enlecture seule des données persistantes. Stateful Utiliser unbean sessionavec état(stateful)si: • Le bean enregistre desdonnées d’unseul client particulier pendantla durée d’appel deplusieurs invocations deméthodes (comme unesessiond’unnavigateur Web). • Le même Beanestutilisé pourservir tous les appelsdumême client Stateless Session Bean Stateless SessionBean:cycledevie Un java bean stateless a deux états possibles ; soit il n'existe pas ( "état inexistant" ) soit il est dans un "état prêt"; il ne peut pas être dans un "état passif » 1. si le besoin de se servir d'un java bean session stateless se fait sentir, le conteneur d'EJB crée et maintient un pool de java beans session stateless, exécute toutes les injections de dépendance et invoque la méthode annotée avec @PostConstruct si elle existe. 2. Le java bean est, à partir de ce moment, dans l' "état prêt " à l'emploi (i.e qu' un client peut faire appel à ce java bean). 3. A la fin du cycle de vie, le conteneur d'EJB appelle la méthode annotée avec @PreDestroy (s' il en existe une) et ainsi l'instance du java bean est mise à la disposition du ramasse miette (garbage collection) . InterfaceLocalouRemote • Annotations • @javax.ejb.Local • @javax.ejb.Remote • Exemple: importjavax.ejb.Remote; @Remote publicinterfaceCalculatriceItf{ publicdoubleadd(doublev1,doublev2); publicdoublesub(doublev1,doublev2); publicdoublemul(doublev1,doublev2); publicdoublediv(doublev1,doublev2); } Stateless SessionBean:Implémentation Annotations @Stateless Exemple : Clientlocal • TypiquementuneservletouuneJSPcolocaliséesurlemême serveurquelebean • Mécanismedit"injectiondedépendance • attributdutypedel'interface • Annoté@EJB Exemple: publicclassClientServletextendsHttpServlet{ @EJB privateCalculatriceItf myBean; publicvoidservice(HttpServletRequestreq,HttpServletResponseresp){ resp.setContentType("text/html"); PrintWriterout=resp.getWriter(); double result=myBean.add(12,4.75); out.println("<html><body>"+result+"</body></html>");} } Clientdistant • • • • Récupérationdelaréférenceversl'annuaireJNDI Recherchedubeandansl'annuaire Appeldesméthodesdubean Exemple: public class Client { public staticvoidmain(String args[])throwsException { javax.naming.Context ic =newjavax.naming.InitialContext(); CalculatriceItf bean =(CalculatriceItf) ic.lookup("foobar"); double res=bean.add(3,6); }} Stateful Session Bean Stateful SessionBean:cycledevie 1. 2. 3. 4. le client initie le cycle de vie d'un bean session stateful en obtenant sa référence. Ainsi le container exécute toutes les Injections de Dépendance, invoque la méthode ayant l'annotation @PostConstruct s' il en existe une; à partir de là le bean session stateful passe à l' "état prêt" i.e qu'il peut-être utilisé par un client. Pendant le temps où le java bean est dans l'"état prêt", le conteneur d'EJB peut le faire passer dans un état passif. Alafinducycledeviedujava bean,leclient invoquelaméthodeavecl'annotation @Remove, et leconteneurd'EJBquantàluifaitappelà celle ayant l'annotation @PreDestroy; Stateful SessionBean:Implementation SessionBeanStateful • 2annotationsprincipales: • @Stateful:déclareunbeanavecétat • @Remove:définitlaméthodedefindesession,lasession expireàl'issudel'exécutiondecetteméthode • Exemple @Stateful public class CartBean implements CartItf{ private Listitems =newArrayList();privateList quantities =newArrayList(); public voidaddItem(intref,intqte){...}public voidremoveItem( intref){...} @Remove public voidconfirmOrder() {...} } Singleton Session Bean SingletonSessionBean il est possible de définir un EJB qui aura les caractéristiques du design pattern singleton : • le conteneur garantit qu'une seule instance de cet EJB sera utilisable et partagée dans le conteneur. • Un EJB singleton est utilisé principalement pour partager ou mettre en cache des données dans l'application. SingletonSessionBean:Avantages L'avantage des EJB Singleton c'est qu'ils offrent tous les services d'un EJB : sécurité, transaction, injection de dépendances, gestion du cycle de vie … SingletonSessionBean Message Driven Bean MessageDriven Bean:Casd’utilisation UtiliserunMessage Driven Beansi: • LeBeandoitêtre exécutésiunmessage arrive. • Lemessagedoitêtre traitéd’unemanière asynchrone. MessageDriven Bean:Implementation • Considéronslacréation d’unbean quipermet d’extraireuntexteenvoyé parunclientpourqu’il soitutiliséparuneautre application. • Pourcommencer,ilfaut utiliserl’annotation @MessageDriven,en spécifiantletypede messagequiserapriseen charge(jms/Queue) MessageDriven Bean:Implementation • Parlasuiteondéfinitune classepublique implémentantl’interface MessageListener,qui contientlamethode onMessage(Message msg)responsabledela logiquemétier. The JMS API Programming Model The basic building blocks of a JMS application consist of • Administered objects: connection factories and destinations • Connections : A connection encapsulates a virtual connection with a JMS provider. • Sessions : A session is a single-threaded context for producing and consuming messages. • Message producers : A message producer is an object that is created by a session and used for sending messages to a destination. • Message consumers : message consumer is an object that is created by a session and used for receiving messages sent to a destination. • Messages : abasic formatthat is simple buthighly flexible, allowing you tocreate messages that matchformatsused by non-JMSapplications onheterogeneous platforms. JMSMessaging Models In publish-and-subscribe messaging, one producer can send a message to many consumers through a virtual channel called a topic. The point-to-point messaging model allows JMS clients to send and receive messages both synchronously and asynchronously via virtual channels known as queues. Retoursurlepackaging • Unfichierd’archived’entreprise(EAR) • • • • • ModuleEJB(.jar) Moduleweb(.war) Applicationcliente(.jar) Module‘ResourceAdapter’(.rar) .... • Chaquefichierd’archive(ear,war,raroujar)contientundescripteur dedéploiement(fichierxml) Retoursurlepackaging • Ledescripteurdedéploiementsertàdéfinirlesparamètresde déploiementd’uneapplication(ear)oud’unmodule • Exemples: • application.xml:déclarerl’ensembledesmodulesintégrésdansunfichier (.ear) • ejb-jar.xml:configurerlesEJBdansunmoduled’unfichier(.jar) • web.xml:configurerlesparamètresdumoduleweb(servlets,JSP, TagLib..)d’unfichier(.war) Structured’unfichierEAR Racine de l’application (.ear) META-INF application.xml sun-application.xml jboss-application.xml Module Web (.war) Module application Cliente (.jar) Module EJB (.jar) Module Ressource Adapter (.rar)