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