Vous êtes sur la page 1sur 24

Plan

Formation J2EE
Partie III
(Composant mtier: EJB3.0)

Ahmed JEMAL
Email :
jmlhmd@gmail.com

Riadh BEN HALIMA


Email :
riadh.benhalima@enis.rnu.tn

Introduction
Composant EJB
EJB2.0
EJB3.0
Session Bean
Injection de dpendance (IoC)
Entity Bean (JPA)
Message Driven Bean
Web Service EndPoint
Intercepteurs
Composant web

Introduction : Limites des objets distribus


et extensibilit
Extension du serveur par un nouvel objet :

Introduction : Programmation oriente


composant
La Programmation oriente-composants est la
combinaison de :

arrt et recompilation du serveur, redmarrage des clients (mme


ceux qui nutilisent pas lextension)

Extension des interfaces ou des implmentations

le cycle de vie des objets (au niveau des factories)

arrt et recompilation du serveur et/ou


arrt et recompilation des clients (mme ceux qui nutilisent pas
lextension)

Le dveloppeur gre lui-mme :

chaque instance = une variable, une case d un tableau, etc...

Laspect fonctionnel de la programmation oriente objets,


Laspect non-fonctionnels:

Gestion de cycle de vie


Gestion de la persistance
Gestion de dployement

avec l'extensibilit comme objectif


[source]: Clemens Szyperski. Component-Oriented Programming, A Refined
Variation on Object-Oriented Programming. [The Oberon Tribune, Vol 1, No 2,
December 1995]. http://www.oberon.ch/resources /component_software/cop.html

tous les services externes son application (persistance, nommage,)


(au niveau de lobjet applicatif)

Introduction : Prog. oriente objet vs.


prog. oriente composant
Programmation oriente objets =

polymorphisme +
quelque liaison dynamique ( some Late Binding ) +
une certaine abstraction des informations (some Information Hiding) :

hritage

sret et scurit (safety) : au niveau utilisation

Un composant logiciel est un code qui implante un ensemble bien dfini


dinterfaces. Cest un gros morceau de logiciel grable. Les composants
ne sont pas des applications entires. Ils ne peuvent pas sexcuter seuls.
Ils sont utiliss, plutt, comme des morceaux de puzzles pour rsoudre
un problme plus large.

[2] : Ed Roman. Mastering the Entreprise Java Beans. John Wiley & Sons Inc. 1999

Introduction : Le gnie logiciel orient


composant : Ing, Prod,
Fournisseur de
composant

Cycle de dveloppement et intervenants:

Utilisateur final

Interfaces multiples
Connexions

Infrastructure :

par assemblage de composants

Architecture des composants:

Administrateur

Fournisseur de
conteneur/serveur

pas de phase dintgration finale

Dveloppement des applications (Production):

Dployer le
systme
Dployeur

Dveloppement des composants (Ingnierie):

Maintenir
lapplication

Construire une
application
Assembleur
dapplications

Les bases communes aux modles


composants mergeants

Construire un
composant

Une entit autonome (Boite noire) de code logiciel compose de ses


propres donnes et logique avec des connexions ou des interfaces bien
dfinies et exposes la communication.
Elle est conue pour usage rpt (Rutilisation) lors du dveloppement
dapplications avec ou sans personnalisation.

Df [2]:

Au niveau utilisation

[source]: Clemens Szyperski. Component-Oriented Programming, A Refined Variation on


Object-Oriented Programming. [The Oberon Tribune,Vol 1, No 2, December
1995].http://www.oberon.ch/resources/component_software/cop.html

[1]: Edward Cobb. CORBA Components: The Industrys First Multi-Language Component
Standard. Document omg/00-06-01 (CCM Tutorial). http://www.omg.org

polymorphisme +
liaison dynamique systmatique ( really Late Binding ) +
vraie abstraction des informations (real Information Hiding) :

Df [1]:

Tous les mcanismes offerts au niveau dveloppement : encapsulation,


protection (public/private/protected)

Programmation oriente composants =

Introduction : Le composant : une


nouvelle entit de programmation

Conteneur
Services de base : transaction, scurit, vnement,
persistance

Dfinition: Composant J2EE


Composant J2EE

A J2EE component is a self-contained functional software


unit that is assembled into a J2EE application with its related
classes and files and that communicates with other
components. [Sun]

Un composant autonome du cot serveur qui encapsule la


logique mtier de lapplication

on se focalise sur la logique applicative (fonctionnels)


les services systmes (non-fonctionnels) sont fournis par le conteneur
la logique de prsentation est du ressort du client

10

Objectifs des EJB


Fournir un modle standard pour la construction
dapplications distribues en Java

EJB
Written in the Java programming language, an Enterprise
Bean is a server-side component that encapsulates the
business logic of an application. [Sun]

Composants clients : client standalone, client web, applet


Composants Web : Servlet, JSP
Composants Business : Enterprise Java Beans (EJB)

Trois types de composants dans J2EE

Dfinition: Composants Business


(Enterprise Java Beans)

Dveloppement (Ing./Prod.)
Dploiement
Excution

Simplifier lcriture de composants serveurs


Portabilit (Java, inter-conteneurs)

11

Type de composants EJB


Types

d'EJB

Session : assure une tche au client.


Entity : reprsente un composant mtier qui
est enregistr dune manire permanente.
Message-Driven : se base sur la notification par
des messages asynchrones

12

Composants EJB (1/2)

Composants EJB (2/2)

Enterprise Java Bean (EJB)

Enterprise Java Bean (EJB)

Modle de composants pour le dveloppement d'applications


d'entreprises

Serveur dapplication
Conteneur dEJB

Prsentation

Traitement

Donnes

EJB

Assurer la
gestion :
- du cycle de vie du bean
-de l'accs au bean
- de la scurit d'accs
- des accs concurrents
- des transactions

EJB

Conteneur dEJB
EJB

EJB

