les ejb samir azzouz [email protected] Équipe objectweb inria rhône alpes
TRANSCRIPT
Les Web Services 2
IntroductionIntroduction• 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
Les serveurs d'applications
Les Web Services 4
Architectures à Objet DistribuésArchitectures à Objet Distribués
Application 1
Application 2
MiddleWare
Services Métiers
Services d'infrastructure
Les Web Services 5
Serveur de composants de baseServeur de composants de base
Application 1
Application 2
Services Métiers
Services standard d'infrastructure
jdbc
jts
version
cycle vie
Les Web Services 6
Serveur de composants intégréServeur de composants intégré
Application 1
Application 2
container
jdbc jts version cycle vie
Composants Métiers
infrastructure
Logique métier
Service d'infrastructure de base
Gestion automatisée
Les Web Services 7
Services du container d'EJBServices 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
Les Web Services 8
Serveur Web dynamiqueServeur Web dynamique
Application 1
Application 2
Serveur Web
Les Web Services 9
Serveur Web dynamiqueServeur Web dynamique
Application 1
Application 2
Serveur Web
CGI
CGI
Les Web Services 10
Serveur Web dynamiqueServeur Web dynamique
Application 1
Application 2
Serveur Web
Php
LiveWire
Les Web Services 11
Serveur Web dynamique (Servlets / JSP)Serveur Web dynamique (Servlets / JSP)
Application 1
Application 2
Serveur Web
Servlets
Servlets
Les Web Services 12
Services du container de pages WebServices 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
Les Web Services 13
Un serveur d'applicationUn 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...
Les Web Services 14
The J2EE ArchitectureThe J2EE ArchitectureApplet container
Applet
J2SE
Application
Client Container
J2SE
ApplicationClient
JMS
JND
I
RM
I/IIOP
JDB
C
Web container EJB container
ServletJSP
JMS
JND
I
JTA
Java Mail
RM
I/IIOP
JDB
C
JAF
J2SE J2SE
JMS
JND
I
JTA
Java Mail
RM
I/IIOP
JDB
C
JAF
EJB
Databases
http/ssl
rmi/ssl
Les Web Services 15
Les offres de serveur d'applicationsLes 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)
Les serveurs d'EJB
Les Web Services 17
Serveur de composants intégréServeur de composants intégré
Application 1
Application 2
container
jdbc jts versioncycle vie
Composants Métiers
infrastructureLogique métier
Service d'infrastructure de baseGestion automatisée
Les Web Services 18
Serveurs distribués Serveurs distribués
Appli 1
Appli 2
Container
jdbc
1
Services
Container
jdbc
2
Services
Les Web Services 19
Enterprise JavaBeansEnterprise 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.
Les Web Services 20
Principe de conception des EJBPrincipe 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
Les Web Services 21
Le Bean "stateless Session"Le 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
Les Web Services 22
Les Bean "statefull Session"Les 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
Les Web Services 23
Les EJB Entité (Entity EJB)Les 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
Les Web Services 24
Gestion de la persistanceGestion 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)
Clientid=98282nom=frenotadresse=34ville=villeurbanne
StockageMappage ?
Les Web Services 25
Partage d'EJB entityPartage 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
clientclient serveurcontainer
OMskell
client
client
OM
OM
Les Web Services 26
Type de persistanceType de persistance• Il y a deux mode de gestion de la persistance
– Container-Managed Persistence (CMP)– Bean-Managed Persistence (BMP)
container
OMCMP
1
OMBMP
Les Web Services 27
Rôle du développeur d'EJBRô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
Les Web Services 28
Le fonctionnement globalLe fonctionnement global
OM
Client
jndi
1
2
34
5
Les optimisations
Les Web Services 30
Pooling d'objetsPooling 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 poolclient
client
Les Web Services 31
La passivationLa 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
Les Web Services 32
Pooling / Passivation sur WeblogicPooling / Passivation sur Weblogic
EJB cache
client
client
Free Pool
Les objets sont plac₫s dans le pool libre quand les clients en ont fini
Objets passiv₫s
Un EJB est passiv₫ s il a d₫pass₫ idleTimeoutSeconds
Ne peut pas exc₫der maxBeansInFreePool
Ne peut pas exc₫der maxBeansInCache
Un client re₤oit CacheFullException si le cache est plein et rien ne peut ₨tre passiv₫
Les Web Services 33
Distribution, Equilibrage de charge, Tolérance de pannes
Application et logique métier
Nommage, Sécurité, Cycle de vie, Accès concurrents, Transaction, Persistance EJB C
ontai
ner
Serv
eur d
’app
licati
on
Logique d'application
Logique métier
Accès données
Ett
Ett
SesSes DBMS
Ses
SesIHM
Les Web Services 34
Les rôles dans le monde EJBLes 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
Les Web Services 35
Cycle de développementCycle de développement
• Implantation de la base de données (opt.)• Implantation des EJB (SL/SF/Entity)• Implantation des JSP
Les Web Services 36
Cycle de développement d'un EJB sessionCycle de développement d'un EJB session
1) Définir les interfaces métierInterface Remote
2) Définir les méthodes de gestion du cycle de vieInterface Home
3) Définir les caractéristiques intrinsèques du bean dans un fichier de description
4) Définir les caractéristiques de déployement5) Déployer le bean6) Réaliser le(s) clients qui utilisent le service
Les Web Services 37
Interface MétierInterface 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;
}
Les Web Services 38
Interface HomeInterface HomeInterface Home de l'EJB fibonaccipackage exemple.fibonacci;
import javax.ejb;
import java.rmi;
public interface FibonacciHome extends EJBHome {
public Fibonacci create() throws CreateException, RemoteException;
}
Les Web Services 39
Développement du BeanDéveloppement du Beanpackage 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){...}
}
Les Web Services 40
Descripteur du BeanDescripteur du Bean
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>Fibonacci</ejb-name>
<home>exemple.fibonacci.FibonacciHome</home>
<remote>exemple.fibonacci.Fibonacci</remote>
<ejb-class> exemple.fibonacci.FibonacciBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
...
</enterprise-beans>
</ejb-jar>
Les Web Services 41
Descripteur du déploiementDescripteur du déploiement<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN" "http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd" >
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>fibonacci</ejb-name>
<stateless-session-descriptor>
<pool><max-beans-in-free-pool>100</max-beans-in-free-pool></pool>
</stateless-session-descriptor>
<transaction-descriptor>
<trans-timeout-seconds>300</trans-timeout-seconds>
</transaction-descriptor>
<jndi-name>fibonnaci</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
Les Web Services 42
Déploiement du beanDé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
Les Web Services 43
Développement d'un clientDéveloppement d'un clientpublic class Client{
public static void main(String [] argv){
try{
FibonacciHome home=(RobotHome)context.lookup("fibonaci");
Fibonacci jacques=home.create();
}catch(NamingException e){
}catch(CreationException e){
}catch(RemoteException e){}
}
}
Les Web Services 44
Développement d'un client JSPDéveloppement d'un client JSP<html><head><title> <%= pagetitle %> </title></head>
<h2><font color=#DB1260><%= pagetitle %></font></h2>
<%@ page import="edt.matiere.*"%>
<%!String pagetitle = "JSP emploi du temps : Les FaceAFaces";%>
<%try {
ctx = getInitialContext();
homeFib = (FibonnacciHome) ctx.lookup("fibonnaci");
uneSuite=homeFib.create();
out.println("fib(7)="+uneSuite.getFibonacciNumber(7));
}catch(Exception e){e.printStackTrace();
}
%>
</body></html>
Les Web Services 45
Points fortsPoints 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
Fin Partie x