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