Serveur dapplications
(Objets mtiers=EJB)

Client lger

SGBD
(Gestion de la persistance)

13

Navigateur/
Application

14

Composants EJB1.0

Composants EJB: Utilisation

Enterprise Java Bean


Machine 1

Machine 2
EJ Bean
RemoteHome
interface

Client
distant

Remote
interface

Chaque EJ Bean fournit 2 interfaces d'accs distant (EJB1.0)

Gestion de la persistance pour


< EJB2.1
(EJB3.0 : API Java Persistence)

EJB

Enterprise Java Bean


Home

Chercher la rfrence
de MyHome au prs du
JNDI

Singleton (1 seule instance par bean)


Unique point daccs au bean
(jamais accs direct aux beans)
Recherche ou cration de beans
Enregistre dans le service de
nommage (JNDI)

(Java Naming and Directory Interface)

Remote : les services "mtiers" (mthodes) fournis par le bean


RemoteHome : linterface de gestion du composant (cration, recherche,
destruction d'instances de bean)

JNDI

1
2

MyHome

Client
4

RMI-IIOP
15

16

Taxonomie des composants EJB 2.0

Composants EJB2.0

Style moniteur de transactions :


courte dure de vie, pas de clef,
relation 1--1 avec les clients, accs
explicite aux BD.
Exemple : Serveur E-commerce

Enterprise Java Bean


Machine 2
EJ Bean
RemoteHome
interface

LocalHome
interface

Remote
interface

Local
interface

Session
Beans
Client
distant

Exemple: Agent
inventaire

Stateless
(sans tat)

Stateful
(avec tat)

Exemple: Shopping
(Caddie)

+ ventuellement 2 interfaces d'accs local ( partir dEJB 2.0)

Vue composant dune colonne ou


dun objet de base de donnes.
Peut avoir une longue dure de vie,
accs avec clef, stateful, 1--N
relation avec les clients.
Exemple: Client de E-commerce

Entreprise
Java Beans

Message
Driven Beans

Exemple:
Notification
asynchrone

Entity
Beans

ContainerManaged
Via le mapping
vers les services

SelfManaged
Explicitement via
JDBC

(i.e. pour composants hbergs dans le mme conteneur meilleure performance)


Local
les services "mtiers" (mthodes) fournis par le bean
LocalHome interface de gestion du composant
17

18

Limites de la version EJB2.x

EJB2.0 : Complexe et lourd mettre en uvre

19

Cration de plusieurs interfaces et classes (Bean, Local,


RemoteHome,)
Implmentation de mthodes callback gnralement inutiles
L'interface de l'EJB doit hriter de EJBObject ou de
EJBLocalObject
Chaque mthode de l'EJB doit lever l'exception
RemoteException
Le descripteur de dploiement des EJB est obligatoire et
complexe
L'appel d'un EJB par un client ncessite obligatoirement une
utilisation de JNDI
..

Objectif de la version EJB3.0

EJB3.0 : Simplifier le dveloppement et la mise en


uvre des EJBs

20

Lutilisation des interfaces nest plus ncessaire = sans Home


+ interface mtier est facultative (mais recommande)
L'utilisation des annotations (le descripteur de dploiement
est facultatif )
L'utilisation de POJO et de JPA pour les beans de type entity
L'injection de dpendances rend trs facile l'obtention d'une
instance d'une ressource gre par le conteneur

La spcification EJB3.0:

Spcification : JSR 175 (implante >=jdk1.5)


Gestion de la persistance : API Java Persistence (au lieu
du conteneur partir de EJB3.0)
Intercepteur =~ AOP
Les classes et les interfaces des EJB 3.0 sont de simples
POJO ou POJI
Les annotations:

Les annotations obligatoires : Spcification du type du bean


Toutes les annotations ont une valeur par dfaut (Valeur
typique dutilisation)
Utilisation du descripteur de dploiement pour des besoins
trs particuliers

Outils de travail

LINUX

ANT (apache-ant-1.8.1)

export JBOSS_HOME=<chemin-JBOSS>/jboss-x.y
export JAVA_HOME=<chemin-JDK>/jdk-x.y
export PATH=$PATH:<chemin-JDK>/jdk-x.y/bin:<chemin-ANT>

/apache-ant-x.y/bin (ou <chemin-MAVEN> /apache-maven-x.y/bin)

Pour lancer le serveur jboss, il faut procder comme suit:

Ouvrir "Panneau de configuration"/Systme/Avanc/"Variables


denvironnement"
Ajouter les variables suivantes:

23

JBOSS_HOME=<chemin-JBOSS>
JAVA_HOME=<chemin-JDK>
PATH= %PATH%;<chemin-JDK>/bin;<chemin-ANT>/bin (ou
<chemin-MAVEN> /apache-maven-x.y/bin)

Lancer la commande run.sh (Linux: utiliser la commande source ou


sh)/run.bat (Windows) situe sous "$JBOSS_HOME/bin"

Pour compiler et dployer un EJB

Windows

LINUX: Copier et extraire ant


Windows: Copier et extraire ant
Ou Maven (apache-maven-2.2.1)

Mise en oeuvre

Ajouter les lignes suivantes dans le fichier bashrc (/home/<votre


compte>/.bashrc), et puis excuter le sous un shell:

LINUX: Copier et extraire jboss


Windows: Copier et extraire jboss

22

Configuration des variables


denvironnement

LINUX: ./jdk-x.y-linux.bin (changer les droits daccs en cas de


besoin par la commande chmod 777 jdk-x.y-linux.bin)
Windows: Installer JDK

JBOSS (>jboss5)

21

JDK (>jdk-1.5)

24

Se placer dans le rpertoire contenant le composant


Lancer la commande ant (cette commande est oriente par le fichier de
configuration Build.xml) ou Maven (seulement pour EJB3.0, elle est
orient par le fichier de configuration pom.xml) pour compiler et
dployer lejb.
Utiliser cette mme commande avec loption run pour lancer le client
Utiliser la commande ant clean pour vider le conteneur.

