introduction aux ejb

42
Par Oussama IDRISSI Par Oussama IDRISSI OUKILI OUKILI

Upload: nida2008

Post on 12-Jun-2015

546 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Introduction Aux Ejb

Par Oussama IDRISSI OUKILIPar Oussama IDRISSI OUKILI

Page 2: Introduction Aux Ejb

ProblèmeConstruire des applications pour

entreprisesSuresSécuriséesSupportant la montée en charge (scalable)DisponiblesFavorisant la réutilisationMaintenables et extensiblesPour moins cher

Page 3: Introduction Aux Ejb

MoyenUtiliser une architecture distribuéePlusieurs tiers

Les clients (front end)Les sources de données (back end)Un ou plusieurs tiers entre eux pour

Implanter les nouveaux services Intégrer les différentes sources de données Masquer la complexité de l’entreprise aux clients

Page 4: Introduction Aux Ejb

Architecture à composants distribuésPermettent la construction d’applications

multi-tiersObjectif

Simplifier la création d’application à base d’objets distribués.

Promouvoir la programmation par composant pour le coté serveur

Page 5: Introduction Aux Ejb

Composant logicielDoit permettre la construction de logiciel

par compositionExporte des propriétés et des méthodesPeut être configuré de façon externe

Un composant peut être réutilisable à différent degré

Composants connus :COM/DCOMJava BeansEnterprise Java BeansComposants Corba

Page 6: Introduction Aux Ejb

Objet distribué (rmi)

Page 7: Introduction Aux Ejb

Middleware Explicite

