bean

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