Title: Aucun titre de diapositive
1EJB 2.0
Enterprise Java Bean
Xavier BLANC Xavier.Blanc_at_lip6.fr
2Plan
- Introduction
- Architecture
- Développement
- Session
- Entity
- Message Driven Bean
- Transaction
- Security
- Environnement
- Ejb-jar
- Best pratices
- Conclusion
31 - Introduction
4Goals
1 - Introduction
- 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
applications life cycle.
5Exemple dutilisation
1 - Introduction
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).
62 - Architecture
7Overview
2 - Architecture
- Enterprise JavaBean is an architecture for
component based distributed computing - Enterprise Beans are components of distributed
transaction-oriented enterprise applications
8Component characteristics
2 - Architecture
- An enterprise bean typically contains business
logic that operates on the enterprises data. - An enterprise beans 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.
9Types de Roles
2 - Architecture
- Bean provider
- Application assembler
- Deployer
- System administrator
- EJB server provider
- EJB container provider
Development
Production
EJB Architecture
10Types de Bean
2 - Architecture
- 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
lentreprise - Message Driven Bean Communication par message
(lien vers JMS)
11Local vs Remote Bean
- Afin daméliorer les performances, larchitecture
EJB contient (à partir de la version 2.0) des
beans locaux. - Un bean local nest accessible que si le client
est dans la même JVM. - Attention Passage des paramètres par référence.
12EJB Contracts
2 - Architecture
Client-View
Client
Enterprise beaninstances
ComponentContract
Container
EJB Server
Deployment Descriptor
13Client-view (Local / Remote)
2 - Architecture
- 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 dinvoquer les
méthodes du composants - Metadata (Remote only)
- Invocation dynamique
- Handle (Remote only)
14Component Contract
2 - Architecture
- Le session bean provider doit suivre les règles
dimplémentation. Le conteneur doit déléguer les
appels des clients vers les beans et fournir les
services utilisés par le bean. - Lentity bean provider doit suivre les règles
dimplé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 dimplémentation. Le conteneur doit
retourner les messages vers les beans
correspondant.
15Deployment descriptor
2 - Architecture
- 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)
163 - Développement
17Overview
3.1 Session Bean
- For a client, a session object is a
non-persistent 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.
18Client View
3.1 Session Bean
- Un client accède à un Bean à travers son
interface (RemoteInterface ou LocalInterface) - Lobjet qui implante linterface est construit
par le conteneur (EJBObject ou EJBLocalObject) - existe dans un container
- a une identité
- nest pas persistant
- Plusieurs objets peuvent exister dans un même
conteneur
19Client View
3.1 Session Bean
- La création dune instance de bean se fait par
lintermé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
20Client View
3.1 Session Bean
Client
EJB 1
EJB 2
21Récupération de la Home
3.1 Session Bean
- 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 dobjet Object ref
iniCtx.loohup("java.comp/env/ejb/monBean") //Ca
st (si Local alors cast à la Java) MonBeanHome
home (MonBeanHome)
PortableRemoteObject.narrow(obj,
MonBeanHome.class)
22Création dune instance
3.1 Session Bean
- La Home interface doit fournir une ou plusieurs
méthodes de création dinstances createltMethodgt
(ces méthodes sont à la charge du Bean Provider) - //Obtention de la Home (voir slide
précédent) MonBeanHome home //Appel dune
méthode create MonBean bean home.create() //M
onBean bean home.createName("xavier")
23Utilisation du Bean
3.1 Session Bean
- Lutilisation du bean se fait par des appels
classiques. - //Création du Bean (voir slide
précédent) MonBean bean //Appel dune méthode
XXX bean.getProductPrice("sourie")
24Handle
3.1 Session Bean
- 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
dun bean. - Méthodes
- handle.getEJBObject() // pour retrouver la
référence - bean.getHandle() //pour obtenir un handle
25Suppression
3.1 Session Bean
- Deux façons existent pour supprimer un bean
- remove() // directement sur le bean
- remove(Handle h) // sur la Home
26Cycle de vie
3.1 Session Bean
27Component Contract
3.1 Session Bean
- Une instance de Session Bean représente une
session entre le client et lapplication. - 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 linstance de Session Bean correspond à
la vie du client.
28Component Contract
3.1 Session Bean
- 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.
29Component Contract
3.1 Session Bean
- 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 na pas
à être sauvegardé.
30SessionContext
3.1 Session Bean
- Lors dune création dinstance, le conteneur
associe à chaque instance un contexte de session
(interface SessionContext) - Cet objet permet de
- Récupérer une référence vers lobjet 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 à lenregistrement de cet objet.
31Création dune Instance de Session Bean Stateful
3.1 Session Bean
- Client EJB Home EJB Object Context
Instance
create(args)
new
new
new
setSessionContext()
ejbCreate(args)
32Cycle de Vie STATEFUL
3.1 Session Bean
33Création dune Instance de Session Bean Stateless
(1/2)
3.1 Session Bean
- Client EJB Home EJB Object Context
Instance
Create()
new
34Création dune Instance de Session Bean Stateless
(2/2)
3.1 Session Bean
- Container Context Instance
new
new
setSessionContext()
ejbCreate()
35Cycle de vie STATELESS
3.1 Session Bean
36Developpement Session Bean
3.1 Session Bean
- Trois classes à développer
- La classe dimplé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 dimplémentation du bean.
37Classe dimplémentation
3.1 Session Bean
- Doit implanter javax.ejb.SessionBean.
- ejbPassivate(), ejbActivate(), ejbRemove(),
setSessionContext() - Doit être public et pas abstract pas final.
- Doit disposer dun constructeur public sans
paramètre. - Ne doit pas définir de méthode finalize().
- Doit implanter les méthodes ejbCreateltMethodgt().
- Doivent être public
- Ne doivent pas être final ou static
- Les arguments doivent être valide RMI/IIOP
- Doivent retourner void
- Peuvent retourner lexception java.ejb.CreateExcep
tion - 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
38Interface Remote
3.1 Session Bean
- Doit hériter de javax.ejb.EJBObject
- Les méthodes de linterface doivent correspondre
aux méthodes business accessibles à distance de
la classe dimplémentation. - Doivent retourner lexception java.rmi.RemoteExcep
tion
39Home Remote
3.1 Session Bean
- Doit hériter de javax.ejb.EJBHome
- Les méthodes de la Home doivent correspondre aux
méthodes ejbCreateltMethodgt de la classe
dimplémentation. - Doivent retourner lexception javax.ejb.CreateExce
ption
40Interface Local
3.1 Session Bean
- Doit hériter de javax.ejb.EJBLocalObject
- Aucune méthode ne doit retourner lexception
java.rmi.RemoteException - Les méthodes de linterface doivent correspondre
aux méthodes business accessibles de la classe
dimplémentation.
41Home Local
3.1 Session Bean
- Doit hériter de javax.ejb.EJBLocalHome
- Aucune méthode ne doit retourner lexception
java.rmi.RemoteException - Les méthodes de la Home doivent correspondre aux
méthodes ejbCreateltMethodgt de la classe
dimplémentation.
42Exemple
3.1 Session Bean
- public class CalculatriceBean implements
javax.ejb.SessionBean - / Méthodes business. /
- public double add(double v1,double v2) return
v1v2 - public double sub(double v1,double v2) return
v1-v2 - public double mul(double v1,double v2) return
v1v2 - 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
-
43Exemple
3.1 Session Bean
- 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 -
44Exemple
3.1 Session Bean
- import javax.ejb.EJBHome
- import javax.ejb.CreateException
- import javax.ejb.RemoveException
- public interface CalculatriceHome extends EJBHome
- public CalculatriceRemote create() throws
CreateException -
45A vous de jouer
3.1 Session Bean
- Donner des exemples de beans STATEFUL et
STATELESS - Définissez leurs classes
- Vos critiques ?
463 - Développement
47Overview
3.2 Entity Bean
- 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.
48Client View
3.2 Entity Bean
- 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.
49Architecture
3.2 Entity Bean
EJB 1
Client
EJB 2
50Trouver un bean
3.2 Entity Bean
- Une Home définit une ou plusieurs méthodes
findltMethodgt pour retrouver des entity beans ou
des ensembles dentity beans. - La méthode findByPrimaryKey() est toujours
fournie. Le type de la clé peut être nimporte
quel type conforme à RMI/IIOP
51Vie dun Entity Bean
3.2 Entity Bean
52Component Contract
3.2 Entity Bean
- Un Entity Bean est une réification dune donnée.
La durée de vie de la donnée est infinie. - Un Entity Bean est fortement lié avec une BD.
- La persistance dun bean peut être
- gérée par le conteneur CMP
- gérée par le bean lui-même BMP
53Component Contract CMP
3.2 Entity Bean
- Pour gérer la persistance par le conteneur
- Les champs persistant dun Entity Bean CMP
doivent être spécifiés dans le descripteur de
déploiement.ltcmp-fieldgtltfield-namegtnomlt/field-nam
egtlt/cmp-fieldgt - Des relations entre Entity Bean de type 11, 1
et peuvent être spécifiées dans le
descripteur de déploiement. - Utilisation de EJB QL pour générer les méthodes
ejbFindltMethodgt et ejbSelectltMethodgt. - Le conteneur fait appel aux méthodes ejbStore et
ejbLoad du bean lors dun 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.
54Component Contract BMP
3.2 Entity Bean
- 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é à nimporte 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
55EntityContext
3.2 Entity Bean
- Lors dune création dinstance, le conteneur
associe à chaque instance un contexte de session
(interface EntityContext) - Cet objet permet de
- Récupérer une référence vers lobjet 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 à lenregistrement de cet objet.
56Cycle de vie CMP
3.2 Entity Bean
57Cycle de vie BMP
3.2 Entity Bean
58EJB QL
3.2 Entity Bean
- Langage pour la spécification des méthodes
findltMethodgt et selectltMethodgt. - 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.
59EJB QL Exemples
3.2 Entity Bean
- Find all orders SELECT OBJECT(o)FROM Order o
- Find all orders that need to be shipped in
CASELECT OBJECT(o)FROM Order oWHERE
o.shipping_address.stateCA
60Entity Bean Transaction
3.2 Entity Bean
- 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.
61Developpement Entity Bean
3.2 Entity Bean
- Classes à développer
- La classe dimplé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.
62Classe dimplémentation CMP
3.2 Entity Bean
- Doit implanter javax.ejb.EntityBean
- Doit être public et abstract
- Doit disposer dun constructeur public sans
paramètre. - Ne doit pas définir de méthode finalize().
- Doit implanter les méthodes ejbCreateltMethodgt()
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 lexception java.ejb.CreateExcep
tion - Doit disposer daccesseur abstract pour les
champs persistent (get, set). - Ne doit pas définir de méthode ejbFindltMethodgt,
celles-ci seront générées. - Doit définir les méthodes ejbSelectltMethodgt
abstract
63Classe dimplémentation BMP
3.2 Entity Bean
- Doit implanter javax.ejb.EntityBean
- Doit être public et pas abstract
- Doit disposer dun constructeur public sans
paramètre. - Ne doit pas définir de méthode finalize().
- Doit implanter les méthodes ejbCreateltMethodgt()
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 lexception java.ejb.CreateExcep
tion - Doit disposer daccesseur abstract pour les
champs persistent (get, set). - Doit définir les méthodes ejbFindltMethodgt, public.
64Interface Remote
3.2 Entity Bean
- Doit hériter de javax.ejb.EJBObject
- Les méthodes de linterface doivent correspondre
aux méthodes business accessibles à distance de
la classe dimplémentation. - Doivent retourner lexception java.rmi.RemoteExcep
tion
65Home Remote
3.2 Entity Bean
- Doit hériter de javax.ejb.EJBHome
- Les méthodes de la Home doivent correspondre aux
méthodes ejbCreateltMethodgt de la classe
dimplémentation. - Doivent retourner lexception javax.ejb.CreateExce
ption - Les méthodes de la Home doivent correspondre aux
méthodes ejbFindltMethodgt de la classe
dimplémentation - Doivent retourer lexception javax.ejb.FinderExcep
tion
66Interface Local
3.2 Entity Bean
- Doit hériter de javax.ejb.EJBLocalObject
- Les méthodes de linterface doivent correspondre
aux méthodes business accessibles à distance de
la classe dimplémentation.
67Home Local
3.2 Entity Bean
- Doit hériter de javax.ejb.EJBLocalHome
- Les méthodes de la Home doivent correspondre aux
méthodes ejbCreateltMethodgt de la classe
dimplémentation. - Doivent retourner lexception javax.ejb.CreateExce
ption - Les méthodes de la Home doivent correspondre aux
méthodes ejbFindltMethodgt de la classe
dimplémentation - Doivent retourer lexception javax.ejb.FinderExcep
tion
68Exemple (CMP)
3.2 Entity Bean
ltcmp-fieldgt ltfield-namegtnomlt/field-namegt lt/cmp
-fieldgt ltcmp-fieldgt ltfield-namegtsoldelt/field-na
megt lt/cmp-fieldgt
- 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()
- / 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()
69Exemple (CMP)
3.2 Entity Bean
- 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 -
70Exemple (CMP)
3.2 Entity Bean
- 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
71A vous de jouer
3.2 Entity Bean
- Donner des exemple dEntity Bean
- Définissez leurs classes
- CMP ou BMP ?
- Vos critiques ?
723 - Développement
73Overview
3.3 Message Driven Bean
- 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.
74Client View
3.3 Message Driven Bean
- Pour un client, un driven message bean nest que
le destinataire dune queue de messages. - Le client na aucune visibilité sur le bean
- Le bean est entièrement masqué.
75Client View
3.3 Message Driven Bean
Destination
Client
Instances
Bean
Container
76Obtenir un destinataire JMS
3.3 Message Driven Bean
- 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 (javac
omp/env/jms/stockInfoQueue)
77Component Contract
3.3 Message Driven Bean
- Le cycle de vie dun 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
78MessageDrivenContext
3.3 Message Driven Bean
- Lors dune création dinstance, 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 à lenregistrement de cet objet.
79Cycle de Vie
3.3 Message Driven Bean
80Développement Driven Message Bean
3.3 Message Driven Bean
- Une seule classe à développé celle du bean
- Doit implanter linterface javax.ejb.MessageDriven
Bean - Doit implanter linterface javax.jms.MessageListen
er - Doit être public, non final et non abstract
- Doit disposer dun 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)
81Exemple
3.3 Message Driven Bean
- public class MonMessageDrivenBean implements
javax.ejb.MessageDrivenBean , javax.jms.MessageLis
tener - public MonMessageDrivenBean()
- //From MessageDrivenBean
- public void ejbRemove()
- public ejbCreate()
- protected MessageDrivenContext ctx
- public void setMessageDrivenContext(MessageDri
venContext ctx) this.ctx ctx - //From MessageListener
- void onMessage(Message message) //Business
-
82A vous de jouer
3.3 Message Driven Bean
- Donnez des exemple de MDB
- Vos critiques ?
834 - Transaction
84Overview
4 Transaction
- 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 applications 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.
85Les transactions dans EJB
4 Transaction
- Le support des transactions réparties est une
caractéristique principale de larchitecture 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
86Granularité
4 Transaction
- Spécification dans le descripteur de déploiement
de la granularité - SUPPORTS
- NOT_SUPPORTED
- REQUIRED
- REQUIRES_NEW
- 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
ltcontainer-transactiongt ltmethodgt ltejb-namegt
EmployeRecord lt/ejb-namegt
ltmethod-namegtlt/method-namegt lt/methodgt
lttrans-attributegt Required lt/trans-attributegtlt/co
ntainer-transactiongt
87Supports
4 Transaction
- si l'appelant a une transac. ouverte, l'appelé
sexécute dans ce contexte - sinon aucune transac. nest ouverte
88NOT_SUPPORTED
4 Transaction
- L'appelé ne supporte pas les transactions
- en cas dutilisation dans 1 transac., celle-ci
est suspendue
89REQUIRED
4 Transaction
- si l'appelant a une transac. ouverte, l'appelé
sexécute dans ce contexte - sinon le conteneur commence une nouvelle transac.
90REQUIRES_NEW
4 Transaction
- une nouvelle transac. est systématiquement créée
91MANDATORY
4 Transaction
- si l'appelant a une transac. ouverte, l'appelé
sexécute dans ce contexte - sinon une erreur est générée
925 - Sécurité
93Overview
5 Sécurité
- 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.
94La Sécurité dans EJB
5 Sécurité
- Larchitecture de lEntreprise 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 à lAPI de sécurité de Java
(java.security) pour gérer localement la
sécurité. - Une description aux niveau de larchive (XML)
pour que le serveur gère la sécurité.
95Sécurité par le Container
5 Sécurité
- Il est possible de spécifier des règles daccès
pour chacune des méthodes. - Ceci se fait par lintermédiaire du descripteur
XML - Description de rôles
- Description des règles de sécurités
96Déclaration XML de rôle
5 Sécurité
- ltsecurity-rolegt ltdescriptiongt blabla
lt/descriptiongt ltrole-namegt employe
lt/role-namegtlt/security-rolegt
97Déclaration XML de règles
5 Sécurité
- ltmethod-permissiongt ltrole-namegt employe
lt/role-namegt ltmethodgt ltejb-namegt
EmployeServ lt/ejb-namegt ltmethod-namegtlt/m
ethod-namegt lt/methodgtlt/method-permissiongt
98La Sécurité dans EJB
5 Sécurité
- Larchitecture Entreprise Java Bean utilise le
package de sécurité du langage Java
java.security. Le package nest 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. -
99La Sécurité locale
5 Sécurité
- Un bean a accès aux informations du serveur via
son contexte. Celui-ci offre donc deux fonctions
pour permettre à un bean dobtenir lidentité
dun client. - getCallerPrincipal()
- IsCallerInRole(String role_name)
100Référence des rôle
5 Sécurité
- Si bean référence un rôle (isUserInRole())
ltsecurity-role-refgt ltdescriptiongt blabla
lt/descriptiongt ltrole-namegt employe
lt/role-namegtlt/security-role-refgt
101Déploiement
5 Sécurité
- Cest lors du déploiement quil faut relier les
rôles avec les mécanismes de sécurité - Roles avec user NT
- Roles avec user LDAP
1026 - Environnement
103Overview
6 Environnement
- The Application Assembler and Deployer should be
able to customize an enterprise beans business
logic without accessing the enterprise beans
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.
104JNDI
6 Environnement
- Pour obtenir une ressource, il est vivement
conseillé dutiliser JNDI (lenfer des
ClassLoader) - Lespace de nom java/comp/env est alloué pour
chaque EJB.// Obtain the enterprise beans
environment naming context.Context initCtx new
InitialContext()Context myEnv
(Context)initCtx.lookup("javacomp/env")
105Variables denvironnement
6 Environnement
- Il est possible de définir des variables
denvironnement 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) - ltenv-entrygt
- ltdescriptiongtBlaBlaBla.lt/descriptiongt
- ltenv-entry-namegtmaxExemptionslt/env-entry-namegt
- ltenv-entry-typegtjava.lang.Integerlt/env-entry-t
ypegt - ltenv-entry-valuegt15lt/env-entry-valuegt
- lt/env-entrygt
106EJB
6 Environnement
- 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
107EJB
6 Environnement
- ltejb-refgt
- ltdescriptiongtBlablablalt/descriptiongt
- ltejb-ref-namegtejb/MaRefBean1lt/ejb-ref-namegt
- ltejb-ref-typegtEntitylt/ejb-ref-typegt
- lthomegtfr.jussieu.MonBeanHomelt/homegt
- ltremotegtfr.jussieu.MonBeanlt/remotegt
- lt/ejb-refgt
108Autres types de ressources
6 Environnement
- Vers les BD
- Connection Factory
- Vers les Queue ou Topic
- JMS
-
1097 - ejb jar
110Overview
7 ejb-jar
- The ejb-jar file format is the contract between
the Bean Provider and the Application Assembler,
and between the Application Assembler and the
Deployer.
111Items
7 ejb-jar
- 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
112Descripteur de déploiement
7 ejb-jar
- 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
113Echanges
7 ejb-jar
- LEjb-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.
1148 Best Practices
115Sensibilisation
8 Best Practices
- Larchitecture 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 lexception org.omg.CORBA.COMM_FAILURE
116Design Pattern, Framework
8 Best Practices
- Afin de minimiser les communications
client/server il est intéressant de construire
une copie locale dun bean Entity, deffectuer
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
quun objet de délégation (évolution)
117LEtat du marché
8 Best Practices
- Jusquà EJB 1.1
- pas dEntity Bean (surtout pas CMP)
- pas de sécurité
- EJB 101 Damnations (article)
- Aujourdhui EJB 2.0
- ???
1189 - Conclusion
119Success Story ?
9 Conclusion
- Succès commercial gt 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
120Références
9 Conclusion
- Spécifications
- EJB Specification (version 2.0
- Livres
- Mastering EJB 2.0
- EJB Design Pattern
- Articles
- EJBs 101 Damnations (Dino Fancellu, Robin Sharp,
Matt Stephens)