Title: Les Ejb
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 / DNA
- 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
23Les 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
24Gestion 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
25Partage 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
26Type 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
27Rô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
28Le fonctionnement global
OM
29Les optimisations
30Pooling 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
31La 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
32Pooling / 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
33Application 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
34Les 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
35Cycle de développement
- Implantation de la base de données (opt.)
- Implantation des EJB (SL/SF/Entity)
- Implantation des JSP
36Cycle 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
37Interface 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 -
38Interface 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
39Dé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)...
40Descripteur 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
41Descripteur 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
42Dé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
43Dé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)
-
-
44Dé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
45Points 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