EJB 2.0 Enterprise Java Bean ™ Xavier BLANC Xavier.Blanc@lip6.fr.

Slides:



Advertisements
Présentations similaires
Click to edit Master title style Soccuper de notre personnel Investir dans leur développement professionnel Leur donner confiance en lavenir Look after.
Advertisements

Practical Session – Defining Learning Outcomes
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Data Management for Large-Scale Scientific Computations in High Performance Distributed Systems A. Choudhary, M. Kandemir, J. NoG. Memik, X. Shen, W. Liao,
Laboratoire informatique de Paris 6
Xavier Blanc Web Services Xavier Blanc
Revenir aux basiques !. 1 Revenir aux basiques Processus Nécessité daméliorer la Maîtrise les Offres et Projets: lanalyse des causes racines montre un.
Inforoute Santé du Canada Les défis de linteropérabilité en e-santé Mike Sheridan, Chef de lexploitation 19 mai 2006.
interaction in the .LRN platform
Cliquez et modifiez le titre Cliquez pour modifier les styles du texte du masque Deuxième niveau Troisième niveau Quatrième niveau Cinquième niveau 23/01/2014©
Coopération/Distribution DEA Informatique Nancy. Content 4 Introduction - Overview 4 Coordination of virtual teams : –explicit interaction model –explicit.
Toolkit Web Framework Java pour les IHMs Cédric Dumas mars 2008 contrat Creative Commons Paternité-Pas d'Utilisation Commerciale- Partage.
TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle
JORAM Java Open Reliable Asynchronous Messaging
1 AWAP : Administrable Wireless Access Point Projet de fin détude 2003 Cédric Logeais Mathias Faure.
Stéphane Frenot - Département Télécommunication - SID - II - EjbEnt 247 Entity EJB.
Stéphane Frenot - Département Télécommunication - SID - II - EjbServ 227 EJB Session.
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 211 Le client EJB.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV Threads Module Java Expert.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Session Module Java Expert.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV Borland JBuilder 7 Module WSAD.
Message-Driven Beans Michel Buffa UNSA modifié par Richard Grin (version 1.0, 21/11/11)
LOGO Profile Enterprise Java Beans Réaliser par: HAMROUNI Aymen HOUIJI Manel WESLATI Yassine.
Live Meeting Technique N°3 Thomas LEBRUN – MVP WPF/Silverlight Florent SANTIN – MVP Team System Julien CORIOLAND - MSP.
Connexion base de données
Injection de dépendances
Introduction aux Session Beans
Principes de programmation (suite)
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Java Enterprise Edition
TM.
ISPI. Workshop system. IMPORTANT INFORMATION
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Defence Research and Development Canada Recherche et développement pour la défense Canada Canada 11-1.
AFNOR NF Z – "Online Consumer Reviews
On-line resource materials for policy making Ex-Ante Carbon-balance Tool Food and Agriculture Organization of the United Nations, FAO Apprendre à utiliser.
TortoiseSVN N°. Subversion : pour quoi faire ? Avoir un espace de stockage commun – Tous les étudiants du SIGLIS ont un espace svn commun Partager vos.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Factory Design Patterns Factory Method
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
Le patron de conception « Strategy » Simon Durocher ( )
Youth Involvement - revitalising the Scout Method Participation des jeunes - revitaliser la méthode scoute.
IAFACTORY | conseil en architecture de linformation | | |
PURCHASING PHASE REVIEW Cornerstones of Purchase baseline
Laboratoire de Bioinformatique des Génomes et des Réseaux Université Libre de Bruxelles, Belgique Introduction Statistics.
ADOBE FLEX 4. © Logica All rights reservedNo. 2 Introduction Flex en action Autour de Flex Logica Le programme.
Contribution du projet PARIS Christian Pérez Réunion LEGO LIP, ENS Lyon 10 février 2006.
JUnit Présentation complète de JUnit et « guide d’utilisation » en 13 transparents.
Mise en œuvre du langage MDX
1. Les structures de documentation pour la division ST. 2. Les types de document dans la division ST. 3. Linterface informatique. Lundi 8 Mai 2000 ST Quality.
Systèmes distribués Le futur des systèmes dinformation est: Networked Diverse Numerous Mobile Ubiquitous Systèmes multiagents Middlewares: CORBA JINI HLA.
Le Baromètre Zone Cours : un environnement pour la micro-évaluation de ressources pédagogiques* Jacques Raynauld Olivier Gerbé HEC Montréal, MATI Montréal.
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes APACHE/VELOCITY.
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes Usage.
Employment Policies. an Azorean story...
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
INDICATOR DEFINITION An indicator describes the manifestation of a process of change resulting from the pursuit of an action. Un indicateur décrit la manifestation.
Différencier: NOMBRE PREMIER vs. NOMBRE COMPOSÉ
1. 2 Objective  Know the roles and responsibilities for helping units deploy Comprendre les rôles et les responsabilités d’aider unité à déployer.
Branche Développement Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
Les EJB Samir AZZOUZ Équipe ObjectWeb
Mise en œuvre du langage MDX
Créer des packages.
Enterprise Java Beans 3.0 Cours INF Bases de Données Hiver 2005, groupe 10 Stefan MARTINESCU.
Tutorat en bio-informatique
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Transcription de la présentation:

EJB 2.0 Enterprise Java Bean ™ Xavier BLANC Xavier.Blanc@lip6.fr

Plan Introduction Architecture Développement Transaction Security Session Entity Message Driven Bean Transaction Security Environnement Ejb-jar Best pratices Conclusion

1 - Introduction

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