La spcification EJB3.0:
Les annotations

ANT/MAVEN: Automatisation

Excution dune chane squentielle de commandes


indpendamment du systme dexploitation
Utilise une description XML de la chane (build.xml)

mkdir

compile

archive

deploy

Cration des rpertoires cibles (build et classes)


Compilation des sources
Cration de larchive (jar/war/ear)
Dploiement (Copie de larchive dans le rpertoire de dploiement)
Excution

Le conteneur peut gnrer linterface pour le bean:

@ javax.ejb.Stateless

public class HelloBean

Priorit (pour le conteneur):

Le descripteur de dploiement, (information centralise)


Les annotations, (plus facile mettre en uvre)
Les valeurs par dfaut.

Composants EJB3.0

Enterprise Java Bean 3.0


Machine 1

Machine 2

public String say_hello()

@Remote : permet un accs l'EJB depuis un client hors de la JVM


@Local : permet un accs l'EJB depuis un client dans la mme JVM que celle de
l'EJB
Par dfaut, l'interface d'appel est locale si aucune annotation n'est indique. (sans
@Remote ou @Local)

26

EJB3.0 sans interfaces.!!!

EJ Bean
Local
interface

return "\n****Hello World****";

SessionBean : @Stateless, @Stateful


EntityBean: @Entity
MessageDrivenBean : @MessageDriven

Type daccs:

run

25

Type de lEJB:

}
}

Non recommand:
Les interfaces gnres exposent par dfaut toutes les
mthodes de l'EJB
L'interface est utilise par le client pour invoquer l'EJB
Le nom des interfaces gnres utilise le nom de
l'implmentation de l'EJB

Remote
interface

Client
distant

Bean : La logique mtier de lEJB


Local/Remote : Linterface daccs distant aux services mtiers (mthodes) fournis
par le bean

(Rq: pour un composant hberg dans le mme conteneur, linterface Local


offre de meilleure performance)

Ce nest pas ralisable sous JBOSS!!


27

28

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

EJB3.0: plus simple dvelopper

Inutile de lever lexception RemoteException pour chaque


invocation distance
Pas besoin dimplanter les mthodes relatives la gestion
du cycle de vie du bean (ejbActivate, ejbLoad, ejbPassivate, ejbRemove)
Elles sont remplaces par des annotations facultatives

@Remove pour une mthode excute juste avant la


suppression du bean

Chaque attribut de dploiement possde une valeur par


dfaut qu'il ne faut dfinir que si cette valeur ne rpond
pas au besoin.

29

A session bean represents a single client inside the Application Server.To access an application that is
deployed on the server, the client invokes the session beans methods.The session bean performs work for
its client, shielding the client from complexity by executing business tasks inside the server. [Sun]

Dveloppement: 2 interfaces + 1 classe


Interface Remote

Services "mtiers" fournis par le bean en local


@javax.ejb.Local

Session EJB: Linterface Remote

Interface Remote

Rle

Class[] value

Prciser la liste des interfaces distantes de l'EJB. Son


utilisation est obligatoire si la classe de l'EJB implmente
plusieurs interfaces diffrentes java.io.Serializable,
java.io.Externalizable, ou une des interfaces du package
javax.ejb (optionnel)

Code des interfaces Remote et Local


@javax.ejb.Stateless (bean sans tat)/@javax.ejb.Stateful (bean avec tat)

@ javax.ejb. Remote (value={HelloRemote.class}) //dans HelloBean.java


// ou @Remote (HelloRemote.class) pour 1 seule interface remote

Liaison au JNDI

31

Services "mtiers" fournis par le bean


Encapsule un attribut (utilisable avec lannotation):

Attribut

Classe Java (Bean)

Services "mtiers" fournis par le bean


@javax.ejb.Remote

Interface Local

30

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Session EJB

Session

"ejbName/local" pour linterface Local


"ejbName/remote" pour linterface Remote
32

Session EJB : Linterface Local

Interface Local

Services "mtiers" fournis par le bean


Encapsule un attribut (utilisable avec lannotation):

Attribut

Rle

Class[] value

Prciser la liste des interfaces distantes de l'EJB. Son


utilisation est obligatoire si la classe de l'EJB implmente
plusieurs interfaces diffrentes java.io.Serializable,
java.io.Externalizable, ou une des interfaces du package
javax.ejb (optionnel)

Session EJB : Code fonctionnel du bean

Class Java du SB

Attribut

Rle

String name

Nom de l'EJB (optionnel)

String mappedName

Nom sous lequel linterface Remote de l'EJB sera lie au JNDI. La


valeur par dfaut est le nom non qualifi de la classe (optionnel)

String description

Description de l'EJB (optionnel)

@javax.ejb.Stateless (name="HelloBean")
//(ou @javax.ejb.Stateful)
public class HelloBean implements HelloRemote, HelloLocal
{
public String say_hello()
{
return "\n****Hello World****"; }
}

@ javax.ejb.Local
public interface HelloLocal
{
String say_hello();
}
33

34

Session Bean

Client

Le client utilise linterface Remote lorsquil est excut dans un autre


JVM que celle de l'EJB
import org.enis.ejb3.stateless.bean.HelloRemote;
import javax.naming.InitialContext;
public class Client
{
public static void main(String[] args) throws Exception
{
InitialContext ctx = new InitialContext();
HelloRemote hello = (HelloRemote) ctx.lookup("HelloBean/remote");
System.out.println(hello.say_hello());
} }

35

Code des mthodes de l'interface Remote (et Local)


Encapsule plusieurs attributs (utilisables avec lannotation)

Le client utilise linterface Local lorsquil est excut dans la mme


