introduction aux ejb

Post on 12-Jun-2015

546 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Par Oussama IDRISSI OUKILIPar Oussama IDRISSI OUKILI

ProblèmeConstruire des applications pour

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

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

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

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

Objet distribué (rmi)

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}

Architecture 3-tiers

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.

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

Architecture d’une application J2EE

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

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

Les Enterprise JavaBeans

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

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

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

Les Enterprise Beans

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

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)

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) {}}

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;

}

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

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>

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>

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

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.

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() { }}

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;

}

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;

}

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>

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()

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>

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)

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

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

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

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)

top related