Exemple d’utilisation 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, …) Sécurité Transaction Portabilité Server EJB Server EJB Mainframe / BD Clients (Java, Web, CORBA).

2 - Architecture

2 - Architecture Overview Enterprise JavaBean is an architecture for component based distributed computing Enterprise Beans are components of distributed transaction-oriented enterprise applications

Component characteristics 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.

Types de Roles Bean provider Application assembler Deployer 2 - Architecture Types de Roles Bean provider Application assembler Deployer System administrator EJB server provider EJB container provider Development Production EJB Architecture

Types de Bean Session Bean : réalise une tache au nom du client 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)

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 bean instances 2 - Architecture EJB Contracts Client-View Client Enterprise bean instances Component Contract Container EJB Server Deployment Descriptor

Client-view (Local / Remote) 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)

Component Contract 2 - Architecture 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.

Deployment descriptor 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)

3 - Développement 3-1 Session Bean

3.1 – Session Bean 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 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 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

Client View 3.1 – Session Bean EJBObject Client EJBHome EJB 1 EJBLocalObject EJBLocalHome EJB 2

Récupération de la Home 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);

Création d’une instance 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");

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

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

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

3.1 – Session Bean Cycle de vie STATEFUL STATELESS

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.

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.

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

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.

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 Cycle de Vie STATEFUL

Création d’une Instance de Session Bean Stateless (1/2) Client EJB Home EJB Object Context Instance Create() new

Création d’une Instance de Session Bean Stateless (2/2) Container Context Instance new new setSessionContext() ejbCreate()

3.1 – Session Bean Cycle de vie STATELESS

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.

Classe d’implémentation 3.1 – Session Bean 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

Interface Remote Doit hériter de javax.ejb.EJBObject 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

Home Remote Doit hériter de javax.ejb.EJBHome 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

Interface Local Doit hériter de javax.ejb.EJBLocalObject 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.

Home Local Doit hériter de javax.ejb.EJBLocalHome 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.

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

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

Exemple import javax.ejb.EJBHome; import javax.ejb.CreateException; 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; }

A vous de jouer Donner des exemples de beans STATEFUL et STATELESS 3.1 – Session Bean A vous de jouer Donner des exemples de beans STATEFUL et STATELESS Définissez leurs classes Vos critiques ?

3 - Développement 3-2 Entity Bean

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.

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.

Architecture 3.2 – Entity Bean EJBObject EJBHome EJB 1 Client EJBLocalObject EJBLocalHome EJB 2

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

3.2 – Entity Bean Vie d’un Entity Bean

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

Component Contract : CMP 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.

Component Contract : BMP 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

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.

3.2 – Entity Bean Cycle de vie : CMP

3.2 – Entity Bean Cycle de vie : BMP

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.

EJB QL Exemples Find all orders : SELECT OBJECT(o) FROM Order o 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’

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.

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.

Classe d’implémentation CMP 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

Classe d’implémentation BMP 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.

Interface Remote Doit hériter de javax.ejb.EJBObject 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

Home Remote Doit hériter de javax.ejb.EJBHome 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

Interface Local Doit hériter de javax.ejb.EJBLocalObject 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.

Home Local Doit hériter de javax.ejb.EJBLocalHome 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

Exemple (CMP) 3.2 – Entity Bean <cmp-field> <field-name>nom</field-name> </cmp-field> <field-name>solde</field-name> 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; } 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; }

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

Exemple (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 }

A vous de jouer Donner des exemple d’Entity Bean Définissez leurs classes CMP ou BMP ? Vos critiques ?

3 - Développement 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.

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

Client View 3.3 – Message Driven Bean Client Destination Instances Container

Obtenir un destinataire JMS 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”);

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

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

3.3 – Message Driven Bean Cycle de Vie

Développement Driven Message Bean 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)

Exemple 3.3 – Message Driven Bean 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} }

A vous de jouer Donnez des exemple de MDB Vos critiques ? 3.3 – Message Driven Bean A vous de jouer Donnez des exemple de MDB Vos critiques ?

4 - Transaction

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

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

Granularité 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 <container-transaction> <method> <ejb-name> EmployeRecord </ejb-name> <method-name>*</method-name> </method> <trans-attribute> Required </trans-attribute> </container-transaction>

Supports 4 – Transaction 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é

NOT_SUPPORTED 4 – Transaction L'appelé ne supporte pas les transactions en cas d’utilisation dans 1 transac., celle-ci est suspendue Appelant Appelé Appelant Appelé

REQUIRED 4 – Transaction 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é

REQUIRES_NEW 4 – Transaction une nouvelle transac. est systématiquement créée Appelant Appelé Appelant Appelé

MANDATORY 4 – Transaction 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

5 - Sécurité

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.

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

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

Déclaration XML de rôle 5 – Sécurité Déclaration XML de rôle <security-role> <description> blabla </description> <role-name> employe </role-name> </security-role> …

Déclaration XML de règles 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>

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.

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)

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>

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 …

6 - Environnement

Overview 6 – Environnement 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 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");

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>

EJB Il est possible de définir des références entre Bean. 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’

EJB <ejb-ref> <description>Blablabla</description> 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>

Autres types de ressources 6 – Environnement Autres types de ressources Vers les BD Connection Factory Vers les Queue ou Topic JMS …

7 - ejb jar

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.

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

Descripteur de déploiement 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

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.

8 – Best Practices

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

Design Pattern, Framework 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) …

L’Etat du marché Jusqu’à EJB 1.1 Aujourd’hui EJB 2.0 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 ???

9 - Conclusion

Success Story ? Succès commercial => Oui 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

Références Spécifications Livres Articles 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)