JVM que celle de l'EJB. Ce type d'appel est le plus performant puisqu'il
ne ncessite pas d'changes rseaux et donc pas de mcanisme pour
grer ces changes (srialisation/dsrialisation, RMI, etc.)

Annotations intervenantes dans le cycle


de vie (callbacks)

EJB Session sans tat (Stateless)

Annotation

Rle

@PostConstruct

est invoque aprs que l'instance soit cre et que les


dpendances soient injectes

@PreDestroy

est invoque avant que l'instance de l'EJB ne soit


supprime ou dtruite

Nb: Les annotations se trouvent dans le package javax.annotation.*


36

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Annotations intervenantes dans le cycle


de vie (callbacks)

EJB Session avec tat (Stateful)

Travail faire (1/3): Initiation

Compiler et excuter la Session Stateless fournie par


lenseignant
Modifier la mthode say_hello(..) en ajoutant un paramtre
dentre qui reprsente le nom du client.

Annotation

Rle

@PostConstruct

est invoque aprs que l'instance soit cre et que les


dpendances soient injectes

@PreDestroy

est invoque avant que l'instance de l'EJB ne soit


supprime ou dtruite. Elle sexcute avant quune
mthode annote avec @Remove ne soit invoque.

@Remove

est invoque avant que l'EJB ne soit retir du conteneur

@PostActivate

est invoque aprs que l'instance de l'EJB ne soit


dsrialise du disque. C'est l'quivalent de la
mthode ejbActivate() des EJB 2.x

est invoque avant de l'instance de l'EJB ne soit


srialise sur disque. C'est l'quivalent de la mthode
ejbPassivate() des EJB 2.x

@PrePassivate

public String say_hello(String s)


{return "Bonjour "+s;}
Compiler et lancer le client.
Quelles sont les classes modifier pour mettre en uvre cette
modification?

Etendre lEJB par la mthode add(..):


public int add(int a, int b)
{return a+b;}

Refaire les mmes modifications avec la Session Stateful

Nb: Les annotations se trouvent dans le package javax.annotation.*


37

Travail faire (2/3): Maitrise

38

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Le but de cette manipulation est de connaitre et comprendre la


diffrence entre une session avec tat (stateful) et une session
sans tat (stateless)
Modification faire pour chaque EJB:
Ajouter un attribut dans la session initi 0: (int a=0;)
Incrmenter et afficher cet attribut dans la mthode say_hello(..):
(a++;System.out.println("a = "+a);)

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Travail faire (3/3): Dveloppement

Dvelopper le bean session stateless Calculatrice qui


offre les mthodes suivantes :

double som(double x, double y)//somme


double mult(double x, double y)//multiplication
double sous(double x, double y)//soustraction

Exprimentation:

39

Lancer 5 clients qui invoquent la mthode say_hello(..) une seule


fois. Noter le rsultat obtenu.
Lancer 5 clients que chacun invoque la mthode say_hello(..) 5
fois (utiliser une boucle for). Noter le rsultat obtenu.
Interprter les rsultats et conclure.
Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

40

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Les Injecteurs de dpendances

Cration des injecteurs:

Injection de dpendance

Exemple de ressources:
Rfrence vers un autre EJB,
Contexte de transaction,
Contexte de persistance, etc.
Exemple dannotations dinjection:

41

Accder au lEJB calculatrice partir dun autre EJB

(@javax.annotation.Resource)

Nom de la
ressource au
JNDI

Exemples:

@Resource(mappedName="DefaultDS")
private javax.sql.DataSource ds;

Connexion au JNDI et initialisation automatique de


lattribut calculatrice

@Resource
javax.ejb.SessionContext ctx;

private CalculatriceRemote calculatrice;


