Title: II - EJB 157
1Les Ejb
Les EJB sont à CORBA ce qu?est le circuit
précablé à la carte mère électronique
2Introduction
- Les applications monolithique
- Pas de réutilisation des modèles de données
- Pas de réutilisation des modèles de traitements
- Les applications C/S (au sens large)
- Réutilisation des modèles de données
- Pas de réutilisation des modèles de traitement
- Les applications à base de middleware
- Réutilisation des modèles de données et de
traitements - Notion de composants serveurs
3Les serveurs d'applications
4Architectures à Objet Distribués
Services Métiers
Application 1
Application 2
Services d'infrastructure
5Serveur de composants de base
Services Métiers
Application 1
Services standard d'infrastructure
jts
cycle vie
Application 2
jdbc
version
6Serveur de composants intégré
Composants Métiers
Application 1
Logique métier
container
infrastructure
Gestion automatisée
Service d'infrastructure de base
Application 2
jdbc
jts
version
cycle vie
7Services du container d'EJB
- Services internes
- Gestion de la charge du serveur
- (cycle de vie, accès client, passivation...)
- Service de nommage
- Gestion des accès aux objets métiers
- Services externes
- Gestion du mapping sur BD relationnelle
- Gestion des transactions
- Gestion des échanges de messages
8Serveur Web dynamique
Serveur Web
Application 1
Application 2
9Serveur Web dynamique
Serveur Web
Application 1
CGI
CGI
Application 2
10Serveur Web dynamique
Serveur Web
Application 1
LiveWire
Php
Application 2
11Serveur Web dynamique (Servlets / JSP)
Serveur Web
Application 1
Servlets
Servlets
Application 2
12Services du container de pages Web
- Servlet / JSP
- Services internes
- Gestion de la charge du serveur
- cycle de vie
- Gestion des autorisations d'accès
- Services externes
- API Java
13Un serveur d'application
- Application Java
- Hébergeant
- Des containers
- Pages Web
- Composants Métier (EJB)
- Des services
- Nommage
- Base de données/Mapping sur Base
- Moniteurs transactionnels
- Déploiement ...
- Des API sur les services
- JDBC/JTS/JMS...
14The J2EE Architecture
Applet container
Web container
EJB container
J2SE
http/ssl
Java Mail
Java Mail
JMS
JMS
Application Client Container
JNDI
JNDI
JDBC
JDBC
RMI/IIOP
RMI/IIOP
JTA
JTA
JAF
JAF
J2SE
J2SE
rmi/ssl
JMS
JNDI
JDBC
RMI/IIOP
J2SE
15Les offres de serveur d'applications
- Serveur d'application J2EE
- Weblogic BEA,WebSphere IBM, Iplanet Sun, Oracle
- WebObject (Jonhatan/Jonas) INRIA
- Jboss (Free)
- Autres serveurs d'applications
- Microsoft .net
- Zope (Python)
- Serveur CORBA (OrbixWeb)
16Les serveurs d'EJB
17Serveur de composants intégré
Composants Métiers
Application 1
Logique métier
container
infrastructure
Gestion automatisée
Service d'infrastructure de base
Application 2
jdbc
jts
version
cycle vie
18Serveurs distribués
Container
Container
Appli 1
2
1
Services
Services
Appli 2
jdbc
jdbc
19Enterprise JavaBeans
- Enterprise Java Beans
- Composants logiciels serveur
- Objectif
- Standardiser le développement et le déploiement
de composants serveurs écrits en Java - Le développement ne se fait que sur l'interface
métier de l'objet - Le développeur ne prend en compte que la logique
métier de l'EJB. Le reste est prise en charge par
le containeur.
20Principe de conception des EJB
- Le modèle des EJB est fondé sur trois concepts
pour la conception de systèmes distribués - Approche de serveurs sans-états
- Approche orientée session
- Approche objet persistant
- Les spécifications EJB parlent de
- Session Beans
- Stateless Session Bean
- Statefull Session Bean
- Entity Beans
- Container-Managed Persistence
- Bean-Managed Persistence
21Le Bean "stateless Session"
- Leurs comportements
- Fournissent un service pour un seul utilisateur
- Ne maintiennent pas d'état par rapport au client
- Ne survivent pas à un crash du serveur d'EJB
- Sont plutôt destinés à vivre sur une courte
période - Deux instances d'un même bean sans état sont
identiques
22Les Bean "statefull Session"
- Leurs comportements
- Interagissent d'une manière conversationnelle
- Maintiennent un état sur le client connecté
- Ne survivent pas à un crash du serveur d'EJB
- Vivent rapidement
- Une instance est hébergée par un seul thread
- Une instance peut être partagée par plusieurs
clients
23Stateful vs. Stateless
- Un bean stateful maintient un état
conversationnel qui est récupéré entre deux
invocations - Un bean stateless n'a pas d'état entre les appels
sur ses méthodes
24Exemples de Beans Session
- Session Stateless
- Un EJB qui calcule le cos(x)
- Un décompacteur
- Un EJB qui vérifie si une donnée est valide
- Un EJB qui calcule le coût d'une communication
téléphonique
- Session Statefull
- Un EJB qui gère une réservation
- Un EJB qui commande les pièces détachées d'un
véhicule - Un EJB qui gère le flux d'information d'un centre
d'appel
25Stateful vs. Stateless EJB
client
client
serveur
container
skell
OM
client
client
Les clients partagent le même contexte
client
client
serveur
container
client
OM
skell
OM
client
OM
Un client possède son propre contexte sur un EJB
stateful
26Etat dun EJB Session Stateful
- Létat d'un EJB de type stateful est défini comme
la fermeture transitive des objets visibles par
les champs du bean
Instance d'un chat
int age5
Instance d'une souris
capture
int age7
27EJB Stateful identiques ?
- Deux EJB stateful sont identiques s'ils partagent
le même contexte client !
client
client
serveur
container
skell
OM
client
client
Les clients partagent la même référence distante
28Comment obtenir la même référence distante ?
client
client
Ce client crée la nouvelle instance
1
serveur
container
skell
Le client dépose le handle dans une base
2
OM
Ce client récupère le handle
3
Le client utilise le handle pour créer la même
référence distante
4
client
client
29Les EJB Entité (Entity EJB)
- Leurs comportement
- Ils représentent les données persistantes
- Ils survivent à un crash
- Plusieurs clients peuvent utiliser des EJB qui
"pointent" sur les mêmes données - L'instance EJB contient une copie des données du
système de stockage
30Gestion de la persistance
- Les attributs d'un objet doivent être déposés sur
un support persistant - Exemples de supports de persistance
- Sérialisation
- Accès à une base sur le JDBC (mappage)
Client id98282 nomfrenot adresse34 villevilleu
rbanne
31Partage d'EJB entity
- Quand plusieurs clients partagent un EJB entity
ils - reçoivent leurs propres instance d'EJB
- partagent les données sous-jacentes
- n'ont pas à gérer la synchronisation sur les
données
client
client
serveur
container
client
OM
skell
OM
client
OM
32Type de persistance
- Il y a deux mode de gestion de la persistance
- Container-Managed Persistence (CMP)
- Bean-Managed Persistence (BMP)
1
container
OM
CMP
OM
BMP
33EJB Entité
- Exemples
- Un EJB qui représente les statistiques dun site
- Un EJB qui représente l'évolution d'une cotation
- Un EJB qui représente une séquence du génôme
- ...
34Rôle du développeur d'EJB
- Définition des interface distantes
- L'interface Remote contient les opérations
métier d'un EJB - Définition de l'usine de fabrication des EJB
- L'interface Home d'un EJB
- Est utilisée par les clients pour créer et/ou
retirer un EJB - Fournit des méta informations sur l'EJB
- Est partagée par tous les clients de l'EJB
- Voit son stub d'invocation placé dans le service
de nommage au déploiement - Définition du corps de l'EJB
- Implantation concrète des services métier
35Exercice
- Un EJB qui implante C-MesCources ?
- Un EJB qui gère un cours en vidéo ?
- Un EJB qui gère le passage du TOEIC ?
- Un EJB qui calcule de la vitesse de rotation des
planètes ? - Un EJB qui représente le compte bancaire d'une
personne ? - Un EJB qui gère un appel de support technique ?
- Un EJB qui calcule la valeur de remboursement
d'un prêt ? - Un EJB de gestion de chaîne Hi-Fi ?
- Un EJB qui liste les personnes connectées sur un
réseau ? - Un EJB qui contrôle la validité d'un cookie d'une
page Web ? - Un EJB qui représente un document Word ?
- Un EJB qui représente une enchère sur un site ?
36Le fonctionnement global
OM
37Deux principes clés les interfaces
- Interface home
- Interface de l'usine de fabrication des OM
- Est utilisée par les clients pour créer un EJB
- Est utilisée par un client pour retirer un EJB
- Fournit des méta informations sur l'EJB
- Est partagée par tous les clients de l'EJB
- Voit son stub d'invocation placé dans le service
de nommage au déploiement - Interface remote
- Représente l'OM distant (stub)
38Les optimisations
39Pooling d'objets
- Un serveur d'application peut créer un pool
d'objets nus qui peuvent être utilisés quand
des requêtes sont faites
EJB pool
40La passivation
- La passivation est le fait de placer un EJB sur
un support secondaire - La passivation
- A lieu quand un EJB dépasse son idle-timeout
- Permet à un serveur d'application de réclamer des
ressources - Placer une instance sérialisée de l'EJB dans son
support de stockage
41Pooling / Passivation sur Weblogic
Ne peut pas exc?der maxBeansInCache
Objets passiv?s
EJB cache
Un client reoit CacheFullException si le cache
est plein et rien ne peut ?tre passiv?
Un EJB est passiv? s ?il a d?pass?
idleTimeoutSeconds
Les objets sont plac?s dans le pool libre quand
les clients en ont fini
Ne peut pas exc?der maxBeansInFreePool
Free Pool
42Application et logique métier
Logique d'application
Logique métier
Accès données
IHM
DBMS
Ett
Ses
Ses
Ses
Ses
Ett
EJB Container
Nommage, Sécurité, Cycle de vie, Accès
concurrents, Transaction, Persistance
Serveur d application
Distribution, Equilibrage de charge, Tolérance de
pannes
43Les rôles dans le monde EJB
- Fournisseur de serveur d'application
- Fournit le serveur intégré avec des services de
base - Fournisseur de container
- Fournit les containeurs d'EJB
- Fournisseur d'EJB
- Expert dans un domaine vertical crée les
composants EJB - Développeur d'application
- Assemble les applications à partir de composants
EJB préfabriqués - Spécialiste du déploiement
- Déploie les applications
- Maîtrise les principes d'architecture
44Cycle de développement
- Implantation de la base de données (opt.)
- Implantation des EJB (SL/SF/Entity)
- Implantation des JSP
45Cycle de développement d'un EJB session
- 1) Définir les interfaces métier
- Interface Remote
- 2) Définir les méthodes de gestion du cycle de
vie - Interface Home
- 3) Définir les caractéristiques intrinsèques du
bean dans un fichier de description - 4) Définir les caractéristiques de déployement
- 5) Déployer le bean
- 6) Réaliser le(s) clients qui utilisent le service
46Interface Métier
- Interface Remote de l'EJB fibonacci
- package exemple.fibonacci
- public interface Fibonacci extends
javax.ejb.EJBObject - public int getFibonacciNumber(int n) throws
java.rmi.RemoteException -
47Interface Home
- Interface Home de l'EJB fibonacci
- package exemple.fibonacci
- import javax.ejb
- import java.rmi
- public interface FibonacciHome extends EJBHome
- public Fibonacci create() throws
CreateException, RemoteException
48Développement du Bean
- package exemple.fibonacci
- import java.rmi.
- import javax.ejb.
- public class FibonacciBean implements SessionBean
- public void ejbPassivate()
- public void ejbActivate()
- public void ejbRemove()
- public void setSessionContext(SessionContext
ctx) - public void ejbCreate()
- System.out.println("Cet EJB Fibonacci est
créé" -
- public int getFibonacciNumber(int n)...
49Descripteur du Bean
- lt?xml version"1.0"?gt
- lt!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems,
Inc.//DTD Enterprise JavaBeans 2.0//EN"
"http//java.sun.com/dtd/ejb-jar_2_0.dtd"gt - ltejb-jargt
- ltenterprise-beansgt
- ltsessiongt
- ltejb-namegtFibonaccilt/ejb-namegt
- lthomegtexemple.fibonacci.FibonacciHomelt/ho
megt - ltremotegtexemple.fibonacci.Fibonaccilt/remo
tegt - ltejb-classgt exemple.fibonacci.FibonacciBe
anlt/ejb-classgt - ltsession-typegtStatelesslt/session-typegt
- lttransaction-typegtContainerlt/transaction-
typegt - lt/sessiongt
- ...
- lt/enterprise-beansgt
- lt/ejb-jargt
50Descripteur du déploiement
- lt?xml version"1.0"?gt
- lt!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA
Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN"
"http//www.bea.com/servers/wls600/dtd/weblogic-ej
b-jar.dtd" gt - ltweblogic-ejb-jargt
- ltweblogic-enterprise-beangt
- ltejb-namegtfibonaccilt/ejb-namegt
- ltstateless-session-descriptorgt
- ltpoolgtltmax-beans-in-free-poolgt100lt/max-beans
-in-free-poolgtlt/poolgt - lt/stateless-session-descriptorgt
- lttransaction-descriptorgt
- lttrans-timeout-secondsgt300lt/trans-timeout-s
econdsgt - lt/transaction-descriptorgt
- ltjndi-namegtfibonnacilt/jndi-namegt
- lt/weblogic-enterprise-beangt
- lt/weblogic-ejb-jargt
51Déploiement du bean
- Eventuellement (pré-compilation)
- Jar cp
- Au déploiement
- Inscription de l'Usine (interface Home) sur le
containeur - Dépôt du stub de manipulation de l'Usine sur le
service de nommage
52Développement d'un client
- public class Client
- public static void main(String argv)
- try
- FibonacciHome home(RobotHome)context.lookup
("fibonaci") - Fibonacci jacqueshome.create()
- catch(NamingException e)
- catch(CreationException e)
- catch(RemoteException e)
-
-
53Développement d'un client JSP
- lthtmlgtltheadgtlttitlegt lt pagetitle gt
lt/titlegtlt/headgt - lth2gtltfont colorDB1260gtlt pagetitle
gtlt/fontgtlt/h2gt - lt_at_ page import"edt.matiere."gt
- lt!String pagetitle "JSP emploi du temps Les
FaceAFaces"gt - lttry
- ctx getInitialContext()
- homeFib (FibonnacciHome)
ctx.lookup("fibonnaci") - uneSuitehomeFib.create()
- out.println("fib(7)"uneSuite.getFibonacciNumbe
r(7)) - catch(Exception e)e.printStackTrace()
-
- gt
- lt/bodygtlt/htmlgt
54Points forts
- Notion de container
- Robustesse, standardisation, évolution
- Interface de développement standardisées
- Pas / Peu de phase de prise en main
- Automatisation de nombreuses tâches
- Gestion de la persistance, transactions
- Intégration à l'API java
- Marché explosant