transfer(Account account1, Account account2, long amount) {

// 1: Call middleware API to perform a security check

// 2: Call middleware API to start a transaction// 3: Call middleware API to load rows from the

database// 4: Subtract the balance from one account, add

to the other// 5: Call middleware API to store rows In the

database// 6: Call middleware API to end the transaction}

Page 8: Introduction Aux Ejb
Page 9: Introduction Aux Ejb

Architecture 3-tiers

Page 10: Introduction Aux Ejb

Les solutions existantesMicrosoft DNA (Distributed interNet

Applications Architecture)Windows NT + DCOM + MSMQ (message

queue) + MTS (transactions) + Wolfpack (clustering) + IIS (web server)+ MMC (administration et déploiement)

Sun J2EE (spécification)OMG Corba (specification) et les composants

Corba.

Page 11: Introduction Aux Ejb

J2EEDéfinit une architecture standard incluant

Un modèle de programmation (application multi-tiers, client légers)

Une plate-forme (ensemble de spécifications et de politiques requises)

Un ensemble de test de compatibilitéUne implantation de référence

Page 12: Introduction Aux Ejb

Architecture d’une application J2EE

Page 13: Introduction Aux Ejb

La plateforme J2EEEJB : définit la façon dont les composant doivent être écrit et

le contrat qu’ils doivent respecter avec le serveur d’application

RMI : communication inter procédés JNDI : service de nommage JDBC : connection vec les bases de données JTA : service de transaction JMS : service de messagerie JSP : servlet et Java Server Page adapté à la construction de

composant réseau Java IDL : permet l’intégration avec d’autres langages (en

particulier à travers CORBA) JavaMail Connectors : intégration à des systèmes d’information

existantXML

Page 14: Introduction Aux Ejb
Page 15: Introduction Aux Ejb

Les Enterprise JavaBeansSpécification d’une architecture permettant

la création d’applications distribuées2 versions

1.1 : la plus courante 3.0 : la plus récente

Implantations de la spec : BEA WebLogic, Jonas, Borland Appserver, IBM

Websphere, Jboss (open source)

Composant développé pour être exécuté sur un serveur d’EJBNe pas confondre avec un java bean

Page 16: Introduction Aux Ejb

Les Enterprise JavaBeans

Page 17: Introduction Aux Ejb

Objectifs des EJBFournir une plate-forme standard pour la

construction d’applications distribuées en Java

Simplifier l’écriture de composants serveurs

PortabilitéConsidérer le développement, le

déploiement et l’exécution des applications

Page 18: Introduction Aux Ejb

Division des responsabilitésLe fournisseur de bean

Produit les composants métierLe fournisseur de conteneur EJB

Fournit l’environnement permettant l’exécution des beans

Le fournisseur de serveur EJBFournit l’environnement d’exécution pour un

ou plusieurs conteneursL’assembleur d’applicationLe déployeur (installateur)L’administrateur

Page 19: Introduction Aux Ejb

Les Enterprise BeansComposants qui peuvent être déployés dans un

environnement multi-tiers et distribué.Exposent une interface qui peut être appelé par

ses clientsConfigurés de façon externeL’interface et l’implantation du bean doivent être

conforme à la spécification EJBLes clients peuvent être

Un servlet Une applet Un autre bean

Page 20: Introduction Aux Ejb

Les Enterprise Beans

Page 21: Introduction Aux Ejb

Les types de BeansSession Beans : contiennent la logique métier

de l’applicationStateful session beanStateless session bean

Entity Beans : contiennent la logique de gestion des données persistantes

Message bean : contiennent la logique orientée message

Page 22: Introduction Aux Ejb

Session BeanFournit un service à un clientDurée de vie limitée à celle du clientEffectue des calculs ou des accès à une base

de donnéePeut être transactionnelNon recouvrablePeuvent être sans état ou conversationnel

(stateless ou stateful)

Page 23: Introduction Aux Ejb

Exemple de Session beanpublic class CartBean implements SessionBean {

String customerName; Vector contents; public void ejbCreate(String person) throws CreateException {

… initialisation du bean }// business method public void addBook(String title) { … // code de la méthode} public void removeBook(String title) throws BookException {… } public Vector getContents() {…}

// methodes appelées par le conteneur public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext sc) {}}

Page 24: Introduction Aux Ejb

L’interfaceL’interface décrit le contrat avec les clients

public interface Cart extends EJBObject { public void addBook(String title) throws RemoteException; public void removeBook(String title) throws BookException,

RemoteException; public Vector getContents() throws RemoteException;

}

Page 25: Introduction Aux Ejb

La factoryDéfinit les méthodes permettant de créer, trouver

et détruire des objets EJB

public interface CartHome extends EJBHome { Cart create(String person) throws RemoteException, CreateException; }

Page 26: Introduction Aux Ejb

Le descripteur de déploiementFournit les informations nécessaires au déploiement dans

le conteneur et pour la configuration des intercepteurs<enterprise-beans>

<session>

<display-name>CartEJB</display-name>

<ejb-name>CartEJB</ejb-name>

<home>CartHome</home>

<remote>Cart</remote>

<ejb-class>CartBean</ejb-class>

<session-type>Stateful</session-type>

<transaction-type>Container</transaction-type>

<security-identity>

<description></description>

<use-caller-identity></use-caller-identity>

</security-identity>

</session>

</enterprise-beans>

Page 27: Introduction Aux Ejb

Déploiement (suite) <assembly-descriptor> <method-permission> <role-name>user<role-name/> <method> <ejb-name>CartEJB</ejb-name> <method-intf>Remote</method-intf> <method-name>getContents</method-name> <method-params /> </method></method-permission><container-transaction> <method> <ejb-name>CartEJB</ejb-name> <method-intf>Remote</method-intf> <method-name>getContents</method-name> <method-params /> </method> <trans-attribute>Required</trans-attribute> </container-transaction></assembly-descriptor></ejb-jar>

Page 28: Introduction Aux Ejb

Le clientpublic class CartClient { public static void main(String[] args) {

Context initial = new InitialContext(); // context JNDI CartHome home = initial.lookup("java:comp/env/ejb/SimpleCart");

// Recherche de l’interface de la factory

// Creation de l’objet session Cart shoppingCart = home.create("Duke DeEarl« xs);

// appel de quelques business méthodes shoppingCart.addBook("The Martian Chronicles"); Vector bookList = new Vector(); bookList = shoppingCart.getContents();

shoppingCart.removeBook("Alice in Wonderland");

// suppression de l’objet session shoppingCart.remove();}

Page 29: Introduction Aux Ejb

Les entity beansImplantation d’objets métiers persistants

(client, compte,…)Persistance gérée par

Les conteneurs (CMP)Le bean lui-même (BMP)

Le conteneur gère également les transactions et la sécurité pour le composant.

Utile pour gérer les accès concurrents à des données persistantes.

Page 30: Introduction Aux Ejb

Exemple d’entity bean (CMP)public class BookEJB implements

javax.ejb.EntityBean { public String author; public String titlel; public int price; private EntityContext context;

public String getTitle() {return title;} public String getAuthor() {return author;}; public int getPrice() {return price;} public void setPrice(int _price) {price=_price;}

public String ejbCreate (String _author, String _title) throws CreateException {author=_author;title=_title;price=0;return null;

}

…// Méthodes requises par le conteneur public void ejbPostCreate(String

_author,String _title) { } public void ejbRemove() { } public void ejbLoad() { } public void ejbStore() {}

public void setEntityContext(EntityContext context) {

this.context = context;}

public void unsetEntityContext() {context=null; }

public void ejbActivate() { } public void ejbPassivate() { }}

Page 31: Introduction Aux Ejb

Home interfacepublic interface BookHome extends EJBHome {

public Book create(String id, String url) throws RemoteException, CreateException;

public Book findByPrimaryKey (String id) throws RemoteException, FinderException;

public Collection findAll() throws RemoteException, FinderException;

Public Collection findByAuthor(String author) throws RemoteException, FinderException;

}

Page 32: Introduction Aux Ejb

Interface de l’Entity Beanpublic interface Book extends EJBObject {

public String getAuthor() throws RemoteException; public String getTitle() throws RemoteException; public int getPrice() throws RemoteException; public void setPrice(int mode) throws RemoteException;

}

Page 33: Introduction Aux Ejb

Le descripteur de l’entity bean

<entity> <display-name>Book</display-name> <ejb-name>Book</ejb-name> <home>BookHome</home> <remote>Book</remote> <ejb-class>BookEJB</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>False</reentrant> <cmp-field><field-name>title</field-name></cmp-field> <cmp-field><field-name>author</field-name></cmp-field> <cmp-field><field-name>price</field-name></cmp-field>

<primkey-field>title</primkey-field> <query> <description></description> <query-method> <method-name>findByAuthor</method-name>

<method-params><method-param>java.lang.String</method-param></method-params>

</query-method> <ejb-ql>select distinct object(b) from Book b where b.author=?1</ejb-

ql> </query></entity>

Page 34: Introduction Aux Ejb

Message Driven Bean (ejb2.0)Intégration des EJB et de JMSInteractions asynchronesUtilisé pour réagir à des messages JMSStateless beanUne seule méthode dans l’interface

onMessage()

Page 35: Introduction Aux Ejb

Exemple de message bean <message-driven>

<ejb-name>ValueContainerListener</ejb-name> <ejb-class>hero.container.ValueContainerListener</ejb-class>

<message-selector>JMSType='ValueContainer'</message-selector> <transaction-type>Container</transaction-type> <ejb-ref>

<description>Value Container Home</description> <ejb-ref-name>ejb/valuecontainer</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type>

<ejb-link>ValueContainer</ejb-link> <home>hero.container.ValueContainerHome</home> <remote>hero.container.ValueContainer</remote>

</ejb-ref> <message-driven-destination> <destination-type>javax.jms.Topic</destination-type> <subscription-durability>NonDurable</subscription-durability> </message-driven-destination> </message-driven>

Page 36: Introduction Aux Ejb
Page 37: Introduction Aux Ejb

DéploiementCréation d’un paquetage contenant

Les classes des beansLe fichier de descriptionLes fichiers de configuration spécifique au

serveurD’autres librairies

Mise en place dans le serveur (outils spécifique ou déploiement à chaud)

Page 38: Introduction Aux Ejb

Intérêt des EJBSimplicité de l’écriture des composants

Mais le design est plus complexePortabilité des composants

A l’exception des adaptations des serveursRéutilisation/Composition

Il faut quand même programmerIndépendance par rapport aux vendeurs

Page 39: Introduction Aux Ejb

Bénéfices d’un serveur d’EJBGestion automatisée des stocks de

ressourcesGestion automatisée du cycles de vie des

composantsGestion de la concurrenceScalabilitéFonctionnalités déclarativesDisponibilité et tolérance aux pannesModèle d’objet distribué…

Page 40: Introduction Aux Ejb

Limites actuelles (variables selon les serveurs)

Maturité de la spécification, des technologies,…Moins vrai depuis la version 2.0

Performances ?Environnements de développementComplexité du designExpérience des développeurs

Page 41: Introduction Aux Ejb

Bibliographie et sources des schémas J2EE Specification

Java.sun.com/products/j2eeEnterprise Java Beans Specification 1.1 et 2.0

Java.sun.com/products/ejbMastering Enterprise JavaBeans and the Java 2 Platform

Enterprise Edition – Ed Roman – Wiley Computer publishing 1999

www.theserverside.com java.sun.com/j2ee/tutorialwww.jboss.org (serveur Open Source)Support de cours de Didier Donsez (université de

Valenciennes) J2EE blueprints (java.sun.com)Mastering Enterprise JavaBeans II – Ed Roman -

(www.theserverside.com)

Page 42: Introduction Aux Ejb