+ All Categories
Home > Documents > Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC...

Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC...

Date post: 03-Apr-2015
Category:
Upload: ozanne-schneider
View: 115 times
Download: 4 times
Share this document with a friend
120
Enterprise Java Bean X. Blanc Enterprise Java Enterprise Java Bean ™ Bean ™ EJB EJB 2.0 2.0 Xavier BLANC [email protected]
Transcript
Page 1: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Enterprise Java Bean ™Enterprise Java Bean ™

EJB 2.0EJB 2.0

Xavier [email protected]

Page 2: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Plan

1. Introduction2. Architecture3. Développement

1. Session2. Entity3. Message Driven Bean

4. Transaction5. Security6. Environnement7. Ejb-jar8. Best pratices9. Conclusion

Page 3: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

1 - Introduction

Page 4: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

• …

1 - Introduction

Page 5: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Exemple d’utilisationBean façade fournissant tous les services (création commande, achat produit, …)

Beans représentant les données (commande, produit, …)

Clients (Java, Web, CORBA).

Server EJB Server EJB

Mainframe / BD

TransactionSécurité

Portabilité

1 - Introduction

Page 6: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

2 - Architecture

Page 7: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Overview

Enterprise JavaBean is an architecture for component based distributed computing

Enterprise Beans are components of distributed transaction-oriented enterprise applications

2 - Architecture

Page 8: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

2 - Architecture

Page 9: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Types de Roles

• Bean provider

• Application assembler

• Deployer

• System administrator

• EJB server provider

• EJB container providerEJB Architecture

Development

Production

2 - Architecture

Page 10: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

2 - Architecture

Page 11: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

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.

Page 12: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

EJB Contracts

Container

ComponentContract

EJB Server

Deployment Descriptor

Client-View

Enterprise beaninstances

Client

2 - Architecture

Page 13: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

2 - Architecture

Page 14: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

2 - Architecture

Page 15: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

2 - Architecture

Page 16: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

3 - Développement

3-1 Session Bean

Page 17: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Overview

• 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.

3.1 – Session Bean

Page 18: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.1 – Session Bean

Page 19: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.1 – Session Bean

Page 20: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Client View

EJBObject

EJBHome EJB 1

EJBLocalObject

EJBLocalHome EJB 2

Client

3.1 – Session Bean

Page 21: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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’objetObject ref = iniCtx.loohup("java.comp/env/ejb/monBean");

//Cast (si Local alors cast à la Java)MonBeanHome home = (MonBeanHome)

PortableRemoteObject.narrow(obj, MonBeanHome.class);

3.1 – Session Bean

Page 22: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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 createMonBean bean = home.create();//MonBean bean = home.createName("xavier");

3.1 – Session Bean

Page 23: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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 XXXbean.getProductPrice("sourie");

3.1 – Session Bean

Page 24: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.1 – Session Bean

Page 25: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Suppression

• Deux façons existent pour supprimer un bean :– remove(); // directement sur le bean– remove(Handle h); // sur la Home

3.1 – Session Bean

Page 26: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Cycle de vie

3.1 – Session Bean

STATEFUL

STATELESS

Page 27: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.1 – Session Bean

Page 28: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.1 – Session Bean

Page 29: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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é.

3.1 – Session Bean

Page 30: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.1 – Session Bean

Page 31: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Création d’une Instance de Session Bean Stateful

Client EJB Home EJB Object Context Instance

create(args) new

new

new

setSessionContext()

ejbCreate(args)

3.1 – Session Bean

Page 32: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Cycle de Vie STATEFUL

3.1 – Session Bean

Page 33: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Création d’une Instance de Session Bean Stateless (1/2)

Client EJB Home EJB Object Context InstanceCreate()

new

3.1 – Session Bean

Page 34: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Création d’une Instance de Session Bean Stateless (2/2)

Container Context Instancenew

new

setSessionContext()

ejbCreate()

3.1 – Session Bean

Page 35: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Cycle de vie STATELESS

3.1 – Session Bean

Page 36: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.1 – Session Bean

Page 37: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Classe d’implémentation• Doit implanter javax.ejb.SessionBean.

– ejbPassivate(), ejbActivate(), ejbRemove(), setSessionContext()• 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>().

– 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

3.1 – Session Bean

Page 38: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.1 – Session Bean

Page 39: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.1 – Session Bean

Page 40: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.1 – Session Bean

Page 41: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.1 – Session Bean

Page 42: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Exemplepublic 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;}

3.1 – Session Bean

Page 43: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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;}

3.1 – Session Bean

Page 44: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Exemple

import javax.ejb.EJBHome;import javax.ejb.CreateException;import javax.ejb.RemoveException;

public interface CalculatriceHome extends EJBHome {

public CalculatriceRemote create() throws CreateException;

}

3.1 – Session Bean

Page 45: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

A vous de jouer

• Donner des exemples de beans STATEFUL et STATELESS

• Définissez leurs classes

• Vos critiques ?

3.1 – Session Bean

Page 46: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

3 - Développement

3-2 Entity Bean

Page 47: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 48: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 49: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Architecture

EJBObject

