Aucun titre de diapositive

publicité
EJB 2.0
Enterprise Java Bean ™
Xavier BLANC
[email protected]
Enterprise Java Bean
X. Blanc
Plan
1.
2.
3.
Introduction
Architecture
Développement
1. Session
2. Entity
3. Message Driven Bean
4.
5.
6.
7.
8.
9.
Transaction
Security
Environnement
Ejb-jar
Best pratices
Conclusion
Enterprise Java Bean
X. Blanc
1 - Introduction
Enterprise Java Bean
X. Blanc
1 - Introduction
Goals
• EJB architecture will be the standard for building
distributed object-oriented business application in Java.
• EJB architecture will make possible to build distributed
applications by combining components developed using
tools from different vendors.
• EJB architecture will make it easy to write applications
(without knowing the low-level details).
• EJB will follow the WORA™
• EJB Architecture will adress the development, deployment,
and runtime aspects of an enterprise application’s life
cycle.
• …
Enterprise Java Bean
X. Blanc
1 - Introduction
Exemple d’utilisation
Bean façade fournissant
tous les services
(création commande,
achat produit, …)
Beans représentant les
données (commande,
produit, …)
Server EJB
Server EJB
Mainframe / BD
Clients (Java,
Web, CORBA).
Enterprise Java Bean
X. Blanc
2 - Architecture
Enterprise Java Bean
X. Blanc
2 - Architecture
Overview
Enterprise JavaBean is an architecture for
component based distributed computing
Enterprise Beans are components of
distributed transaction-oriented enterprise
applications
Enterprise Java Bean
X. Blanc
2 - Architecture
Component characteristics
• An enterprise bean typically contains business logic that
operates on the enterprise’s data.
• An enterprise bean’s instances are created and managed at
runtime by a Container.
• An enterprise bean can be customized at deployment time
by editing its environment entries.
• Various services information, such as a transaction and
security attributes, are separate from the enterprise bean
class. This allows the services information to be managed
by tools during application assembly and deployment.
• Client access is mediated by the Container in which the
enterprise Bean is deployed.
Enterprise Java Bean
X. Blanc
2 - Architecture
Types de Roles
•
•
•
•
•
•
Bean provider
Application assembler
Deployer
System administrator
EJB server provider
EJB container provider
Enterprise Java Bean
Development
Production
EJB Architecture
X. Blanc
2 - Architecture
Types de Bean
• Session Bean : réalise une tache au nom du client
– Stateful : Bean avec état (1 bean par utilisateur)
– Stateless : Bean sans état (1 bean pour plusieurs
utilisateurs)
• Entity Bean : représente une donnée (pérenne) de
l’entreprise
• Message Driven Bean : Communication par
message (lien vers JMS)
Enterprise Java Bean
X. Blanc
Local vs Remote Bean
• Afin d’améliorer les performances,
l’architecture EJB contient (à partir de la
version 2.0) des beans locaux.
• Un bean local n’est accessible que si le
client est dans la même JVM.
• Attention : Passage des paramètres par
référence.
Enterprise Java Bean
X. Blanc
2 - Architecture
EJB Contracts
Client
Client-View
Enterprise bean
instances
Container
Component
Contract
EJB Server
Deployment Descriptor
Enterprise Java Bean
X. Blanc
2 - Architecture
Client-view (Local / Remote)
• Identité du composant
– Le container fournit une identité unique par composant
• Home interface
– Le container fournit des opérations de gestion de composants :
Create, Remove, Find …
• Component interface
– Le container permet aux clients d’invoquer les méthodes du
composants
• Metadata (Remote only)
– Invocation dynamique
• Handle (Remote only)
Enterprise Java Bean
X. Blanc
2 - Architecture
Component Contract
• Le session bean provider doit suivre les règles
d’implémentation. Le conteneur doit déléguer les appels
des clients vers les beans et fournir les services utilisés par
le bean.
• L’entity bean provider doit suivre les règles
d’implémentation. Le conteneur doit déléguer les appels
des clients vers les beans, fournir les services utilisés par le
bean et gérer automatiquement la persistance.
• Le message driven bean provider doit suivre les règles
d’implémentation. Le conteneur doit retourner les
messages vers les beans correspondant.
Enterprise Java Bean
X. Blanc
2 - Architecture
Deployment descriptor
• Un ejb-jar est le format standard de
packaging de beans
• Contient les classes du beans
• Contient un descripteur de déploiement
(sous format XML)
Enterprise Java Bean
X. Blanc
3 - Développement
3-1 Session Bean
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Overview
• For a client, a session object is a nonpersistent object that implements some
business logic running on the server.
• One way to think of a session object is as a
logical extension of the client program that
runs on the server.
• A session object is not shared among
multiple clients.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Client View
• Un client accède à un Bean à travers son interface
(RemoteInterface ou LocalInterface)
• L’objet qui implante l’interface est construit par le
conteneur (EJBObject ou EJBLocalObject)
–
–
–
–
existe dans un container
a une identité
n’est pas persistant
Plusieurs objets peuvent exister dans un même
conteneur
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Client View
• La création d’une instance de bean se fait
par l’intermédiaire de la Home Interface
• Le container exporte la référence de la
Home Interface grâce à JNDI
• La Home Interface permet aussi de chercher
et de supprimer les instances
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Client View
EJBObject
Client
EJBHome
EJB 1
EJBLocalObject
EJBLocalHome
Enterprise Java Bean
EJB 2
X. Blanc
3.1 – Session Bean
Récupération de la Home
• La récupération de la Home se fait via JNDI.
//Preparation du context JNDI
Context iniCtx = new InitialContext();
//Obtention de la référence d’objet
Object ref = iniCtx.loohup("java.comp/env/ejb/monBean");
//Cast (si Local alors cast à la Java)
MonBeanHome home = (MonBeanHome)
PortableRemoteObject.narrow(obj, MonBeanHome.class);
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Création d’une instance
• La Home interface doit fournir une ou plusieurs
méthodes de création d’instances create<Method>
(ces méthodes sont à la charge du Bean Provider)
//Obtention de la Home (voir slide précédent)
MonBeanHome home;
//Appel d’une méthode create
MonBean bean = home.create();
//MonBean bean = home.createName("xavier");
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Utilisation du Bean
• L’utilisation du bean se fait par des appels
classiques.
//Création du Bean (voir slide précédent)
MonBean bean;
//Appel d’une méthode XXX
bean.getProductPrice("sourie");
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Handle
• Un Handle est un objet qui représente une
référence vers un bean.
• Il est possible de stocker un Handle sur mémoire
secondaire pour récupérer plus tard la référence
d’un bean.
• Méthodes :
– handle.getEJBObject(); // pour retrouver la référence
– bean.getHandle(); //pour obtenir un handle
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Suppression
• Deux façons existent pour supprimer un
bean :
– remove(); // directement sur le bean
– remove(Handle h); // sur la Home
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Cycle de vie
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Component Contract
• Une instance de Session Bean représente
une session entre le client et l’application.
• Ses champs contiennent l’état de la session.
• Typiquement une instance de Session Bean
lit et écrit des données dans une base de
données (via des Entity Bean).
• La vie de l’instance de Session Bean
correspond à la vie du client.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Component Contract
• Un container gère la mémoire de son
environnement de travail. Pour cela, il peut
stocker les beans sur un autre support.
• Chacun des bean doit donc implanter deux
fonctions.
– Une fonction ejbPassivate appelée lors du
transfert du bean sur un autre support.
– Une fonction ejbActivate appelée lors du
transfert du bean vers le container.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Component Contract
• Afin de facilité les stratégies de passivation,
deux sortes de Session Bean ont été
définies:
– STATEFUL: Avec état. Tout le contenu du Bean
doit être sauvegardé.
– STATELESS: Sans état. Le contenu du Bean
n’a pas à être sauvegardé.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
SessionContext
• Lors d’une création d’instance, le conteneur
associe à chaque instance un contexte de session
(interface SessionContext)
• Cet objet permet de :
– Récupérer une référence vers l’objet ou vers la Home
– Récupérer les informations relatives à la sécurité
(Principal)
– Récupérer les information relatives aux transactions
(UserTransaction, RollBack mode).
• Le Bean Provider doit offrir les méthodes
nécessaires à l’enregistrement de cet objet.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Création d’une Instance de
Session Bean Stateful
Client
EJB Home
create(args)
EJB Object
Context
Instance
new
new
new
setSessionContext()
ejbCreate(args)
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Cycle de Vie STATEFUL
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Création d’une Instance de
Session Bean Stateless (1/2)
Client
EJB Home
EJB Object
Context
Instance
Create()
new
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Création d’une Instance de
Session Bean Stateless (2/2)
Container
Context
Instance
new
new
setSessionContext()
ejbCreate()
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Cycle de vie STATELESS
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Developpement Session Bean
• Trois classes à développer
– La classe d’implémentation du bean
– Interface du bean (Local ou Remote)
– Home Interface (Local ou Remote)
• Dans les AGL, il suffit souvent de
développer la classe d’implémentation du
bean.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Classe d’implémentation
•
Doit implanter javax.ejb.SessionBean.
–
•
•
•
•
Doit être public et pas abstract pas final.
Doit disposer d’un constructeur public sans paramètre.
Ne doit pas définir de méthode finalize().
Doit implanter les méthodes ejbCreate<Method>().
–
–
–
–
–
•
ejbPassivate(), ejbActivate(), ejbRemove(), setSessionContext()
Doivent être public
Ne doivent pas être final ou static
Les arguments doivent être valide RMI/IIOP
Doivent retourner void
Peuvent retourner l’exception java.ejb.CreateException
Doit implanter les méthodes business.
–
–
–
–
Ne doivent pas avoir un nom qui commence par ejb
Doivent être public
Ne doivent pas être final ou static
Les arguments doivent être valide RMI/IIOP
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Interface Remote
• Doit hériter de javax.ejb.EJBObject
• Les méthodes de l’interface doivent
correspondre aux méthodes business
accessibles à distance de la classe
d’implémentation.
– Doivent retourner l’exception
java.rmi.RemoteException
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Home Remote
• Doit hériter de javax.ejb.EJBHome
• Les méthodes de la Home doivent
correspondre aux méthodes
ejbCreate<Method> de la classe
d’implémentation.
– Doivent retourner l’exception
javax.ejb.CreateException
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Interface Local
• Doit hériter de javax.ejb.EJBLocalObject
• Aucune méthode ne doit retourner
l’exception java.rmi.RemoteException
• Les méthodes de l’interface doivent
correspondre aux méthodes business
accessibles de la classe d’implémentation.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Home Local
• Doit hériter de javax.ejb.EJBLocalHome
• Aucune méthode ne doit retourner
l’exception java.rmi.RemoteException
• Les méthodes de la Home doivent
correspondre aux méthodes
ejbCreate<Method> de la classe
d’implémentation.
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Exemple
public class CalculatriceBean implements javax.ejb.SessionBean {
/** Méthodes business. */
public double add(double v1,double v2) {return v1+v2;}
public double sub(double v1,double v2) {return v1-v2;}
public double mul(double v1,double v2) {return v1*v2;}
public double div(double v1,double v2) {return v1/v2;}
/** Méthodes de creation. */
public void ejbCreate() {}
/** Méthodes de l'interface SessionBean. */
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void setSessionContext(SessionContext sc) {this.sc = sc;}
protected SessionContext sc;
}
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Exemple
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface CalculatriceRemote extends EJBObject {
public double add(double v1,double v2) throws RemoteException;
public double sub(double v1,double v2) throws RemoteException;
public double mul(double v1,double v2) throws RemoteException;
public double div(double v1,double v2) throws RemoteException;
}
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
Exemple
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
public interface CalculatriceHome extends
EJBHome {
public CalculatriceRemote create() throws
CreateException;
}
Enterprise Java Bean
X. Blanc
3.1 – Session Bean
A vous de jouer
• Donner des exemples de beans STATEFUL
et STATELESS
• Définissez leurs classes
• Vos critiques ?
Enterprise Java Bean
X. Blanc
3 - Développement
3-2 Entity Bean
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Overview
• For a client, an entity bean is a component
that represents an object-oriented view of
some entities stored in a persistent storage,
such as a database, or entities that are
implemented by an existing enterprise
application.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Client View
• Les principes de la vue cliente des Entity Bean
sont basés sur les principes de la vue cliente des
Session Bean
– Les instances sont créées via la Home
• La home est accessible via JNDI
– Le client accède aux beans via leur interface
• Identité des objets …
• La différence fondamentale est que les Entity
Bean représentent des données pérennes. Leur
durée de vie est infinie.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Architecture
EJBObject
Client
EJBHome
EJB 1
EJBLocalObject
EJBLocalHome
Enterprise Java Bean
EJB 2
X. Blanc
3.2 – Entity Bean
Trouver un bean
• Une Home définit une ou plusieurs
méthodes find<Method> pour retrouver des
entity beans ou des ensembles d’entity
beans.
• La méthode findByPrimaryKey() est
toujours fournie. Le type de la clé peut être
n’importe quel type conforme à RMI/IIOP
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Vie d’un Entity Bean
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Component Contract
• Un Entity Bean est une réification d’une
donnée. La durée de vie de la donnée est
infinie.
• Un Entity Bean est fortement lié avec une
BD.
• La persistance d’un bean peut être :
– gérée par le conteneur : CMP
– gérée par le bean lui-même : BMP
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Component Contract : CMP
• Pour gérer la persistance par le conteneur :
– Les champs persistant d’un Entity Bean CMP doivent être spécifiés
dans le descripteur de déploiement.
<cmp-field><field-name>nom</field-name></cmp-field>
– Des relations entre Entity Bean de type 1:1, 1:* et *:* peuvent être
spécifiées dans le descripteur de déploiement.
• Utilisation de EJB QL pour générer les méthodes
ejbFind<Method> et ejbSelect<Method>.
• Le conteneur fait appel aux méthodes ejbStore et ejbLoad
du bean lors d’un passage à la mémoire secondaire. Ces
dans ces méthodes que le bean provider doit recalculer les
propriétés éphémères du bean.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Component Contract : BMP
• La persistance est entièrement à la charge du bean
provider.
• Le lien avec la BD est donc entièrement à la
charge du bean provider.
• Le bean peut être sauvegardé à n’importe quel
moment (après chaque appel de méthode).
• Lorsque le conteneur a besoin de sauvegarder le
bean, il fait appel aux méthodes ejbLoad et
ejbStore
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
EntityContext
• Lors d’une création d’instance, le conteneur
associe à chaque instance un contexte de session
(interface EntityContext)
• Cet objet permet de :
– Récupérer une référence vers l’objet ou vers la Home
– Récupérer les informations relatives à la sécurité
(Principal)
– Récupérer les information relatives aux transactions
(UserTransaction, RollBack mode).
• Le Bean Provider doit offrir les méthodes
nécessaires à l’enregistrement de cet objet.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Cycle de vie : CMP
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Cycle de vie : BMP
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
EJB QL
• Langage pour la spécification des méthodes
find<Method> et select<Method>.
• Compilé vers des langages cible de BD
(SQL, …)
• Utilise les informations définies dans le
descripteur de déploiement (champs
persitents et relations).
• Exclusivement Entity Bean CMP.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
EJB QL Exemples
• Find all orders :
SELECT OBJECT(o)
FROM Order o
• Find all orders that need to be shipped in CA
SELECT OBJECT(o)
FROM Order o
WHERE o.shipping_address.state=‘CA’
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Entity Bean & Transaction
• Remarquons que les Entity Beans sont
souvent utilisés par plusieurs clients en
parallèle.
• Il faut donc faire attention aux problèmes de
cohérence.
• Donc il faut utiliser les mécanismes de
transaction proposés par EJB.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Developpement Entity Bean
• Classes à développer
–
–
–
–
La classe d’implémentation du bean
La classe de la PrimaryKey
Interface du bean (Local ou Remote)
Home Interface (Local ou Remote)
• Dans les AGL, des wizards permettent de
construire des EJB Entity à partir de shéma
de BD et réciproquement.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Classe d’implémentation CMP
•
•
•
•
•
Doit implanter javax.ejb.EntityBean
Doit être public et abstract
Doit disposer d’un constructeur public sans paramètre.
Ne doit pas définir de méthode finalize().
Doit implanter les méthodes ejbCreate<Method>() et ejbPostCreate().
–
–
–
–
–
Doivent être public
Ne doivent pas être final ou static
Les arguments doivent être valide RMI/IIOP
Doivent retourner le type de la clé primaire
Peuvent retourner l’exception java.ejb.CreateException
• Doit disposer d’accesseur abstract pour les champs persistent (get, set).
• Ne doit pas définir de méthode ejbFind<Method>, celles-ci seront
générées.
• Doit définir les méthodes ejbSelect<Method> abstract
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Classe d’implémentation BMP
•
•
•
•
•
Doit implanter javax.ejb.EntityBean
Doit être public et pas abstract
Doit disposer d’un constructeur public sans paramètre.
Ne doit pas définir de méthode finalize().
Doit implanter les méthodes ejbCreate<Method>() et ejbPostCreate().
–
–
–
–
–
Doivent être public
Ne doivent pas être final ou static
Les arguments doivent être valide RMI/IIOP
Doivent retourner le type de la clé primaire
Peuvent retourner l’exception java.ejb.CreateException
• Doit disposer d’accesseur abstract pour les champs persistent (get, set).
• Doit définir les méthodes ejbFind<Method>, public.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Interface Remote
• Doit hériter de javax.ejb.EJBObject
• Les méthodes de l’interface doivent
correspondre aux méthodes business
accessibles à distance de la classe
d’implémentation.
– Doivent retourner l’exception
java.rmi.RemoteException
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Home Remote
• Doit hériter de javax.ejb.EJBHome
• Les méthodes de la Home doivent correspondre
aux méthodes ejbCreate<Method> de la classe
d’implémentation.
– Doivent retourner l’exception
javax.ejb.CreateException
• Les méthodes de la Home doivent correspondre
aux méthodes ejbFind<Method> de la classe
d’implémentation
– Doivent retourer l’exception javax.ejb.FinderException
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Interface Local
• Doit hériter de javax.ejb.EJBLocalObject
• Les méthodes de l’interface doivent
correspondre aux méthodes business
accessibles à distance de la classe
d’implémentation.
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Home Local
• Doit hériter de javax.ejb.EJBLocalHome
• Les méthodes de la Home doivent correspondre
aux méthodes ejbCreate<Method> de la classe
d’implémentation.
– Doivent retourner l’exception
javax.ejb.CreateException
• Les méthodes de la Home doivent correspondre
aux méthodes ejbFind<Method> de la classe
d’implémentation
– Doivent retourer l’exception javax.ejb.FinderException
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Exemple (CMP)
<cmp-field>
public abstract class CompteBean implements javax.ejb.EntityBean {
/** Setters/getters pour l'acces aux données du bean. */
public abstract String getNom();
public abstract double getSolde();
public abstract void setNom(String nom);
public abstract void setSolde(double solde);
/** constructeur **/
public Compte() {super();}
<field-name>nom</field-name>
</cmp-field>
<cmp-field>
<field-name>solde</field-name>
</cmp-field>
/** Méthodes de l'interface Home. */
public String ejbCreate(String nom) throws CreateException { setNom(nom); setSolde(0.0); return nom; }
/** Méthodes de l'interface Home. */
public void ejbPostCreate(String nom) { }
/** Méthodes de l'interface EntityBean. */
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void ejbLoad() {}
public void ejbStore() {}
public void setEntityContext(EntityContext sc) {this.sc = sc;}
public void unsetEntityContext() {}
protected EntityContext sc;
}
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Exemple (CMP)
import javax.ejb.EJBObject;
import javax.ejb.RemoveException;
public interface Compte extends EJBObject{
public String getNom() throws RemoveException;
public double getSolde() throws RemoveException;
public void setNom(String nom) throws RemoveException;
public void setSolde(double solde) throws RemoveException;
}
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
Exemple (CMP)
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
public interface CompteHome extends javax.ejb.EJBHome{
/*create */
public String create(String nom) throws CreateException, RemoteException;
/*find*/
public Compte findByPrimaryKey(String key) throws FinderException,
RemoteException
}
Enterprise Java Bean
X. Blanc
3.2 – Entity Bean
A vous de jouer
•
•
•
•
Donner des exemple d’Entity Bean
Définissez leurs classes
CMP ou BMP ?
Vos critiques ?
Enterprise Java Bean
X. Blanc
3 - Développement
3-3 Message Driven Bean
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Overview
• A message-driven bean is an asynchronous
message consumer.
• A message-driven bean is invoked by the
container as a result of the arrival of a JMS
message.
• A message-driven bean has neither a home nor a
component interface.
• A message-driven bean instance is an instance of a
message-driven bean class.
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Client View
• Pour un client, un driven message bean
n’est que le destinataire d’une queue de
messages.
• Le client n’a aucune visibilité sur le bean
• Le bean est entièrement masqué.
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Client View
Client
Destination
Instances
Bean
Container
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Obtenir un destinataire JMS
• Une Queue JMS est souvent enregistrée
dans JNDI
• Obtenir un destinataire revient à rechercher
une référence JNDI :
Context initialContext = new InitialContext();
Queue stockInfoQueue = (javax.jms.Queue) initialContext.lookup
(“java:comp/env/jms/stockInfoQueue”);
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Component Contract
• Le cycle de vie d’un Message Driven Bean est
entièrement géré par le conteneur
• Le conteneur doit notifier le Message Driven Bean
lorsque celui-ci reçoit un message (onMessage)
• Un Message Driven Bean peut être abonné (via
descripteur de déploiement) :
– à une queue
– à un topic
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
MessageDrivenContext
• Lors d’une création d’instance, le conteneur
associe à chaque instance un contexte de session
(interface MessageDrivenContext)
• Cet objet permet de :
– Récupérer les informations relatives à la sécurité
(Principal)
– Récupérer les information relatives aux transactions
(UserTransaction, RollBack mode).
• Le Bean Provider doit offrir les méthodes
nécessaires à l’enregistrement de cet objet.
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Cycle de Vie
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Développement
Driven Message Bean
• Une seule classe à développé : celle du bean
– Doit implanter l’interface
javax.ejb.MessageDrivenBean
– Doit implanter l’interface javax.jms.MessageListener
– Doit être public, non final et non abstract
– Doit disposer d’un constructeur public sans argument.
– Ne doit pas définir de méthode finalize()
– Doit définir une méthode ejbCreate()
– Doit définir la méthode onMessage(Message)
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
Exemple
public class MonMessageDrivenBean implements javax.ejb.MessageDrivenBean ,
javax.jms.MessageListener {
public MonMessageDrivenBean() {}
//From MessageDrivenBean
public void ejbRemove() {}
public ejbCreate() {}
protected MessageDrivenContext ctx;
public void setMessageDrivenContext(MessageDrivenContext ctx) {this.ctx = ctx;}
//From MessageListener
void onMessage(Message message) {//Business}
}
Enterprise Java Bean
X. Blanc
3.3 – Message Driven Bean
A vous de jouer
• Donnez des exemple de MDB
• Vos critiques ?
Enterprise Java Bean
X. Blanc
4 - Transaction
Enterprise Java Bean
X. Blanc
4 – Transaction
Overview
• Transactions are a proven technique for simplifying
application programming.
• Transactions free the application programmer from
dealing with the complex issues of failure recovery and
multi-user programming.
• If the application programmer uses transactions, the
programmer divides the application’s work into units
called transactions. The transactional system ensures that
a unit of work either fully completes, or the work is fully
rolled back.
• Furthermore, transactions make it possible for the
programmer to design the application as if it ran in an
environment that executes units of work serially.
Enterprise Java Bean
X. Blanc
4 – Transaction
Les transactions dans EJB
• Le support des transactions réparties est une
caractéristique principale de l’architecture EJB.
• Les aspects transactionnels sont :
– Soit gérés par le serveur EJB
• Utilisation de javax.transaction.UserTransaction
• Commit RollBack
– Soit par le bean lui même.
• La gestion par le serveur EJB est totalement transparent.
• Description dans le descripteur de déploiement
Enterprise Java Bean
X. Blanc
4 – Transaction
Granularité
• Spécification dans le descripteur de déploiement de la
granularité
<container-transaction>
–
–
–
–
–
–
<method>
SUPPORTS
<ejb-name> EmployeRecord
NOT_SUPPORTED
</ejb-name>
<method-name>*</method-name>
REQUIRED
</method>
<trans-attribute> Required </trans-attribute>
REQUIRES_NEW
</container-transaction>
MANDATORY
BEAN_MANAGED: transactions à la charge du bean
• Pour le bean appelant
– soit il s'exécute dans une transaction
– soit il s'exécute en dehors de tout contexte transactionnel
Enterprise Java Bean
X. Blanc
4 – Transaction
Supports
• si l'appelant a une transac. ouverte, l'appelé s’exécute dans ce contexte
• sinon aucune transac. n’est ouverte
Appelant
Enterprise Java Bean
Appelé
Appelant
Appelé
X. Blanc
4 – Transaction
NOT_SUPPORTED
• L'appelé ne supporte pas les transactions
• en cas d’utilisation dans 1 transac., celle-ci est suspendue
Appelant
Enterprise Java Bean
Appelé
Appelant
Appelé
X. Blanc
4 – Transaction
REQUIRED
• si l'appelant a une transac. ouverte, l'appelé s’exécute dans ce contexte
• sinon le conteneur commence une nouvelle transac.
Appelant
Enterprise Java Bean
Appelé
Appelant
Appelé
X. Blanc
4 – Transaction
REQUIRES_NEW
• une nouvelle transac. est systématiquement créée
Appelant
Enterprise Java Bean
Appelé
Appelant
Appelé
X. Blanc
4 – Transaction
MANDATORY
• si l'appelant a une transac. ouverte, l'appelé s’exécute dans ce contexte
• sinon une erreur est générée
Appelant
Appelé
Appelant
Appelé
Erreur
Enterprise Java Bean
X. Blanc
5 - Sécurité
Enterprise Java Bean
X. Blanc
5 – Sécurité
Overview
• Lessen the burden of the application developer (i.e. the
Bean Provider) for securing the application by allowing
greater coverage from more qualified EJB roles. The EJB
Container provider provides the implementation of the
security infrastructure; the Deployer and System
Administrator define the security policies.
• Allow the security policies to be set by the Application
Assembler or Deployer rather than being hard-coded by
the Bean Provider at development time.
• Allow the enterprise bean applications to be portable
across multiple EJB Servers that use different security
mechanisms.
Enterprise Java Bean
X. Blanc
5 – Sécurité
La Sécurité dans EJB
L’architecture de l’Entreprise de Java Bean
permet de transférer la gestion de la sécurité
au niveau du serveur. La sécurité au sein des
Java Bean inclus:
– Un accès à l’API de sécurité de Java
(java.security) pour gérer localement la
sécurité.
– Une description aux niveau de l’archive (XML)
pour que le serveur gère la sécurité.
Enterprise Java Bean
X. Blanc
5 – Sécurité
Sécurité par le Container
• Il est possible de spécifier des règles
d’accès pour chacune des méthodes.
• Ceci se fait par l’intermédiaire du
descripteur XML
– Description de rôles
– Description des règles de sécurités
Enterprise Java Bean
X. Blanc
5 – Sécurité
Déclaration XML de rôle
<security-role>
<description> blabla </description>
<role-name> employe </role-name>
</security-role>
…
Enterprise Java Bean
X. Blanc
5 – Sécurité
Déclaration XML de règles
<method-permission>
<role-name> employe </role-name>
<method>
<ejb-name>
EmployeServ
</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
Enterprise Java Bean
X. Blanc
5 – Sécurité
La Sécurité dans EJB
L’architecture Entreprise Java Bean utilise
le package de sécurité du langage Java :
java.security. Le package n’est pas décrit
dans la norme, celle-ci nous renvoie à Java.
La classe java.security.Principal est plus
précisément utilisée pour identifier un
client.
Enterprise Java Bean
X. Blanc
5 – Sécurité
La Sécurité locale
Un bean a accès aux informations du
serveur via son contexte. Celui-ci offre donc
deux fonctions pour permettre à un bean
d’obtenir l’identité d’un client.
– getCallerPrincipal()
– IsCallerInRole(String role_name)
Enterprise Java Bean
X. Blanc
5 – Sécurité
Référence des rôle
• Si bean référence un rôle (isUserInRole()) :
<security-role-ref>
<description> blabla </description>
<role-name> employe </role-name>
</security-role-ref>
Enterprise Java Bean
X. Blanc
5 – Sécurité
Déploiement
• C’est lors du déploiement qu’il faut relier
les rôles avec les mécanismes de sécurité
– Roles avec user NT
– Roles avec user LDAP
–…
Enterprise Java Bean
X. Blanc
6 - Environnement
Enterprise Java Bean
X. Blanc
6 – Environnement
Overview
• The Application Assembler and Deployer should be able to
customize an enterprise bean’s business logic without
accessing the enterprise bean’s source code.
• Most enterprise beans must access resource managers and
external information.
• The key issue is how enterprise beans can locate external
information without prior knowledge of how the external
information is named and organized in the target
operational environment.
• The enterprise bean environment mechanism attempts to
address both of the above issues.
Enterprise Java Bean
X. Blanc
6 – Environnement
JNDI
• Pour obtenir une ressource, il est vivement
conseillé d’utiliser JNDI (l’enfer des
ClassLoader)
• L’espace de nom java:/comp/env est alloué
pour chaque EJB.
// Obtain the enterprise bean’s environment naming context.
Context initCtx = new InitialContext();
Context myEnv = (Context)initCtx.lookup("java:comp/env");
Enterprise Java Bean
X. Blanc
6 – Environnement
Variables d’environnement
• Il est possible de définir des variables
d’environnement du bean (!= OS)
• Le nom et le type de ces variables doivent être
spécifiés dans le descripteur de déploiement (la
valeur est optionnelle)
<env-entry>
<description>BlaBlaBla.</description>
<env-entry-name>maxExemptions</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>15</env-entry-value>
</env-entry>
Enterprise Java Bean
X. Blanc
6 – Environnement
EJB
• Il est possible de définir des références entre
Bean.
• Le nom et le type du bean doivent être
spécifiés dans le descripteur de
déploiement.
• Il est conseillé de préfixer le nom par ‘ejb’
Enterprise Java Bean
X. Blanc
6 – Environnement
EJB
<ejb-ref>
<description>Blablabla</description>
<ejb-ref-name>ejb/MaRefBean1</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>fr.jussieu.MonBeanHome</home>
<remote>fr.jussieu.MonBean</remote>
</ejb-ref>
Enterprise Java Bean
X. Blanc
6 – Environnement
Autres types de ressources
• Vers les BD
– Connection Factory
• Vers les Queue ou Topic
– JMS
• …
Enterprise Java Bean
X. Blanc
7 - ejb jar
Enterprise Java Bean
X. Blanc
7 – ejb-jar
Overview
• The ejb-jar file format is the contract
between the Bean Provider and the
Application Assembler, and between the
Application Assembler and the Deployer.
Enterprise Java Bean
X. Blanc
7 – ejb-jar
Items
• Un ejb-jar est un fichier jar qui contient :
– Le descripteur de déploiement
– Les classes des Beans
• Bean, Home, Remote
– Les autres ressources nécessaires
Enterprise Java Bean
X. Blanc
7 – ejb-jar
Descripteur de déploiement
• Fichier XML valide qui décrit un ensemble de
beans
• Pour chaque bean
–
–
–
–
–
Nom du bean, Classes du bean, Type (Entity, Session)
Caractéristiques pérennes (pour les Entity)
Caractéristiques Transactionnelles
Caractéristiques Sécurité
Environnement
Enterprise Java Bean
X. Blanc
7 – ejb-jar
Echanges
• L’Ejb-jar est l’élément d’échange entre
outils (analyse, développement,
déploiement, …).
• Les EJB peuvent donc être considéré
comme des composants sur étagères.
Enterprise Java Bean
X. Blanc
8 – Best Practices
Enterprise Java Bean
X. Blanc
8 – Best Practices
Sensibilisation
• L’architecture EJB facilite grandement la
tache des développeurs en automatisant
fortement certaines techniques (répartition,
sécurité, transaction, environnement).
• Mais, il est important de bien comprendre
les mécanismes sous-jacent pour maitriser
la bête :
– Cas de l’exception
org.omg.CORBA.COMM_FAILURE
Enterprise Java Bean
X. Blanc
8 – Best Practices
Design Pattern, Framework
• Afin de minimiser les communications
client/server il est intéressant de construire une
copie locale d’un bean Entity, d’effectuer plusieurs
opérations en local et de transmettre la copie
lorsque cela est nécessaire : AccessBean
• Afin de ne pas mettre tout le traitement dans un
bean, il est intéressant de construire une classe
Business et de faire en sorte que le Bean ne soit
qu’un objet de délégation (évolution)
• …
Enterprise Java Bean
X. Blanc
8 – Best Practices
L’Etat du marché
• Jusqu’à EJB 1.1
– pas d’Entity Bean (surtout pas CMP)
– pas de sécurité
– EJB 101 Damnations (article)
• Aujourd’hui EJB 2.0
– ???
Enterprise Java Bean
X. Blanc
9 - Conclusion
Enterprise Java Bean
X. Blanc
9 – Conclusion
Success Story ?
• Succès commercial => Oui
– Projets (J2EE)
• Servlet, EJB, BD / CICS
– Plateforme de + en + efficace
• WebSphere IBM, Weblogic BEA, Oracle, JBoss
• Des inconvénients (structurels ?)
– Performance, Monté en charge
– Stabilité (jeunesse du standard)
• Un concurrence
– Inexistante jusqu’à il y a un an
– .Net & Web Services
Enterprise Java Bean
X. Blanc
9 – Conclusion
Références
• Spécifications
– EJB Specification (version 2.0
• Livres
– Mastering EJB 2.0
– EJB Design Pattern
• Articles
– EJB’s 101 Damnations (Dino Fancellu, Robin
Sharp, Matt Stephens)
Enterprise Java Bean
X. Blanc
Téléchargement