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