Professional Documents
Culture Documents
JEE
EJB :
Enterprise Java Beans
Zaki BRAHMI
Equipe Ecri, Laboratoire RIADI (Universit de la Manouba, Tunisie) zakibrahmi@{yahoo.fr, gmail.com}
Plan
La vie dun EJB session stateless La vie dun EJB session stateful
Rappel et Motivations
Interoprabilit : Htrognit des langages et plates-formes. Lapplication utilise/ou rutilise des applications existantes.
Solutions
A software architecture is an abstract system specification consisting primarily of functional components described in terms of their behaviors and interfaces and component-component interconnections". (Hayes-Roth, 1994)
Disposer des composants rutilisables. Disposer dinfrastructures daccueil de ces composants : les serveurs dapplications.
volution logicielle
La programmation classique :
construction des diffrents modules dfinition des instances interconnexions des modules ensemble des fichiers de codes ncessaire changement du mode de communication volution, ajout, suppression de fonctionnalits modification du placement Dploiement manuelle , pas ou peu doutils pour les applications rparties
volution logicielle
intgration de modules logiciels existants construction d'applications rparties par assemblage de modules logiciels existants programmation gros grain ("programming in the large")
Approche : description de l'architecture de l'application l'aide d'un langage dclaratif : modle de construction des composants Construite dynamiquement laide dun gnrateur dapplication :
description des interactions entre composants (connecteurs) description de variables d'environnement (placement, regroupement, scurit, etc.)
une approche modulaire pour la structuration des applications la gnricit (mise en facteur commun du code) Doffrir une granularit variable (entit -> module) Un objet doit possder une rfrence sur les objets appels Un objet doit connatre le nom des mthodes appeles, Les appels sont enfouis dans le code Limit aux appels de mthodes Mode synchrone Absence de support du transactionnel
Une bonne solution : le logiciel libre : Une mauvaise solution : le piratage : Succession des versions -> il faut payer ?? Adquation de la nouvelle version par rapport la configuration matrielle Trop de fonctionnalits (ex : MS-W, MS-EXCEL) Manque de fonctionnalit !
Existence de bugs !
On ne paye que :
10
Publier des composant dans le web Recherche des composants ncessaires, Assemblage Excution distance.
11
Composant
Dfinition :
module logiciel autonome pouvant tre install sur diffrentes plates-formes qui exporte diffrents attributs, proprits ou mthodes qui peut tre configur capable de sauto-dcrire
Objectifs :
12
Compos dun ou plusieurs objets encapsule une logique mtier, qui peut tre dploy dans un serveur dapplication appel par un client distant Dfinition dune architecture pour construire une application en Java dont la partie serveur est construite laide de composants appel Entreprise Beans (EB)
Spcification EJB:
13
Ide de base :
Se concentrer sur le traitement mtier de lapplication Permettent aux dveloppeurs de se concentrer sur les traitements orients mtiers et sous traiter les problmes connus de :
Persistance, Transactions Scurit (authentification, confidentialit, etc.) Rserve (pool) dobjets, quilibrage de charge
un conteneur.
@Remote @Stateful
14
Le conteneur dEJB
encapsulation dun composant fournit des services de nommage, de gestion du cycle de vie, persistance, scurit, transactionnel ces services peuvent tre demands par appels de mthodes par le client. Il seront raliss par des mthodes propres au bean.
15
16
Le client
Localiser le Bean par JNDI (Java Naming and Directory Interface) Utiliser le Bean via :
create(), remove(),
Le client ne communique pas directement avec le bean mais avec le container. En effet, le container possde un mcanisme de dlgation permettant de faire suivre lappel au bean.
17
Le client
Ces interfaces (de mme que le Bean), suivent la spcification EJB Cette spcification requiert que le Bean expose certaines Mthodes
En gnral (EJB 2.1 Session et Entity), le bean doit proposer une interface de cration (Home) et une interface dutilisation (Remote)
De plus deux interfaces daccs local permettant un accs l'EJB depuis un client dans la mme JVM que celle de l'EJB
18
Ecrire la Home interface (initil dans la version EJB 3.0) et/ou Ecrire la Remote interface Ecrire limplmentation (classe) du bean Compiler ces classes et interfaces Construire le descripteur de dploiement ( facultatif partir de la de la spcification EJB 3.0, voir inutile) Construire le fichier darchive .jar ou .ear Ecrire, compiler et excuter le client
2.
Dploiement du Bean
3.
Utilisation du Bean
qui peut tre une servlet ou une application Java ou une applet, etc.
19
#$pes dEJ
20
EJ Session
Non persistant (short-lived) Associ seul client Un flot dexcution est cre pour :
ne conservant pas leur tat entre deux appels peut tre partag par plusieurs clients Exemple : un convertisseur de monnaies
plusieurs appels de mthodes en provenance du mme client : stateful sessions bean (avec tat) :
Exemple : un panier de commandes Un tel EJB est propre un client pendant toute la dure de la session Il gre une conversation avec un client conserver son tat entre diffrents appels de mthodes
21
Les Entit$ EJ
la gestion de la persistance peut tre faite par le bean ( bean managed persistence) ou dlgue son conteneur ()
en gnral, une ligne d une table relationnelle (SGBD-R) ou un objet persistant (SGBD-OO)
22
Les EJ message
Depuis la norme EJB 2.0, Un EJB message permet une communication par message asynchrone. Le client ne s'adresse pas directement aux composants mais publie un message en utilisant lAPI JMS (Java Message Service) Si un message est publi, le serveur applicatif dclenche l'activation d'une instance de l'EJB concern pour pouvoir traiter ce message.
23
EJ %&' session
1.
24
EJ %&' session
2. Implmentation du composant :
import javax.ejb.Stateless; Package contacte; @Stateless(mappedName="ContactBean") public class ContactBean implements ContactRemote { public String Contact(String nomContact) { return Bonjour, "+nomContact; } }
25
EJ %&' session
Cot client :
import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; Import contacte.ContactRemote; public class Main { public static void main(String[] args) { try { Context context = new InitialContext(); ContactRemote beanRemote = (ContactRemote) context.lookup("ContactBean"); System.out.println(beanRemote.Contact("Mon Premier Client EJB3")); } catch (NamingException e) { e.printStackTrace(); } }}
26
ean Entit"
Permettre plusieurs utilisateurs daccder aux mmes donnes Stocker et/ou accder des donnes
27
ean Entit$
Des objets :
Classe Mtier
Container
28
Le gestionnaire de persistance
Permet le mapping entre les objets java JEE et la Base de donnes relationnelles Remplace Hibernate Souplesse dcriture du code de persistance Utilisation possible de lhritage des objets Possibilit de dploiement dans ou hors un conteneur EJB
Avantages :
29
30
E(emple
Annuaire personnel :
31
E(emple
Lentit Personne
package BD.personnes; @Entity public class Personne implements Serializable { @Id Cl premire private int codePersonne; private String nom; public Personne() { super(); }
public int getCodePersonne() { return this.codePersonne; public void setCodePersonne(int codePersonne) { this.codePersonne ! codePersonne; public String get"om() { return this.nom; public void set"om(String nom) { this.nom ! nom;
32
E(emple
@generatedValue[strategy=] Dfinit une politique de gnration automatique de la cl-primaire @Table[name=] @Column[name= ] Assigne lentit une table spcifique Assigne lattribut qui suit une colonne spcifique de la table
33
E(emple
package BD.personnes; @Entity @Table(name= " Personne ") public class Personne implements Serializable { @Id @Column(name = "code_personne ", nullable = false) private int codePersonne; @Column(name = "NOM") private String nom; public Personne() { super(); public int getCodePersonne() { return this.codePersonne; public void setCodePersonne(int codePersonne) { this.codePersonne ! codePersonne; public String get"om() { return this.nom; public void set"om(String nom) { this.nom ! nom;
34
35
Accs direct lEM (entityManager) par injection : @PersistenceContext(unitname= ) private EntityManager em;
36
Supprimer un objet
Rechercher un objet
37
E(emple
Cration dun bean session de type Stateless afin de manipuler lentit personne :
package managers; import javax.ejb.Remote; @Remote public interface PersonneManager { public void creerPersonne(String nom, String prenom); public Personne rechercherPersonne(int clef); public void supprimerPersonne(int clef); public void setNomPersonne(int clef, String nom); public void setPrenomPersonne(int clef, String nom); }
38
E(emple
Fonction dajout :
package managers; import javax.ejb.Stateless; @Stateless public class PersonnesManagerBean implements PersonnesManager { @PersistenceContext private EntityManager em; public void creerPersonne(String nom, String prenom) { Personne p= new Personne(); p.setNom(nom); p.setPrenom(prenom); this.em.persist(p); } }
39
E(emple
40
R")"rences
Richard Monson-Haefel, Enterprise JavaBeans , 1st Edition June 1999 (est.), ISBN 1-56592-605-6, Ed O'Reilly Quelques sites : http://java.sun.com/products/ejb http://java.sun.com/products/j2ee http://www.execpc.com/~gopalan/java/ejb/ http://developer.java.sun.com/developer/onlineTraining/EJBIntro/EJ BIntro.html