introduction aux ejb
TRANSCRIPT
![Page 1: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/1.jpg)
Par Oussama IDRISSI OUKILIPar Oussama IDRISSI OUKILI
![Page 2: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/6.jpg)
Objet distribué (rmi)
![Page 7: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/8.jpg)
![Page 9: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/9.jpg)
Architecture 3-tiers
![Page 10: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/12.jpg)
Architecture d’une application J2EE
![Page 13: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/14.jpg)
![Page 15: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/16.jpg)
Les Enterprise JavaBeans
![Page 17: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/20.jpg)
Les Enterprise Beans
![Page 21: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/36.jpg)
![Page 37: Introduction Aux Ejb](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062419/5571f33049795947648da35a/html5/thumbnails/42.jpg)