Post on 17-Nov-2021
Chapitre 3: Architectures distribuéesEntrepriseJavaBeans (EJB)
Limitationsdesarchitecturesn-tierssimple
• leserveurd’applicationconstituelapierreangulairedel'architectureetsetrouvesouventfortementsollicitéetilestdifficilederépartirlachargeentreclientsetserveur.
• Onseretrouveconfrontéauxépineuxproblèmesdedimensionnementserveuretdegestiondelamontéeenchargerappelantl'époquedesmainframes.
• Deplus,lessolutionsmisesenœuvresontrelativementcomplexesàmainteniretlaréutilisationdescomposantsestcompliquée.
Verslesarchitecturesdistribuées
Entreprise Java Beans
ArchitecturedesEJB
Enterprise JavaBeans (EJB) est une architecture de composants logiciels côté serveur pour la plateforme de développement Java EE.Cette architecture propose un cadre pour créer des composants distribués (c’est-à-dire déployés sur des serveurs distants).
ArchitecturedesEJB
Les EJB sont écrits en Java et hébergés au sein d'un serveur applicatif permettant de représenter des données (EJB dit entité), de proposer des services avec ou sans conservation d'état entre les appels (EJB dit session), ou encore d'accomplir des tâches de manière asynchrone (EJB dit message). Tous les EJB peuvent évoluer dans un contexte transactionnel.
LesversionsdesEJB
• Stateful sessionetStatelesssession
• Interfaces:HomeRemote
LesversionsdesEJB
• BeanEntitéet• ledescripteurde
déploiementXML
LesversionsdesEJB
• Localeinterfaceet
• miseenchargedesrequêtesSQL
LesversionsdesEJB
• Priseenchargedesservicesweb,
• SOAPandHTTP.
LesversionsdesEJB
• Unfocussurleease ofuse,
• RemplacementdesspécificationsduBeanEntityparJPA,
• Introductiondel’Injectiondeladépendance
• Lifecyclecallbacks
LesversionsdesEJB
• Released in2009
TypesdesEJB
Ilexistetroistypesd'EJB :• lesbeans desession(sessionbeans)• lesbeans entité(lesentity beans)• Depuislaversion2.0desEJB,ilexisteuntroisièmetypedebean :lesbeans orientésmessage(messagedriven beans).
BeanSession
• Lessessionbeans peuventêtrededeuxtypes :sansétat(stateless)ouavecétat(stateful).
• Lesbeans desessionsansétatpeuventêtreutiliséspourtraiterlesrequêtesdeplusieursclients.
• Lesbeans desessionavecétatnesontaccessiblesquelorsd'unouplusieurséchangesaveclemêmeclient.
BeanEntité
Lesbeans entitésassurentlapersistancedesdonnées.Ilexistedeuxtypesd'entity bean :• persistancegéréeparleconteneur(CMP:Container
Managed Persistence).Avecunbean entitéCMP(container-managed persistence),c'estleconteneurd'EJBquiassurelapersistancedesdonnées.
• persistancegéréeparlebean (BMP:BeanManagedPersistence).Unbean entitéBMP(bean-managedpersistence),assurelui-mêmelapersistancedesdonnéesgrâceàducodeinclusdanslebean.
Message-driven Bean
• Laspécification2.0desEJBdéfinituntroisièmetyped'EJB:lesbeans orientésmessages(message-driven beans).
Avantages
• Lesservices(systemlevel)sontassurésparleconteneurEJB
• Encapsulationdelalogiquemétier
• Réutilisationdelalogiquemétier
Session Bean
SessionBean
Unbean sessionestuntyped'EJBqui:• implémentel'interfaceSessionBean•représente l'étatd'unseul clientdansunserveur.• Lesbeans sessionn’enregistrent paslesdonnéesdansunebasededonnéesetsontsouventassociésàunesessioncliente.
LestypesdeSessionBean
Ilexistedeux typesdebeans session,• Stateful (avecétat)• stateless.(sansétat)
Stateful
Utiliser unbean sessionavecétat(stateful)si:
• Lebean enregistre desdonnéesd’unseulclient particulier(comme unesessiond’unnavigateurWeb).
• Lebean enregistre desdonnéespendant laduréed’appeldeplusieurs invocationsdeméthodes.
• L’étatduBean représente l’étatdel’interaction entre leclientetleBean
• LeBeandoitconserver del’informationentredeux invocationsduclient
• Dédié àunclient pendanttoutesadurdevie
• LemêmeBeanestutilisé pourservir touslesappelsdumêmeclient
Stateless
Utiliser unbean sessionsansétat(stateless)si:
• Lebean n’enregistre pasdesdonnéesd’unseul client
• lebean existepourunappeldeméthodeunique.
• lebean estutilisée pourextraire desdonnéesd'unebasededonnées.
• Pourdes tâchesgénériques
• Pourconsulter enlecture seuledesdonnéespersistantes
Stateless Session Bean
Stateless SessionBean:cycledevie
Un java bean stateless a deux états possibles ; soit iln'existe pas ( "état inexistant" ) soit il est dans un "étatprêt"; il ne peut pas être dans un "état passif »Normalement, si le besoin de se servir d'un java beansession stateless se fait sentir, le conteneur d'EJB crée etmaintient un pool de java beans sessionstateless, exécute toutes les injections dedépendance et invoque la méthode annotéeavec @PostConstruct si elle existe. Le java bean est, àpartir de ce moment, dans l' "état prêt " à l'emploi i.equ' un client peut faire appel à ce java bean.A la fin du cycle de vie, le conteneur d'EJB appelle laméthode annotée avec @PreDestroy (s' il en existeune) et ainsi l'instance du java bean est mise à ladisposition du ramassemiette (garbage collection) .
InterfaceLocalouRemote• Annotations
• @javax.ejb.Local• @javax.ejb.Remote
• Exemple:importjavax.ejb.Remote;@RemotepublicinterfaceCalculatriceItf{publicdoubleadd(doublev1,doublev2);publicdoublesub(doublev1,doublev2);publicdoublemul(doublev1,doublev2);publicdoublediv(doublev1,doublev2);}
Stateless SessionBean:ImplémentationAnnotations
@StatelessExemple :
Clientlocal• TypiquementuneservletouuneJSPcolocaliséesurlemêmeserveurquelebean
• Mécanismedit"injectiondedépendance• attributdutypedel'interface• Annoté@EJBExemple:publicclassClientServletextendsHttpServlet{@EJBprivateCalculatriceItfmyBean;publicvoidservice(HttpServletRequestreq,HttpServletResponseresp){
resp.setContentType("text/html");PrintWriterout=resp.getWriter();double result=myBean.add(12,4.75);out.println("<html><body>"+result+"</body></html>");}
}
• Récupérationdelaréférenceversl'annuaireJNDI• Recherchedubeandansl'annuaire• Appeldesméthodesdubean• Exemple:
publicclassClient {public staticvoidmain(Stringargs[])throwsException {
javax.naming.Context ic=newjavax.naming.InitialContext();CalculatriceItf bean=(CalculatriceItf) ic.lookup("foobar");double res=bean.add(3,6);
}}
Clientdistant
Stateful Session Bean
Stateful SessionBean:cycledevie
le client initie le cycle de vie d'un bean session stateful en obtenant sa référence (i.e ?? ...) . 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,leclientinvoquelaméthodeavecl'annotation @Remove, etleconteneurd'EJBquantàluifaitappelà celle ayantl'annotation@PreDestroy;
Stateful SessionBean:Implementation
SessionBeanStateful
• 2annotationsprincipales:• @Stateful:déclareunbeanavecétat• @Remove:définitlaméthodedefindesession,lasessionexpireàl'issudel'exécutiondecetteméthode
• Exemple@Stateful
publicclassCartBean implements CartItf{
privateListitems=newArrayList();privateListquantities=newArrayList();
publicvoidaddItem(intref,intqte){...}publicvoidremoveItem( intref){...}
@Remove
publicvoidconfirmOrder() {...}
}
Singleton Session Bean
SingletonSessionBean
SingletonSessionBean
SingletonSessionBean
Message Driven Bean
UtiliserunMessageDriven Beansi:• LeBeandoitêtreexécutésiunmessagearrive.
• Lemessagedoitêtretraitéd’unemanièreasynchrone.
MessageDriven Bean:Implementation
• Considéronslacréationd’unbean quipermetd’extraireuntexteenvoyéparunclientpourqu’ilsoitutiliséparuneautreapplication.
• Pourcommencer,ilfaututiliserl’annotation@MessageDriven,enspécifiantletypedemessagequiserapriseencharge(jms/Queue)
MessageDriven Bean:Implementation
• Parlasuiteondéfinituneclassepubliqueimplémentantl’interfaceMessageListener,quicontientlamethodeonMessage(Messagemsg)responsabledelalogiquemétier.
The JMS API Programming ModelThe 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 sendingmessages to a destination.
• Message consumers : message consumer is an objectthat is created by a session and used for receivingmessages sent to a destination.
• Messages : abasic formatthat is simplebuthighly flexible,allowing you tocreate messages that matchformatsused bynon-JMSapplications onheterogeneous platforms.
JMSMessagingModels
In publish-and-subscribe messaging, one producer cansend a message to many consumers through a virtualchannel 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)contientundescripteurdedéploiement(fichierxml)
Retoursurlepackaging
• Ledescripteurdedéploiementsertàdéfinirlesparamètresdedé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 Module Web(.war)
Module EJB(.jar)
Module RessourceAdapter
(.rar)
Module applicationCliente(.jar)application.xml
sun-application.xmljboss-application.xml