@EJB(beanName="org.enis.gi3.injection.bean.Calcul
atriceBean")
public void setCalculatrice(CalculatriceRemote c)
{calculatrice = c; }

@Resource
javax.ejb.UserTransaction ut;
@PersistenceContext
javax.persistence.EntityManager em;

Injection de la dpendance au niveau de la


mthode
Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Injection de ressources

@javax.ejb.EJB
private CalculatriceRemote calculatrice;

43

Injection dun EJB (@EJB)


Injection de ressources (@Resource )

42

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Injection dun EJB


(@EJB)

(1)Dclaration de ressources avec les annotations


(2)Injection des ressources par le conteneur au moment de
linstanciation du bean

44

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Travail faire

Dvelopper le bean session stateful Shopping:


Attributs
String tabProduits[]
int tabQuantite[]
double tabPrix[]
double total
Mthodes:

45

Entity

public void achatproduit(String produit, int quantite, double prix) //ajout au


caddie
public String listproduitachete() //retourne la liste des produits achets
public boolean supproduit(String produit, int quantite) //supprime un produit
du caddie
public double getTotal() // retourne le prix des produits dans le caddie
(utiliser les mthodes offertes par lEJB inject Calculatrice)
public boolean payement(long rib) // affiche un message de russite du
payement du total
@javax.annotation.PostConstruct (une mthode qui affiche un message pour
confirmer la cration dune nouvelle instance (nouveau client) du bean)

46

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Dfinition

Enregistre les donnes dans un SGBD (ou tout autre support


accessible en JDBC)
Assure une correspondance objettuple relationnel (mapping O/R)
Offre la possibilit de dfinir des cls, des relations, des
recherches

Avantage :

Entity Bean:
Dveloppement

Reprsentation de donnes manipules par l'application:

Annotation @Entity : dclare une classe correspondant un entity bean (EB)

Chaque classe de lEB est mise en correspondance avec une table:

Annotations
JPA (Java Persistence API)

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

par dfaut, la table porte le nom que la classe

sauf si on spcifie le nom travers lannotation @Table(name="...")

property-based access : on annote les mthodes getter

field-based access : on annote les attributs

Nom de la colonne

par dfaut, la colonne porte le nom que field/property

sauf si on spcifie le nom travers lannotation @Column(name="...")

Cl primaire : annotation @Id

Types supports:

47

Deux modes (exclusifs) de dfinition des colonnes des tables:

Manipulation d'objets Java plutt que de requtes SQL

Mis en uvre:

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Types primitifs (et leurs types Class correspondants): String, Date, etc.

Attribut transitoire (non persistant) : @javax.persistence.Transient


48

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Dveloppement

Entity Bean:
Dveloppement

@Entity

public class Livre implements java.io.Serializable {


private long id;

Livre

private String auteur;


private String titre;
public Livre() {}
public Livre(String auteur, String titre) {

- id: long
-auteur: string
-titre: string

this.auteur = auteur;

this.titre = titre; }

@Id
@GeneratedValue(strategy=GenerationType.AUTO)

Possibilit de dfinir des champs auto-incrments


annotation @GeneratedValue
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getId() { return id; }

GenerationType.AUTO : les numros de squence sont choisis


automatiquement
GenerationType.SEQUENCE : un gnrateur de numros de
squence est fournir

public long getId() { return id; }


public void setId(long id) { this.id = id; }
public String getAuteur() { return auteur; }
public void setAuteur(String auteur) { this.auteur = auteur; }
public String getTitre() { return titre; }
49

public void setTitre(String titre) { this.titre = titre; } }


Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Gestionnaire d'entits

Entity Manager:

assure la correspondance entre les objets Java et les tables


relationnelles
point d'entre principal dans le service de persistance
permet d'ajouter et de supprimer des enregistrements
permet de crer et d'excuter des requtes
accessible via une injection de dpendance
attribut de type javax.persistence.EntityManager
annot par @PersistenceContext

50

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Gestionnaire d'entits
Exemple
Cration de trois enregistrements l1, l2 et l3 dans la table
des livres et suppression de l2
@Stateless
public class MyBean implements MyBeanRemote {
@PersistenceContext
private EntityManager em; /* private/protected */
public void init()
{
Livre l1 = new Livre("Honore de Balzac","Le Pere Goriot");
Livre l2 = new Livre("Honore de Balzac","Les Chouans");
Livre l3 = new Livre("Victor Hugo","Les Miserables");
em.persist(l1);//Enregistrer linstance l1 de lentit dune manire permanente
em.persist(l2);
em.persist(l3);
em.remove(l2); //Supprimer linstance l2 de lentit
}

}
51

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

52

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Gestionnaire d'entits
Gestion de la persistance: persist(Object entity)
Em.persist(b1)
Recherche par cl primaire: find(Class entityClass, Object primaryKey)
Livre monLivre = em.find(Livre.class,12);
Retourne:

Entity Bean:
Gestionnaire d'entits

Recherche par requte (dynamique)

Livre si tout va bien


null si la cl n'existe pas dans la table
IllegalArgumentException si le 1ier paramtre n'est pas une classe d'EB
ou si le 2ime paramtre ne correspond pas au type de la cl primaire

Suppression : remove(Object entity)


em.remove(b1)

53

Recherche par requte pr-compile (statique)

Cration d'une requte nomme attache l'EB

@Entity

@NamedQuery(name="Livres",query="select OBJECT(b) from Livre b")

public class Livre { ... }

Query q = em.createNamedQuery("Livres");

List<Livre> list = (List<Livre>) q.getResultList();

Paramtres peuvent tre spcifis (voir transparent prcdent)


Plusieurs requtes nommes peuvent tre dfinies

@Entity

@NamedQueries(

value={ @NamedQuery("q1","..."), @NamedQuery("q2","...") }

public class Livre { ... }

Les autres mthodes sont dcrites dans le docs de Java:

http://download-llnw.oracle.com/javaee/6/api/javax/persistence/EntityManager.html
55

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Le mot cl OBJECT est utilis pour dsigner un rsultat retourner


sous la forme d'un objet
Des paramtres nomms (prfixs par ":") sont utiliss pour
configurer la requte
Query q = em.createQuery("select OBJECT(b) from Livre b
where b.auteur = :au");
q.setParameter("au", "Honore de Balzac");
List<Livre> list = (List<Livre>) q.getResultList();

Mthode getSingleResult() pour rcuprer un rsultat unique


et qui retourne NonUniqueResultException en cas de non
unicit

54

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Gestionnaire d'entits

Requte SELECT dans une syntaxe dite EJB-QL

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Annotations intervenantes dans le cycle


de vie (callbacks)

EJB Entity

Annotation

Rle

@PrePersist

est invoque juste avant que linstance de lentit ne soit cre dans la
base de donnes.

@PostPersist

est invoque juste aprs que linstance de lentit soit cre dans la
base de donnes.

@PreRemove

est invoque juste avant que linstance de lentit ne soit supprime de


la base de donnes.

@PostRemove

est invoque juste aprs que linstance de lentit soit supprime de la


base de donnes.

@PreUpdate

est invoque juste avant que la base de donnes ne soit mise--jour

@PostUpdate

est invoque immdiatement aprs que la base de donnes soit mise-jour

@PostLoad

Invoque juste aprs le chargement des donnes de la base de


donnes et leur association avec lentit

56

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Configuration

Travail faire

Configuration: $EntityFolder\META-INF\persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>


Hypersonic:
- <persistence xmlns=".." xmlns:xsi=".." xsi:schemaLocation=".." version="1.0">
SGBD en Java
- <persistence-unit name="tempdb">
<jta-data-source>java:/DefaultDS</jta-data-source>
inclus JBoss
- <properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>

Dvelopper le bean entity CompteBancaire qui


est caractris par:

A inclure dans le jar de lEJB ( travers build.xml)

Un rib (cl primaire de type long qui sauto-incrmente),


Un nom_client, et
Un solde du compte (double).

Utiliser le bean GestionCompte pour accder aux


fonctionnalits de cration et de gestion des
comptes (CompteBancaire)

Build.xml
57

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Relation

58

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Relation

2 catgories principales : 1-n et n-n


1-n: [1 auteur peut avoir 1 ou plusieurs livres]
@Entity

Auteur
- id: long
- nom: String

public class Auteur {


@Id

Livre
1

1..*

2 catgories principales : 1-n et n-n


1-n:
@Entity

- id: long
- auteur: String
- titre: String

@Id

- id: long
- nom: String

private long id;

@GeneratedValue(strategy=GenerationType.AUTO)

Livre

Auteur

public class Livre {

@ManyToOne

private long id;

@JoinColumn(name="auteur_id")

private String nom;

private Auteur auteur;

@OneToMany

private String titre;

private Collection<Livre> livres;

public Livre() {}

1..*

- id: long
- auteur: String
- titre: String

public Livre(Auteur auteur, String titre) {


this.auteur = auteur;

public Auteur () { livres = new ArrayList<Livre>(); }

this.titre = titre;

public Auteur (String nom) { this.nom = nom; livres = new ArrayList<Livre>();}

auteur. getLivres().add(this);}

public Collection<Livre> getLivres() { return livres; }

public auteur getAuteur() { return auteur; }

public void setLivres( Collection<Livre> livres ) { this.livres=livres; }

public void setAuteur(auteur auteur) { this.auteur = auteur; }

...

public String getTitre() { return titre; }

59

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

60

public void setTitre(String titre) { this.titre = titre; }


Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Relation

Entity Bean:
Autres annotations

n-n:

@Entity
public class Item {
@Id
@Column(name="ITEM_ID")
protected long itemId;
@ManyToMany(mappedBy="items")
protected Set<Category> categories;
.
}

@Entity
public class Category {
@Id
@Column(name="CATEGORY_ID")
protected long categoryId;
@ManyToMany
@JoinTable(name="CATEGORIES_ITEMS",
joinColumns=
@JoinColumn( name="CI_CATEGORY_ID",
referencedColumnName="CATEGORY_ID"),
inverseJoinColumns=
@JoinColumn( name="CI_ITEM_ID",
referencedColumnName="ITEM_ID"))
protected Set<Item> items;
.
}
61

@Embeddable

public class Address implements Serializable {

private String rue; private int codePostal; }

@Entity

public class User {

private String nom;

@Embedded // @EmbeddedId sil sagit dune cl primaire (compose)

private Address adresse;

62

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Entity Bean:
Autres annotations

@Embeddable et @Embedded : embarque les donnes d'une classe dans une


table

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Travail faire

@IdClass : cl compose

public class PersonnePK implements Serializable {

private String prenom;

private String nom;

public PersonnePK() { ... }

@Entity

@IdClass(PersonnePK.class)

public class Personne {

@Id

private String prenom;

@Id

private String nom;

private int taille;

....}

63

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Le bean ClientBanque contient les informations dun


client et le bean CompteBancaire englobe les donnes
concernant un compte bancaire.
Un client (ClientBanque) peut avoir 1 ou plusieurs
comptes (CompteBancaire). Dvelopper le bean
ClientBanque, et adapter le bean CompteBancaire et
GestionCompte comme indiqu dans le slide suivant.

64

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Travail faire

Penser :

Le bean GestionCompte(session qui gre laccs aux entits dveloppes) possde les
fonctionnalits suivantes :

void creer_Client_Banque(String cin, String nom, String prenom, String adresse) : Crer un client de la
banque. Cette opration ralise dans un premier temps la vrification de l'existence de ce client
travers la mthode find() de lEntityManager, le cas chant elle affiche le message suivant : "Le client
existe dj!". Autrement, elle le cre et affiche "Cration russite!".

long ouverture_Compte_Bancaire(String cin, double montant) : Crer un compte tout en fournissant la


cin du titulaire du compte et le montant dposer pour initier le solde. Elle retourne le rib du
nouveau compte cr. Cette opration ralise dans un premier temps la vrification de l'existence
du titulaire du compte, le cas chant elle affiche "Il faut crer lentit ClientBanque avant de lui crer un
compte !" et annule lopration de cration du compte.

void cloture_Compte_Bancaire(long rib) : Clture le compte tout en spcifiant son rib.

void deposer_Argent(double montant, long rib) : Elle incrmente le solde du compte identifi par rib du
montant dpos. Elle affiche le message "Compte inexistant!" si rib ne correspond aucun compte.

boolean retrait_Argent(double montant, long rib) : Elle vrifie lexistence dun compte identifi par rib. Si
cest le cas, elle vrifie que le solde est suffisant pour assurer le retrait (dans le cas contraire, elle
retourne la valeur false), dcrmente le solde du montant et renvoie la valeur true. Elle affiche le
message "Compte inexistant!" si rib ne correspond aucun compte.

double obtention_Solde(long rib) : Elle renvoie le solde du compte sil existe.

65

Nettoyer le serveur manuellement


Arrter le serveur
Vider le contenu du rpertoire jboss\server\default\data
(base de donnes)
Supprimer les fichiers (et non les rpertoires) *.jar du
rpertoire: jboss\server\default\deploy
Nettoyer le serveur via la commande ant clean.db
Arrter le serveur
Se placer dans le rpertoire du bean (qui contient Build.xml)
Lancer la commande "ant clean.db" pour supprimer la base
en relation avec le bean en cours
66

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Message Driven Bean:


Dfinition

MDB

MDB: A message-driven bean is an enterprise bean that allows Java EE applications to


process messages asynchronously. It normally acts as a JMS message listener, which is
similar to an event listener except that it receives JMS messages instead of events. The
messages can be sent by any Java EE component (an application client, another enterprise
bean, or a web component) or by a JMS application or system that does not use Java EE
technology. [Sun]

JMS: The Java Message Service is a Java API that allows applications to create, send,
receive, and read messages. [Sun]

MDB

67

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

68

Excution suite la rception dun message


Asynchrone
Sans tat, et relativement courte dure de vie.

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Message Driven Bean


Type

Message Driven Bean:


Architecture

Client : Une application qui envoie plusieurs


messages au canal

Messagerie point--point (Queue)

MDBClass : Un message driven bean qui reoit et

traite les messages reus du canal dune faon


asynchrone.

Messagerie publier/souscrire (Topic)

Machine 1

Machine 2
Envoie

Client

Msg

Reoit
canal

Msg

MDBClass

Conteneur EJB

69

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Message Driven Bean


Type

Queue (javax.jms.Queue)

Dans une application publier/souscrire, les clients adressent des messages un


thme (topic), qui fonctionne comme un panneau d'affichage. Les expditeurs
et les receveurs sont gnralement anonymes et peuvent dynamiquement
publier ou souscrire la hirarchie des thmes. Le systme s'occupe de la
distribution des messages arrivant des expditeurs multiples d'un thme ses
abonns multiples. Les thmes retiennent les messages seulement le temps
requis pour les distribuer aux abonns (receveurs) actuels.

70

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Message Driven Bean


Type

Une application point--point est construite sur le concept de queues,


expditeurs et receveurs de messages. Chaque message est adress une
queue spcifique et les clients de rception extraient les messages des queues
tablies. Les queues retiennent tous les messages envoys eux jusqu' ce que
les messages soient consomms ou jusqu' ce que les messages expirent.

Chaque message possde un seul consommateur.


Lexpditeur et le receveur dun message nont pas une dpendance
temporelle. Le receveur peut chercher le message mme sil ntait pas
connect lors de son envoi par un client.
Le receveur acquitte la rception du message.

Topic (javax.jms.Topic)

Chaque message peut avoir plusieurs consommateurs.


Les expditeurs et les receveurs sont en dpendance temporelle (% au
moment de linscription). Un client abonn un topic ne peut
consommer que les messages publis aprs sa souscription. Le client
doit tre actif pour continuer la rception des messages.

Msg

Souscrire

Produire

Client 1

Consommer
Msg

Queue

Acquitter

Livrer

Publier

Client 2

Client 1

Msg

Msg
Topic
Souscrire
Livrer

71

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

72

Client 2

Client 3

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Message Driven Bean


Exemple (1/3)

Nom de la
ressource au
JNDI

Rception des messages

@MessageDriven(activationConfig =
{

@ActivationConfigProperty(propertyName="destination", propertyValue="queue/exemple")

})
@Depends ("jboss.mq.destination:service=Queue,name=exempleMDB")
public class MDBClass implements MessageListener
Spcifique
{
Jboss
public void onMessage(Message recvMsg)
{
String msg="";
try{ msg=((javax.jms.TextMessage)recvMsg).getText();
}catch (javax.jms.JMSException e) {System.out.println("Erreur de rception");}
System.out.println("Le message reu est : " + msg);
}
}

Message Driven Bean


Exemple (2/3)

Envoie des messages

public class Client


{
public static void main(String[] args) throws Exception
{ processMessage("queue/exemple"); }
private static void processMessage(String queueBinding) throws Exception
{
QueueConnection cnn = null;
QueueSender sender = null;
QueueSession session = null;
InitialContext ctx = new InitialContext();
Queue queue = (Queue) ctx.lookup(queueBinding);
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
cnn = factory.createQueueConnection();
session = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
TextMessage msg = session.createTextMessage("Hello World");
sender = session.createSender(queue);
sender.send(msg);
System.out.println("Message envoy avec succs " + queueBinding);
cnn.close();
}
}

Dautres attributs de lannotation ActivationConfigProperty sont spcifies dans le tutoriel J2EE,


et le tutoriel Jboss.

73

Configuration: $MDBFolder\META-INF\Config-queue-service.xml

<?xml version="1.0" encoding="UTF-8"?>


<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=exempleMDB">
<attribute name="JNDIName">queue/exemple</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
</server>

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Annotations intervenantes dans le cycle


de vie (callbacks)

Message Driven Bean


Exemple (3/3)

74

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

A inclure dans le jar de lEJB ( travers build.xml)

Bean-Orient-Message (Message-driven bean)

Annotation

Rle

@PostConstruct

est invoque aprs que l'instance soit cre et que les


dpendances soient injectes

@PreDestroy

est invoque avant que l'instance de l'EJB ne soit


supprime ou dtruite

Build.xml
75

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

76

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Travail faire
Suite linvocation de la mthode payement(rib),
le bean Shopp envoie un message contenant le
montant payer ainsi que le rib du client une
partie de confiance (TrustPayement). Ce dernier
injecte le GestionCompte et dbite le montant
du solde du client correspondant.
Implanter le MDB (TrustPayement) qui assure
cette fonctionnalit.

77

Web Service Endpoint

78

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Session EJB: Web service endpoint

Session EJB: Web service endpoint

Exposition dun EJB sous forme dun service web

WSDL/SOAP
JAX-WS API (implantation de SW avec JAXB)

Ncessits:

79

La classe doit tre annote avec @WebService (ou @WebServiceProvider)


La classe implantant le service web peut spcifier une interface daccs
au service SEI (Service Endpoint Interface) travers llment
endpointInterface de lannotation @WebService
Les mthodes mtiers de la classe implantant le service web doivent
tre dclares public (et non static ou final)
Les mthodes mtiers qui sont exposes au client du service web sont
annotes avec @WebMethod
La classe implantant le service web doit implanter le constructeur par
dfaut
La classe implantant le service web doit tre annote avec @Stateless
Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Exemple : Code Bean

@javax.ejb.Stateless
@javax.jws.WebService(endpointInterface = "org.enis.ejb3.stateless.bean.HelloWS")
public class HelloBean implements HelloRemote, HelloLocal
{
public HelloBean(){ }
public String say_hello()
{
return "\n****Hello World****";
}
}

80

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Session EJB: Web service endpoint


Exemple : Interface du endpoint

@javax.jws.WebService
@javax.jws.soap.SOAPBinding(style = javax.jws.soap.SOAPBinding.Style.RPC)
public interface HelloWS extends java.rmi.Remote
{
@javax.jws.WebMethod
public String say_hello();
}

Session EJB: Web service endpoint

Exemple : Code du Client

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
http://localhost:8080/jbossws/services
import javax.xml.rpc.ServiceFactory;
(liste des services dploys)
public class Client {
public static void main(String[] args) throws Exception {
URL url = new URL("http://localhost:8080/enis-ejb3-statelesswebservice/HelloBean?wsdl");
QName qname = new QName("http://bean.stateless.enis.gi3.org/",
"HelloBeanService");
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(url, qname);
HelloWS hello = (HelloWS) service.getPort(HelloWS.class);
System.out.println(hello.say_hello());
}}
Attention:Vider lextension du jdk (jdk/jre/lib/ext) afin dviter les conflits entre les packages!!
Utiliser jdk1.5 avec les jars daxis1 afin de lancer un client interactif.

81

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

82

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Travail faire
Prsenter les fonctionnalits de lEJB
GestionCompte en tant quun service web
Dployer le, et afficher son WSDL
Ajouter un client SOAP, et tester le.
Amliorer le client ralis afin quil reprsente
un accs distant pour le chef dagence laide
dune interface graphique Java.

83

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Intercepteurs

84

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Les intercepteurs (1/3):


Fonctionnalits offertes
Intercepter l'invocation de mthodes pour
excuter des traitements
@Interceptors et @AroundInvoke ou dans le
descripteur de dploiement.

Les intercepteurs (2/3):


Code de lintercepteur
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
public class IntercepteurTemps2Execution{
@AroundInvoke
public Object mesurer(InvocationContext ctx) throws Exception
{
System.out.println("*** Temps dexecution de la methode " +
+ ctx.getMethod().getName() +" ***");
long debut = System.currentTimeMillis();// temps de dbut dexcution
try
{
return ctx.proceed();// excution de la mthode
}
catch(Exception e)
{
throw e;
}
finally
{
long temps = System.currentTimeMillis() - debut;
String methode = ctx.getTarget().getClass().getName() + "." +
+ ctx.getMethod().getName() + "()";
System.out.println("*** L'invocation de la" + methode + " dure " + temps +
+ "ms ***");
}
}

Effectuer des traitements avant et aprs lexcution


dune mthode
Exemple

Journalisation (Log), traage (tracing)


Mesurer le temps dexcution dune mthode dun bean (voir
exemple)
}

85

Les intercepteurs (3/3):


Appliquer lintercepteur

86

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

La classe cible de lintercepteur:

Travail faire (2/2)

Utiliser un client interactif au lieu de "ant run"

import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
@Stateless
@Interceptors({IntercepteurTemps2Execution.class})//pour toutes les mthodes du bean
public class HelloBean implements HelloLocal, HelloRemote
{
//@Interceptors ({IntercepteurTemps2Execution.class})//pour cette mthode du bean
public String say_hello()
{
return "\n****Hello World****";
}
}

87

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

mettre tous les jars de "$JBOSS_HOME/client" au


classpath, et lancer le client avec laide de la commande
java

java cp "%classpath%;%JBOSS_HOME%\client\jbossall-client.jar"
org.enis.ejb3.stateless.client.Client

Mesurer le temps de rponse de la mthode


achatproduit() et total() du bean Shop (penser utiliser
un intercepteur)

88

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Composant web: Servlet

Client web

89

Servlet
index.html
web.xml

application.xml
".ear" = ".jar " + ".war" + application.xml

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Classe de la servlet

91

Appel de la servlet

web.xml

Ear

Injection de lEJB
Excution du traitement en servant des mthodes de lEJB

index.html

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Servlet:

EJB Session sans tat

Webapp

Ajout dune page de dmarrage pour lappel du


client web sous forme html ou jsp dans un nouveau
rpertoire indiquant le chemin du Web.
Ajout dun client web sous forme dune servlet.
Modification du build.xml

Servlet:
Rpertoire webapp

ejbapp

web.xml
application.xml

90

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Description de la structure

La reprsentation du composant est sous forme


dune archive .ear et non .jar
Ajout de descripteurs xml:

92

Injection de lEJB
Excution du traitement en se servant des mthodes de lEJB

Nom et action de la servelt


Nom du fichier invoquant la servlet (index.html)

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Servlet:
Rpertoire ear

Application.xml

Application de gestion bancaire

Spcifier lejb
Spcifier le war

Calculatrice

This image cannot currently be display ed.

Tester lexemple EJB3.0_Servlet


Excution : http://localhost:8080/jboss-ejb3-webapp/index.html
Ajouter une Servlet sur lexemple du Compte_Bancaire/Compte_Client qui
permet dafficher les dtails du compte bancaire pour un client accdant
distance lapplication.

93

This image cannot currently be display ed.

ClientBanque

Intranet

Entity

Acheteur

Intranet

Guichetier

GestionCompte
Stateful

Chefdagence

Internet

TrustPayement

MDB

Serveurdapplication

94

Client

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Les Serveurs J2EE

Java EE Tutorial

http://java.sun.com/javaee/5/docs/tutorial/
doc/JavaEETutorial.pdf

Entity

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

Bibliographie

CompteBancaire n 1

Shop

Stateful

Stateless

Stateless

Travail faire:

CompteClient

JBoss EJB3 Tutorial

Jboss de Red Hat


GlassFish de Sun (Oracle)
Websphere dIBM
Netweaver de SAP

http://www.jboss.org/file-access/default/members/
jbossejb3/freezone/docs/tutorial/1.0.7/html/index.html

Enterprise JavaBeans 3.0

95

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]

96

Dr. Ing. Riadh BEN HALIMA [Architecture J2EE: EJB3 & JBoss]