24/10/16 1
Transcription
24/10/16 1
24/10/16 Défini3onduBeandeSession Bean • • • • • Modélisa3ondedonnées(serializable) BeanSession BeanEn3té Message-DrivenBean … 24/10/16 A.AHMAD • Unbeansessionreprésenteunsimpleclient J2EE,celui-ciinvoquelesméthodesdubeanpour accéderauxservicesdel’applica3onJ2EE. • Pouraccéderàuneapplica3ondéployéesurun serveur,leclientinvoquelesméthodesdubean session. • Ilréaliseletravailduclient,enluicachantla complexitéapplica3veenexécutantdes opéra3onsmé3ersàl’intérieurduserveur. 130 TypedebeansSession? AdeelAhmad 131 Lasessionstateful • Lesbeansnesontpaspersistantsetnesontpas partagésparlesclients. • Ilexistedeuxtypesdebeansession: • L’étatd’unobjetconsisteenlesvaleursdeses variablesd’instance. • Dansunbeanstateful,lesvariablesd’instance représentent: – Unbeansessionestu3lisépourmeYreenplace unecommunica3onavecétat(stateful)entreun clientetunserveur. – Unbeansessionsansétat(stateless)neconserve pasl’étatdelacommunica3onavecleclient. • L’étatestmaintenupendantladuréedela sessiondubeanclient.Sileclientsupprimele bean(remove)ouquiYelaconnexion,la sessionsetermineetl’étatdisparaît. AdeelAhmad 132 Quandu3liserlesbeanssession? • Enrèglegénérale,onu3liseunbeansession danslescirconstancessuivantes: – An’importequelmoment,ununiqueclienta accèsàl’instanced’unbean. – L’étatd’unbeann’estpaspersistant,caril n’existequepourunecourtepériodedetemps (del’ordredequelquesheures). AdeelAhmad 134 – l’étatd’ununiqueclient,carleclientinteragit(" parle")avecsonbean, – cetétatestappelél’étatconversa)onnel. AdeelAhmad 133 Quandu3liserunbeanSession? • Pourimplanterlalogiquesessiond’applica3ons Web. Parexemple:saisirlesrenseignementsdelivraison etdefactura3onconcernantunclientviadespages JSP. • Pourimplanterlalogiquesessiond’applica3ons classiques. Parexemple:saisirlesrenseignementsdelivraison etdefactura3onconcernantunclient,u)lisantJFC/ Swing(applica3oncliente). AdeelAhmad 135 1 24/10/16 EtatdesBeansSessions stateful Quandu3liserlesbeanssession Stateful? • Lesbeanssessionstatefulsontappropriés danslescondi3onssuivantes: Objetssessions (répar3s) – L’étatdubeanreprésentel’interac3onentrele beanetunclientspécifique. – Lebeanabesoindeconserverdesinforma3ons concernantleclientàtraverslesdifférentes invoca3onsdeméthodes. – Lebeanestunmédiateurentreleclientetles autrescomposantsdel’applica3on,présentant ainsiunevuesimplifiéeauclient. – Derrièrelascène,lebeangèreleworkflowde plusieursbeansenterprises. AdeelAhmad obj1:nom (Remote) Client2 obj2:nom (Remote) inst2:nomBean Client3 obj3:nom (Remote) inst3:nomBean 136 • Pouraméliorerlaperformance,onpeut choisirunbeanstatelesspourlesraisons suivantes: • exemple,onpeutu)liserunebeanstatelesspour envoyerune-mailquiconfirmeunecommandeenligne. – Lebeanextraitd’unebasededonnéesun ensemblededonnéesenlectureseule,quiest souventu3liséparlesclients(cache). inst1:nomBean AdeelAhmad 137 EtatdesBeansSessions stateless Instancessessions ContainerEJB (sansétat) délègueàn’importequelle instancedisponible Unseul Objetsession (répar3) – L’étatdubeannepossèdepasdedonnées rela3vesàunclientenpar3culier. – Lorsd’unesimpleinvoca3ondeméthode,lebean réaliseunetâchegénériquepourtouslesclients. Instancessessions (avecétat) Client1 Quandu3liserlesbeanssession Stateless? ContainerEJB délèguetoujoursà lamêmeinstance Client1 Client2 inst1:nomBean obj2:nom (Remote) inst2:nomBean Client3 inst3:nomBean • Untelbeanpeutrécupérerleslignesd’unetablequi représententlesproduitsquiontétévenduscemois. AdeelAhmad 138 AdeelAhmad 139 Lasessionstateless • Commelesbeansstatelesspeuventsupporter demul3plesclients,ilspermeYentd’offrirune meilleureextensibilitédesapplica3onsJ2EE. • Enfait,uneapplica3onJ2EEnenécessiteque trèspeudebeansstatelessparrapportaux beansstatefulpoursupporterlamêmecharge declients. • LeconteneurEJBn’écrirajamaisdebeans statelessenmémoiresecondaire.Ainsi,ils peuventoffrirdemeilleuresperformancesque lesbeansstateful. AdeelAhmad 140 LesEnterpriseJavaBeans AdeelAhmad 141 2 24/10/16 LemodèleEJB • “J2EEdefinesthestandardfordeveloping component-basedmul33erenterprise applica3ons.J2EEsimplifiesbuilding enterpriseapplica3onsthatareportable, scalable,andthatintegrateeasilywithlegacy applica3onsanddata.” [hYp://java.sun.com/j2ee/] AdeelAhmad 142 Lesrèglesmé3er – uneen3témé3erreprésentelesinforma3ons conservéesparl’Entreprise – unprocessusmé3erdéfinitlesinterac3onsd’un u3lisateuravecdesen3tésmé3er. • Lesrèglesbusinesspeuventêtreextraiteset placéesdansunmoteurderègles(système expert,etc.),puismanipuléesviaunEJB: nouvellestendances. 144 Leprocessusmé3er AdeelAhmad 143 • Ellepossèdeunétat,conservéen permanence(SGBD),modifiégénéralement parlesprocessusmé3er. • Exemple: – Uneen3téCommandeencapsuleralesdonnées descommandesd’unclientavecsesrègles mé3ers(i.e.formatageduN°decommande, vérifica3onducompteduclient,etc.) AdeelAhmad 145 LestypesdebeansEnterprise • Ilmodifiel’étatdesen3tésmé3eretpossèdeson propreétat,souventprovisoire. • Unprocessusmé3erestdédiéàunacteur (u3lisateurouprogramme)quiengageune conversa3onaveclesystème: • Lesen3tésetprocessusmé3ersontimplémentés auchoixpartroistypesdebeans: – lesbeansen3té:crééspourvivrelongtempsetêtre partagésparplusieursclients,souventu3liséspourla ges3ondesdonnées, – lesbeanssession:créésenréponseauxrequêtesd’un seuloudeplusieursclients,souventu3lisésdansles processus. – lesbeansorientésmessagespourgérerla communica3oninter-composants processusmé)erconversa)onnel • Exemple: Unepersonnequire3redel’argentàundistributeur communiqueavecleDABautraversdeplusieurs écrans.Ceux-ciguidentleprocessusvisantàvaliderla transac3onetàdistribuerl’argent. AdeelAhmad – L’EJBServercon3entl’EJBContaineretluifournitlesservices debasniveau. – L’EJBContainerestl’environnementd’exécu3ondes composantsEnterpriseJavaBeans(interfaceentrelebeanet l’extérieur). – Lesclientsneseconnectentpasdirectementaubean,maisà unereprésenta3onfournieparleconteneur.Celui-cirouteles requêtesverslebean. L’en3témé3er • Lesapplica3onsàbased’EJBorganisentles règlesmé3ersencomposants: AdeelAhmad • LemodèleEnterpriseJavaBeansestbasésurleconcept WriteOnce,RunEverywherepourlesserveurs. • LemodèleEJBreposesurl’architectureencouches suivante: • LesEJBsorientésmessagessontuneclasseàpart desEJBsetsontdéfinisenrela3onavecl’APIJava MessageService 146 AdeelAhmad 147 3 24/10/16 Lesbeansetlestransac3ons Lesbeansetlestransac3ons • Dansuneapplica3onJ2EE,onu3lisedestransac3ons pour: • Lestransac3onsdistribuéespeuventêtrededeuxtypes: – Container-managedtransac6ons.LeconteneurEJBcontrôlel’intégritédevos transac3onssansquevousdeviezeffectueruncommitouunrollback. – combinerl’envoietlarécep3ondemessages(JMS), – Effectuerdesmisesàjoursdebasesdedonnéeset – Réaliserd’autresopéra3onsdeges3onderessources(EAI). • • • • • Cesressourcespeuventêtreaccédéesàpar3rde mul3plescomposantsd’applica3onàl’intérieurd’une mêmetransac3on. • Parexemple: uneservletpeutdémarrerunetransac3onpouraccéderàde mul3plesbasesdedonnées,invoquerunenterprisebeanqui envoiunmessageJMS,invoquerunautreenterprisebean pourmodifierunERPenu3lisantl’architectureJ2EE Connector,etfinalementfaireuncommitdelatransac3on. AdeelAhmad LesCMTsontrecommandéespourlesapplica3onsJ2EEquiu3lisentJMS. VouspouvezspécifierdesaYributsdetransac3onpourlesméthodesdesbeans. U3liserl’aYributRequiredpours’assurerqu’uneméthodefaitpar3ed’unetransac3on. Lorsqu’unetransac3onestencoursetqu’uneméthodeestappelée,celle-ciseraincluse danslatransac3on;siaucunetransac3onn’estencours,alorsunenouvelletransac3on seradémarréeavantl’appeldelaméthodeetseravalidée(commit)lorsquelaméthode seraterminée. – Bean-managedtransac6ons.EllespermeYentaubeandecontrôlerfinementles transac3onsvial’interfacejavax.transac)on.UserTransac)on,permeYantd’u3liser sespropresméthodesdecommitetderollbackafindedélimiterlesfron3èresdes transac3ons. 148 AdeelAhmad Lesclientsvis-à-visduconteneur EJB • U3liserJNDIpourtrouveruncomposant: Home Cycledevied’unEJB • Définirletypedel’EJB: – UnEJBsession, – UnEJBEn3té – UnEJBmessage – JavaNamingandDirectoryInterface – Abstrac3ondesservicesdenommage(CosNaming, etc.)etdesservicesd’accèsauxstructures arborescentes(répertoires,annuaireLDAP,etc.) • Développerlebean – Ecrirel’interfaceHomeetl’interfaceRemote – Implémenterlesservicesdubeandansuneclasse • Déployerlebeansurunserveurd’applica3ons • Accèsauxservicesducomposant:Remote • Appelerlesméthodesducomposantà distancepourréaliserlesservices. Remote Client Code Client Stub 149 – – – – Créerunedescrip3ondudéploiement(souventenXML) Nommerl’EJB(souventunJNDIname) Assemblerl’EJBdansunfichierjar(+librairies,+classesu3litaires) U3liserl’ou3ldedéploiementduserveurd’applica3ons • AYendrequel’EJBsoitsollicitéparunerequête. EJBContainer JNDI AdeelAhmad 150 AdeelAhmad 151 Home Structured’unBeanEnterprise Session StructuredesBeansEnterprise • LaclassebeanenterpriseestuneclasseJava: <<InterfaceHome>> MonEJB_Home – lesméthodesmé3erset – lesméthodesducycledevied’unobjet, – nomdelaclasse:nomEJB <<InterfaceRemote>> MonEJB_Remote create() remove() AjouterUnProduit() Acheter() • L’APIclient-vue: – interfacehome:create(),remove(),find() (uniquementEn3té)et <<classebeanenterprise>> MonEJB_EJB • nomdelaclasse:nomHome – interfaceremote: ejbCreate() ejbRemove() AjouterUnProduit() Acheter() • nomdelaclasse:nomRemote(Sunpréconisenom) AdeelAhmad mé3er 152 AdeelAhmad mé3er 153 4 24/10/16 InterfaceBeanHome L’InterfaceHome • EllecontrôlelecycledeviedesobjetsEJBs. • LesméthodespermeYentdecréer,de localiser,etdesupprimerdesEJBs. • Ellessonthéritéesdesinterfaces javax.ejb.EJBHome et java.rmi.Remote AdeelAhmad • create=>ejbCreate – Lacréa3oneffec3vedel’EJBestréaliséeparle constructeurdeMonEJB(ini3alisa3ondel’étatpar défautdel’EJB). – Laméthodecreateneremplacepasle constructeurdel’objet,ellesertuniquementà ini3aliseretchargerlesressourcesdel’EJB,etc. AdeelAhmad 155 ExempledebeanHome • Ilpeutyavoirplusieursméthodescreate() avecunnombredeparamètresvariables. • Unclientrécupèrel’interfaceRemotedu beancréé. • Lesméthodescreateretournentsoit l’interfaceRemote,soitunecollec3onde tellesinterfaces. 156 InterfaceBeanRemote import java.rmi.*; import javax.ejb.*; public interface MonEJB_Home extends javax.ejb.EJBHome { public MonEJB_Remote create(String nomclient) throws RemoteException, CreateException; public void remove(Handle handleEJB) throws RemoteException, RemoveException; } AdeelAhmad 157 L’InterfaceRemote • Elledéfinitlesméthodesmé3ersqu’un clientpeutappelersurchaqueobjetbean enterprise. • LeBeanhéritedesinterfaces javax.ejb.EJBObject et java.rmi.Remote AdeelAhmad – Ilseranécessairededéfinirlesimplémenta3ons desméthodesdanslaclassedel’EJB: 154 InterfaceBeanHome AdeelAhmad • Associéeàun“ObjetHome”quiest automa3quementgénéréparleconteneurEJB 158 • Elledéfinitlesméthodesquipeuventêtre appeléesparlesclients – Lesméthodessontappeléessurdes“Objets distants”quisontautoma3quementgénéréspar leconteneurEJB • Pasdeconven3onsdenommage • Ilestobligatoired’implémenterdanslaclasse MonEJBlesméthodesdéclaréesdansceYe spécifica3ondumé3erdel’EJB. AdeelAhmad 159 5 24/10/16 ClasseBeanEnterprise (session) InterfaceBeanRemote • Ellespécifiedesméthodesàimplémenterpourla créa3on,lasuppressiondesobjetsmé3ersetles méthodesmé3ers. • Lesméthodesmé3ersaccèdentauxclassesu3litaires (mé3ers). • Laclassedubeansessiondoit: import java.rmi.*; import javax.ejb.*; public interface MonEJB_Remote extends javax.ejb.EJBObject { boolean AjouterUnProduit(int numeroProduit) throws java.rmi.RemoteException; boolean Acheter() throws java.rmi.RemoteException; } – êtredéclaréepublic, – contenirunconstructeurpubliquesansparamètres, – nepasêtrefinalouabstract – nepasdéfinirdedestructeurs(finalize) • Laclassedubeansessionimplémentel’interface javax.ejb.SessionBean AdeelAhmad 160 InterfaceBeanEnterprise • Leclientd’unEJBsessiondevrarécupérerl’interface Homedel’EJBviaJNDI { public MonEJB_EJB(){ super(); Ini)alContextic=newIni)alContext(); MonEJB_Homeobjhome=(MonEJB_Home) ic.lookup("nomjndideejb"); } public boolean AjouterUnProduit(int numeroItem) // le code pour ajouter des items au panier // peut se connecter via JDBC. } public boolean Acheter() { // le code pour acheter.} public void ejbCreate(String nomClient) { // code d ’initialisation de l ’objet } //… plus les méthodes héritées de SessionBean } AdeelAhmad 161 Connexionàunbeansession import java.rmi.*; import javax.ejb.*; public class MonEJB_EJB implements SessionBean { AdeelAhmad 162 LesEJB3.0 • Ildevraimpéra3vementeffectuerunappelàla méthodecreate()pourrécupéreruneréférencesur l’EJB(remote). MonEJB_Remoteobjremote=objhome.create(); • Ensuiteilserapossibled’invoquerlesméthodesmé3ers del’EJB. AdeelAhmad 163 objremote.Acheter(); ArchitectureEJB3.0 • Ledéveloppementd'EJBalongtempsétéfas3dieux,nécessitantmêmedes ou3lsdegénéra3onautoma3quedecodebasés: – surdesmodèlesUMLou – surducodeJavaagrémentédecommentairesspécifiques(cf.XDoclet). • CeYenouvellemoutureéliminedenombreusesredondancestantauniveau ducodedescomposantsqu'auniveaudeleurconfigura3on. • LedéveloppementdesEJB3.0s'exprimeauseinducodesourceparlebiais d'annota3ons(ou"méta-données"). • Lecodeclientaétésimplifiéaupassage,rendantcaduquel'u3lisa3ondela no3ondeHomeuneAbstractFactorydecomposantsquiétaitimplémentée parleconteneurjusqu'àlaversionEJB2.1. AdeelAhmad 164 AdeelAhmad 165 6 24/10/16 ExempleEJB3.0 ExempleEJB3.0 packageservice.implementa3on; importjava.u3l.List; importjavax.ejb.Remote; importjavax.ejb.Stateless; importjavax.ejb.Transac3onAYribute; importjavax.ejb.Transac3onAYributeType; importjavax.jws.WebMethod; importjavax.jws.WebService; importjavax.jws.soap.SOAPBinding; importjavax.persistence.En3tyManager; importjavax.persistence.PersistenceContext; importbusiness.Signet; importbusiness.Categorie; @Remote @Stateless//Sousentendu:sessionstateless @SOAPBinding (style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED) @WebService (name="EndpointInterface", targetNamespace="hYp://www.deruelle.fr/Ges3onSignets", serviceName="MoteurRecherche") AdeelAhmad 166 publicclassMoteurRechercheBeanimplementsCatalog{ @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicList<Signet>rechercherTousSignets(){ //... } @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicStringrechercherURL(Signets){ //... } @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicList<Signet>rechercherSignets(Stringcategorie){ //... } @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicList<Signet>rechercherSignetsParTitre(Stringpar3eTitre){ //... } @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicList<Signet>rechercherSignetsParURL(Stringpar3eURL){ //... } } AdeelAhmad Lesannota3onspourEJB3?0 • • • • • LapersistanceaveclesEJB3.0 L'annota3on@RemoteexprimelefaitquenotrecomposantestinvocableparRMI @StatelesspermeYraauconteneurdecomposantsd'op3miserlerecyclagedes instancesdecomposants. @SoapBindinget@WebServicegèrentleparamétrageprotocolaireetl'encodage XMLàemployerlorsquelecomposantestsollicitéparSOAP @WebMethodpermetd'indiquerquellesméthodespeuventêtreinvoquéesà distanceparleprotocoleSOAP.Dansnotreexemple,nousavonsexposétoutesles méthodes;l'interfaceWSDLseradéduitedececodeparleconteneurd'EJBet refléteracechoix.N.B:Danslapra3que,onn'exposepassystéma3quementles méthodesdeservicesdontlestypessontcomplexesetquinécessitentune adapta3on;danscecas,ilestpossibled'ajouterdesméthodesdédiéesaux invoca3onsviaWebServicesmaisquiprennentenparamètreourenvoientdes typessimplifiés(tableaux,objetsrestreints,typesprimi3fs).Cesméthodes procèdentàl'adapta3ondetypeetinvoquentàleurtourlesméthodesnaturelles duservice. Enfin@Transac3onAYributepermetderéglerfinementladémarca3on transac3onnelledescomposants:quelleméthodenécessite/requiert/nesupporte pasd'êtreinvoquéedansunetransac3on.CeYeexigenceserainterprétéeparle conteneurdecomposantscommelanécessitéd'ini3erunenouvelletransac3on, d'enrôlerleservicedansunetransac3onexistanteouaucontrairedeleverune excep3on(oudesuspendrelatransac3on)siunetransac3onestencoursmaisque leservicenepeutpass'yintégrersansrisque. AdeelAhmad 168 LesEJBEn3tés3.0 • Ilexistedenombreusestechniquespourétabliruneconnexionentrenosservices (EJBSession)etunebasededonnéesrela3onnelle: – U3liserJDBCdirectement.Engénéral,onnelefaitpasdanslecoded'implémenta3onde l'EJBSessionlui-même,quiestcenséseconcentrersurlecodefonc3onnel,maison délèguel'accèsauxdonnéesàunecouchedédiée,lacouchedePersistance.Ilpeuts'agir d'unsimplepackagesupplémentairedanslequelplusieursclassessechargentd'envoyer lesrequêtesàlabasededonnées,delirelesrésultatsetsibesoindetransformerces résultatsenobjetsstructurés.OnqualifiesouventcesobjetsdeDAO(DataAccess Object). – DéclencherdepuislesEJBSessionunebibliothèquetechniqueappelée"frameworkde persistance"tellequeHibernate,IBa3s,uneimplémenta3ondeJDO,etc... – Enfin,lesEJBSessionpeuvents'appuyersurdesEJBEn6té.CommelesEJBSession,il s'agitdeclassespar3culièresdéployéesetgéréesparunconteneurdecomposants.Ce dernierpermetdeparamétrerlamanièredontchaqueEJBEn3téseramappésurla structurerela3onnelled'unebasededonnées(dansunetableouplusieurs);ilpermet égalementdefairedeschoixparmiplusieursstratégiesdemappingdesrela3ons,qu'il s'agissedel'héritageoudesassocia3onsentrecomposants. • lesdeuxdernièrestechniquesd'accèsàlabasesontquasi-iden3ques! AdeelAhmad 169 ExempleEJBEn3té3.0 • LemappingdesObjetspersistantsetdesaccèsSQLàlabasededonnées sontgérésautoma3quementparleconteneurEJB. • Lesannota3onsguideleconteneurdanslemapping: – @En3tyspécifiequel'infrastructured'accèsauxdonnéesdoitrendreceYe classepersistante – @Ididen3fiel'aYributquiseramappésurlacléprimaire(ici,unecléprimaire technique) – @GeneratedValuedélègueauframeworklagénéra3onetl'affec3ond'uneclé primairelorsdupremierenregistrementd'unobjetenbase.Lagénéra3onde laclésefaitgénéralementparlebiaisd'uneséquenceenbase,d'unaYribut en3erauto-incrémenté,ouencoreparlaproduc3ond'unGUID. – @ManyToOneexprimeunepar3edel'associa3onentreCatégorieetSignet quiestdetype1-n.DanslaclasseCatégorie,ontrouvelogiquementunautre aYributdetypeList<Signet>qualifiéde@OneToMany. AdeelAhmad 167 170 packagebusiness; importjava.io.Serializable; importjavax.persistence.En3ty; importjavax.persistence.GeneratedValue; importjavax.persistence.Id; importjavax.persistence.ManyToOne; @En6ty publicclassSignetimplementsSerializable{ @Id @GeneratedValue privatelongid; publiclonggetId{ returnid; } publicvoidsetId(longvalue){ id=value; } privateString3tre; publicStringgetTitre{ return3tre; } publicvoidsetTitre(Stringvalue){ 3tre=value; } AdeelAhmad 171 7 24/10/16 ExempleEJBEn3té3.0 InterfaceEjbSessionetEn3té AdeelAhmad • L'inconvénientdécouledupremieravantage: • • – évitetoutedépendancevis-à-visdesdialectesSQL,desmul3plesbasesrela3onnelles, – offreunesyntaxecohérentepourinterrogerdesgraphesd'objetspouvant3rerpar3 derela3onsd'héritagecomplexes. – ledéveloppeuramoinsdemaîtriseducodeSQLquiserafinalementenvoyéàlabase dedonnées, – cequipeutavoirunimpactsurlesperformances,larobustesseetplustardla maintenancedel'applica3on. 172 AdeelAhmad 173 Connexionauxsourcesdedonnées InterfaceEjbSessionetEn3té publicclassMoteurRechercheBeanimplementsCatalog{ @PersistenceContext privateEn3tyManagermgr; @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicList<Signet>rechercherTousSignets(){ returnmgr .createQuery("selectsfromSignets") .getResultList(); } @Transac3onAYribute(Transac3onAYributeType.SUPPORTS) @WebMethod publicStringrechercherURL(Signets){ returnmgr .createQuery("selects.urlfromSignetswheres.id=:id") .setParameter("id",s.getId()) .getUniqueResult(); } AdeelAhmad • IlsuffitdedéclarerunaYributdetypeEn3tyManager(annoté @PersistenceContext)dansl’EJBSessionpourpouvoirinteragiravecle ges3onnairedepersistance. L'annota3onpermetauconteneurdecomposantd'injecterautoma3quementla dépendance(laréférence)verslebonobjetsansquenousayonsànousen soucier. Lelangageu3lisén'estpastoutàfaitduSQLmaisunlangagedeplushautniveau appeléJavaPersistanceQueryLanguage. L'avantagenotableest: • privateStringurl; publicStringgetUrl{ returnurl; } publicvoidsetUrl(Stringvalue){ url=value; } @ManyToOne privateCategoriecategorie; publicCategoriegetCategorie{ returncategorie; } publicvoidsetCategorie(Categorievalue){ categorie=value; } } • LesEnterpriseJavaBeansetlesapplica3onsWebont nécessairementbesoind’accéderàdessystèmesde ges3ondebasesdedonnéesrela3onnelles. • Deuxpossibilités: – AccèsviaJDBCàlabasededonnées,cequiimpliquede chargerlesdriversJDBC,decoderl’URLdelabasede donnéesetdetransmeYrelelogin/pasword. – AccèsviaDataSource,permetdedéchargerl’applica3on delalogiquedeconnexionàlabasededonnées.Le serveurd’applica3onsestparamétrépourdéfinirun DataSourcequicon3entledriverJDBC,l’URL,leloginet password. 174 ExempledeconnexionviaJDBC AdeelAhmad 175 ConnexionJBoss/Mysqlvia DataSource • LeDataSourceestbasésur: – LedriverJDBC – L’URLdeconnexion Connec3onconnec3on=null; Stringdriver="com.mysql.jdbc.Driver"; StringconnexionURL="jdbc:mysql://localhost:3306/une_base_de_donnees"; StringUser="deruelle"; Stringpassword="ascffef67"; try{ Class.forName(driver); connec3on=DriverManager.getConnec3on(connexionURL,user, password); }catch(SQLExcep3onex1) { System.out.println("SQLErrorinse†ngdatasource:"+ex1); ex1.printStackTrace(); } AdeelAhmad • Extrairel'archivemysql-connector-java-[version]stable-bin.jarpourinstallerledriverJDBC • PlacerleJARdans%JBOSS_DIST%/server/[nom_du_serveur]/lib/. • Dans%JBOSS_DIST%/server/[nom_du_serveur]/deploy/,ilfautcréer unfichiermysql-ds.xml(lenomseterminepar -ds.xml) • mysql-ds.xmlpeutcontenirautantdeconnexions querequis. 176 AdeelAhmad 177 8 24/10/16 Exempledefichierdatasource <?xmlversion="1.0"encoding="UTF-8"?> <!--DatasourceconfigforMySQLusing2.0.11driver--> <datasources> <local-tx-datasource> <jndi-name>premiere_source_de_donnees</jndi-name> <connec3on-url>jdbc:mysql://localhost:3306/une_base_de_donnees </connec3on-url> <driver-class>com.mysql.jdbc.Driver </driver-class> <user-name>nom </user-name> <password>mot_de_passe </password> </local-tx-datasource> <local-tx-datasource> <jndi-name>deuxieme_source</jndi-name> … </local-tx-datasource> </datasources> AdeelAhmad DataSourceds=null; Connec3onconnec3on=null; StringdataSourceName="premiere_source_de_donnees"; try { Ini3alContextit=newIni3alContext(); ds=(DataSource)it.lookup(dataSourceName); connec3on=ds.getConnec3on(); } catch(SQLExcep3onex1) { System.out.println("SQLErrorinse†ngdatasource:"+ex1); ex1.printStackTrace(); } catch(NamingExcep3onex2) { System.out.println("Errorinse†ngdatasource:"+ex2); ex2.printStackTrace(); } 178 • Java2Plaˆorm,EnterpriseEdi3onestune spécifica3onparueofficiellementàlaconférence JavaOneen1998enmêmetempsqueles EnterpriseJavaBeans. • Ilestnédebesoinsdesentreprisespour développerdesapplica3onscomplexes distribuéesetouvertessurl’Internet, exploitablesdansunIntranet. • Ilpossèdeuneinfrastructured’exécu3on appeléeserveursd’applica3ons 180 Présenta3ondeJ2EE 179 • Java2Plaˆorm,EnterpriseEdi3oninclutles APIfondamentalesJavasuivantes: – LesEnterpriseJavaBeans(EJB):composants mé3ers – LesJavaServerPages(JSP)etlesServlets: composantsWeb – JavaDataBaseConnec3vity(JDBC)pourl’accès auxbasesdedonnéesrela3onnelles. AdeelAhmad 181 Laplate-formeJ2EE – JavaTransac3onService(JTS)permetd’accéderàunservice detransac3onsrépar3es. – L’APIJavaTransac3on(JTA)fournitunedémarca3ondes transac3onsdansuneapplica3on. – JavaMessageService(JMS):pouraccéderàdiversservices demessageriesintra-applica3onsetinter-applica3ons. – JavaNamingandDirectoryInterface(JNDI)fournitunaccès auxservicesdedénomina3on,DNS,LDAP. – RemoteMethodInvoca3on(RMI)surInternetInter-ORB Protocol(IIOP)permetuneinvoca3ondeméthodesà distanceau-dessusduprotocoleIIOPdeCORBA. AdeelAhmad AdeelAhmad Présenta3ondeJ2EE Présenta3ondeJ2EE AdeelAhmad Exempledelocalisa3ond’unesourcededonnées 182 • Serveursd’applica3onsJ2EE: – Unserveurd'applica7onsestunserveursurlequelsontinstalléesles applica)onsu)liséesparlesusagers. – Cesapplica)onssontchargéessurleserveurd'applica)onsetaccédéesà distance,souventparréseau. – LesIHM(InterfacesHommes-Machines)sontdistribuéessurlespostesclients ouviaunclientléger – DansuneinfrastructureN-3ersrégulière,onpeutdéployerplusieursserveurs d'applica3ons: • répar3rlachargelorsquelenombreélevédepostesclientsestuneexigence cri3que • redonderlorsqueleurdisponibilitéestuneexigencecri3que AdeelAhmad 183 9 24/10/16 Laplate-formeJ2EE Laplate-formeJ2EE • Lesserveursd'applica)onssontdeslogiciels occupantlacouchecentraledansune architecturemul7couche: • Environnementd'exécu3ondeJ2EE – J2EEregroupeuncertainnombred'API,maisilprésenteégalementlacaractéris3que remarquabledefaireabstrac3ondel'infrastructured'exécu6on • =>Justeunespécifica3on,ensuiteimplantéeparleséditeurslogicielsquimeYentaupointles serveursd'applica3ons – Unearchitectureclassique3-)ers(postesclients, serveurdedonnées,serveurd'applica)ons) – Unearchitectureétendue(n-)ers)lorsqu'elle intègredesserveursd'acquisi)on(donnéesde terrain,donnéesdeprocess,deback-office,de gateways,desystèmescoopérantsexternes,etc.). AdeelAhmad 184 J2EEdanslesarchitecturesmul3-3ers Tiers ServicesWeb TiersInterface – Informa3quedistribuée"tradi3onnelle"=souventproblèmesliésnonpasàlalogique propreàl'applica3onmaisàlamiseenœuvredeservicescomplexes(threading, transac3ons,sécurité…) – J2EEintroduitlano3ondeconteneur,etvialesAPIJ2EE,ilélaboreuncontratentrele conteneuretlesapplica3ons – C'estlevendeurduconteneurquisechargedemeYreenœuvrelesservicespourles développeursd'applica3onsJ2EE,danslerespectdesstandards TiersMé3er Tiers Données AdeelAhmad 185 ArchitectureJ2EE-Conteneurs • UnconteneurJ2EEestunenvironnementd'exécu3onchargédegérerdes composantsapplica3fsetdedonnerunaccèsauxAPIJ2EE ConteneurWeb Navigateur ServeurWeb Clients Applica3fs JAF JMS JavaMail JTA JNDI JDBC RMI/IIOP JAF JavaMail JTA JMS Serveurde basesde données JNDI Conteneur EJB Bean Enterprise Entreprise Entreprise Entreprise JavaBeans JavaBeans JavaBeans PagesJSP PagesJSP PagesJSP JDBC Conteneur Web Applica3on Web/JSP ServeurMé3er RMI/IIOP Conteneur Applet Internet Applet/ HTML ConteneurEJB ServletsJava ServletsJava ServletsJava Serveurd'applica3onsJ2EE BDDsetautres ressources AdeelAhmad 186 LecontainerWeb 187 LesservicesducontainerEJB • Ilfournitunenvironnementpourle développement,ledéploiementetlages3on del’exécu3ondesServletsetdesJSP. • LesServletsetlesJSPsontregroupésdansdes unitésdedéploiementbap3séesapplica)ons Web(webapp). • LesWebAppimplémententlalogiquede présenta3ond’uneapplica3on. AdeelAhmad AdeelAhmad 188 • L’EJBContainerestresponsabledelafournituredeservicesauxbeans, quelquesoitleursimplémenta3ons: – Lesupportdumodetransac3onnel:spécifiélorsdeladéclara3ondubeansans ajoutdecodes.Lagranularitépouvantdescendreauniveaudelaméthode. – Lages3ondesmul3plesinstances:lesEJBsontdéveloppésdefaçonmono-client etexécutéeenmodemul3-clients: • ges3ondepoold’instances, • ges3ondecache, • op3misa3ondesaccèsressourcesetdonnées,etc. – Lapersistance(obligatoiredanslaspécifica3onEJB2.0). – LasécuritéparlesACL(AccessControlList)auniveaudubeanoupourchaque méthode. – Ges3ondeversionsetadministra3ondesEJBs. AdeelAhmad 189 10 24/10/16 ArchitectureJ2EE-Conteneurs LesconteneursviaJavaRMI Structurederépertoirequipermetd’obtenirdesno3ons detransparencedelalocalisa3ondesobjets--lecode clientu3liseunnompourtrouverleserveur Code Client Client Stub Service Nommage Daemon Ac6va6on • Quelquesservicesdesconteneurs • Ges3ondeladuréedeviedescomposantsapplica3fs – CeYeges3onimpliquelacréa3ondenouvellesinstancesde composantsapplica3fsainsiquelepoolingetladestruc3ondeces composantslorsquelesinstancesnesontplusnécessaires Implémenteles“Factories” enu3lisantdesdescrip3ons desobjetsac3vables • Poolingderessources – Lesconteneurspeuventàl'occasionmeYreenœuvrele rassemblementdesressources,souslaforme,parexemple,de poolingd'objetsoudepoolingdeconnec3ons réseau Server Skeleton UneJVMparAc3va3onGroup.Automa3quementlancée parledaemond’Ac3va3onetpeutcontenirdesserveurs semi-indépendantsquipartagentdesressources(comme unpooldeconnexions)etquiontlesmêmesrestric3ons desécurité AdeelAhmad • Peuplementdel'espacedenomsJNDIaveclesobjets nécessairesàl'u3lisa3ondesAPIdeservicesdes conteneurs • Clusteringsurplusieursmachines Objet JVM Server associée auGroupe d’Ac6va6on – Répar33ondechargeou"LoadBalancing" • Sécurité • ... 190 AdeelAhmad 191 ArchitectureMVC • L’architecturemodèle1:lalogiquemé3er,la logiqued’affichageetlamanipula3ondes requêtessontmélangéesdansunmême composant • L’architecturemodèle2ouMVC:séparela logiquemé3erdel’affichage ArchitectureMVC – Uncomposantestchargéderecevoirlesrequêtes – Uneautredetraiterlesdonnées – Etuntroisièmedepréparerl’affichage AdeelAhmad 192 • Modèle–Lemodèleenglobeàlafoislalogique mé3eretlesdonnéessurlesquellesilopère. • Vue–Unefoislarequêtetraitée,lecontrôleur déterminequelcomposantdoitêtreemployé pourafficherlesdonnées • Contrôleur–LescomposantsdeceYecatégorie reçoiventlesrequêtesdesclients,lestraitentet lestransmeYentauxcomposantschargésde traiterlesdonnées.Ildesdirigentensuiteversle composantsresponsablesdelavue. A.AHMAD A.AHMAD 193 LepaYernModel-View-Controller (MVC2) MVC 24/10/16 24/10/16 194 Model JSP(View) Réponse Requête Controller Datastore Browser AdeelAhmad 195 11 24/10/16 Développerdesapplica3onsJ2EE Développerdesapplica3onsJ2EE • Cons3tu3ondecomposantsapplica3fsenmodules • Cons3tu3ondemodulesenapplica3on – Unmodulesertaempaqueterunouplusieurscomposantsdumêmetype – L’applica3onJ2EEestunearchiveEARcontenantledescripteurde déploiement(applica6on.xml),lesmodulesWebetEJB – LesmodulesWebincluent: – Niveauleplusaccompli:celuidesapplica3ons – AppliJ2EE=ensembledemodulesplacésdansunfichierEAR(Entreprise Archive) • Servlets,JSP,TagLibs,JARs,HTML,XML,Images... • Empaquetésdansunfichierd'archiveweb,WAR • UnWARs'apparenteàunJARavecenplusunrépertoireWEB-INFcontenantle descripteurdedéploiementweb.xml AppliJ2EE(fichierEAR) – LesmodulesEJBincluent: applica7on.xml • LesEJB(codescompilés)etleursdescripteursdedéploiement(ejb-jar.xml) • EmpaquetésdansunearchiveJAR ModuleEJB – LesmodulesJavaduclient: • pourlesclientsJava,égalementunearchiveJARavecledescripteurde déploiementapplica6on-client.xml AdeelAhmad ModuleJava ModuleEJB(fichierJAR) ModuleWeb(fichierWAR) ModuleJava(fichierJAR) ejb-jar.xml web.xml applica6on-client.xml EJB 196 ModuleWeb EJB Servlet JSP AdeelAhmad Java Java 197 Développerdesapplica3onsJ2EE • Déploiementd'applica3ons – Ledéploiementconsisteàinstalleretàpersonnaliserdesmodules empaquetéssuruneplate-formeJ2EE – Deuxétapes: • Prépara3ondel'applica3on(recopiedesfichiersJAR,WAR,EAR...,généra3ondes classesaumoyenduconteneur,puisinstalla3onsurleserveur • Configura3ondel'applica3onenu3lisantlesinforma3onsspécifiquesauserveur d'applica3ons – Créa3ondesourcesdedonnées,fabriquesdeconnexion... AdeelAhmad 198 12