EJBHome EJB 1

EJBLocalObject

EJBLocalHome EJB 2

Client

3.2 – Entity Bean

Page 50: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 51: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Vie d’un Entity Bean

3.2 – Entity Bean

Page 52: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 53: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 54: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 55: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 56: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Cycle de vie : CMP

3.2 – Entity Bean

Page 57: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Cycle de vie : BMP

3.2 – Entity Bean

Page 58: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 59: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

EJB QL Exemples

• 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.state=‘CA’

3.2 – Entity Bean

Page 60: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 61: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 62: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 63: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 64: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 65: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 66: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.2 – Entity Bean

Page 67: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.2 – Entity Bean

Page 68: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Exemple (CMP)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() {}public void ejbRemove() {}public void ejbLoad() {}public void ejbStore() {}public void setEntityContext(EntityContext sc) {this.sc = sc;}public void unsetEntityContext() {}protected EntityContext sc;

}

3.2 – Entity Bean

<cmp-field>

<field-name>nom</field-name>

</cmp-field>

<cmp-field>

<field-name>solde</field-name>

</cmp-field>

Page 69: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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;

}

3.2 – Entity Bean

Page 70: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

}

3.2 – Entity Bean

Page 71: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

A vous de jouer

• Donner des exemple d’Entity Bean

• Définissez leurs classes

• CMP ou BMP ?

• Vos critiques ?

3.2 – Entity Bean

Page 72: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

3 - Développement

3-3 Message Driven Bean

Page 73: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.3 – Message Driven Bean

Page 74: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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é.

3.3 – Message Driven Bean

Page 75: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Client View

3.3 – Message Driven Bean

Destination

Container

Bean

Instances

Client

Page 76: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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”);

3.3 – Message Driven Bean

Page 77: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

3.3 – Message Driven Bean

Page 78: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

3.3 – Message Driven Bean

Page 79: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Cycle de Vie

3.3 – Message Driven Bean

Page 80: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

3.3 – Message Driven Bean

Page 81: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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}

}

3.3 – Message Driven Bean

Page 82: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

A vous de jouer

• Donnez des exemple de MDB

• Vos critiques ?

3.3 – Message Driven Bean

Page 83: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

4 - Transaction

Page 84: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

4 – Transaction

Page 85: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

4 – Transaction

Page 86: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Granularité

• 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

<container-transaction> <method>

<ejb-name> EmployeRecord </ejb-name> <method-name>*</method-name>

</method> <trans-attribute> Required </trans-attribute></container-transaction>

4 – Transaction

Page 87: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Supports

• si l'appelant a une transac. ouverte, l'appelé s’exécute dans ce contexte

• sinon aucune transac. n’est ouverte

Appelant Appelé Appelant Appelé

4 – Transaction

Page 88: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

NOT_SUPPORTED

• L'appelé ne supporte pas les transactions

• en cas d’utilisation dans 1 transac., celle-ci est suspendue

Appelant Appelé

Appelant Appelé

4 – Transaction

Page 89: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

REQUIRED

• si l'appelant a une transac. ouverte, l'appelé s’exécute dans ce contexte

• sinon le conteneur commence une nouvelle transac.

Appelant Appelé Appelant Appelé

4 – Transaction

Page 90: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

REQUIRES_NEW

• une nouvelle transac. est systématiquement créée

Appelant Appelé

Appelant Appelé

4 – Transaction

Page 91: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

4 – Transaction

Page 92: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

5 - Sécurité

Page 93: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

5 – Sécurité

Page 94: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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é.

5 – Sécurité

Page 95: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

5 – Sécurité

Page 96: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Déclaration XML de rôle

<security-role><description> blabla </description><role-name> employe </role-name>

</security-role>…

5 – Sécurité

Page 97: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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>

5 – Sécurité

Page 98: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

5 – Sécurité

Page 99: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

5 – Sécurité

Page 100: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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>

5 – Sécurité

Page 101: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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– …

5 – Sécurité

Page 102: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

6 - Environnement

Page 103: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

6 – Environnement

Page 104: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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");

6 – Environnement

Page 105: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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>

6 – Environnement

Page 106: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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’

6 – Environnement

Page 107: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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>

6 – Environnement

Page 108: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

Autres types de ressources

• Vers les BD– Connection Factory

• Vers les Queue ou Topic– JMS

• …

6 – Environnement

Page 109: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

7 - ejb jar

Page 110: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

7 – ejb-jar

Page 111: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

7 – ejb-jar

Page 112: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

7 – ejb-jar

Page 113: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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.

7 – ejb-jar

Page 114: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

8 – Best Practices

Page 115: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

8 – Best Practices

Page 116: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

• …

8 – Best Practices

Page 117: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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– ???

8 – Best Practices

Page 118: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

9 - Conclusion

Page 119: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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

9 – Conclusion

Page 120: Enterprise Java Bean X. Blanc Enterprise Java Bean Enterprise Java Bean EJB 2.0 Xavier BLANC Xavier.Blanc@lip6.fr.

Enterprise Java Bean X. Blanc

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)

9 – Conclusion


Recommended