Vous êtes sur la page 1sur 40

1

JEE

EJB :
Enterprise Java Beans
Zaki BRAHMI
Equipe Ecri, Laboratoire RIADI (Universit de la Manouba, Tunisie) zakibrahmi@{yahoo.fr, gmail.com}

Plan

Rappel et motivation Prsentation des EJB Les diffrents types dEJB


EJB session EJB Entity EJB Message

Cycle de vie des EJB


La vie dun EJB session stateless La vie dun EJB session stateful

Rappel et Motivations

Les applications logicielles deviennent de plus en plus complexes :

Lapplication distribue : fonctionne sur plusieurs machines.

programmation rseau, efficacit, performances, scurit, tolrance aux pannes,. . .

Interoprabilit : Htrognit des langages et plates-formes. Lapplication utilise/ou rutilise des applications existantes.

applications patrimoines, bases de donne

Solutions

La bonne architecture logicielle :

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 :

tout est la charge du programmeur


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

structure de lapplication peu visible

volution / modification difficile


dveloppement, gnration des excutables, dploiement

volution logicielle

Programmation constructive (ou par composition) : programming in the large

Motivation : rutilisation de logiciel


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 :

VisualBasic, JBuilder, Delphi, Eclipse, Netbeans, etc.

description des interactions entre composants (connecteurs) description de variables d'environnement (placement, regroupement, scurit, etc.)

Lobjet comme composant


Les objets permettent :

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

Connections directes entre objets :


Modle de connexion fig :

Granularit encore trop fine pour un module logiciel complet


Un package comprend plusieurs classes avec une structuration floue

Lindustrie du logiciel, aujourdhui


Des produits chers !

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 !

Logiciel non adapt aux besoins :


Lindustrie du logiciel de demain


Des logiciels adapts aux besoins :

Ne se trouve que les fonctionnalits requises On dispose toujours de la dernire version

La dernire version est moins budgt que la prcdente. . .

On peut faire voluer (reconfigurer) son logiciel

On ne paye que :

Les fonctionnalits requises La dure effective dutilisation

10

Lindustrie du logiciel de demain

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 :

Constriction de nouvelle application par linterconnexion de plusieurs composants

Quelques composants clbres :

CORBA, JAVA Beans, EJB

12

Enterprise Java eans


Architecture permettant la cration dapplications rparties Composant :

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

Enterprise Java eans

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.

Utilisation de meta meta-donnes sous forme d'annotations Java :

Dcoration d'lments du code source pour exprimer le comportement d'une application


@Remote @Stateful

14

Enterprise Java eans

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.

JTM (Java Transaction Manager)

15

Fournisseur de serveur/conteneur d'EJB

16

Le client

Localiser le Bean par JNDI (Java Naming and Directory Interface) Utiliser le Bean via :

Home Interface : mthodes pour la gestion du cycle de vie du bean

create(), remove(),

Remote Interface : services mtiers par le bean

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

Un client d'un Bean :

communique avec un Bean au travers d'interfaces :


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

!"veloppement dun ean


1.

Dveloppement dun bean

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

EJB Session EJB Entity EJB Message Driven

20

EJ Session

Non persistant (short-lived) Associ seul client Un flot dexcution est cre pour :

chaque appel de mthode : stateless sessions bean (sans tat) :


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

Sont persistant (long-lived) :

la gestion de la persistance peut tre faite par le bean ( bean managed persistence) ou dlgue son conteneur ()

Reprsentent les donnes dune base de donnes :

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.

Dfinition de l'interface du composant


Package contacte: import javax.ejb.Remote; @Remote public interface ContactRemote { public String Contact(String nomContact); }

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$

Dans la norme EJB 3, les entits sont des POJO

Plain Old Java Objects


classiques Srialiss Annots
EJB-QL

Des objets :

Classe Mtier

Container

Des reprsentations JAVA dune ou plusieurs table(s) Nouveaut des EJB 3 :

Gestion de la persistance externe par : Entity Manager

28

Le gestionnaire de persistance

Pas daccs direct aux entits JPA (Java Persistence API) :

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

Par dfaut la table lie porte le nom de la classe

Constructeur par dfaut obligatoire

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

Quelques annotations importantes


Annotation @Entity @Id Description La classe est un bean entit Lobjet ou la fonction qui suit est la cl primaire de lentit

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

!"claration de lentit" dans le gestionnaire de persistance


< !"l #ersion$%&'(% encodin)$%*+,-.% / <persistence #ersion$%&'(% !"lns$%0ttp1223a#a'sun'co"2!"l2ns2persistence% !"lns1!si$%0ttp122444'45'or)26((&27M8Sc0e"a-instance% !si1sc0e"a8ocation$%0ttp1223a#a'sun'co"2!"l2ns2persistence

34

0ttp1223a#a'sun'co"2!"l2ns2persistence2persistence9&9('!sd%/ <persistence-unit na"e$%+P9E:;%/ <3ta-data-source/3a#a13ndi2+P9E:;<23ta-data-source/ <class/<;'personnes'Personne<2class/ <2persistence-unit/ <2persistence/


persistence.xml

35

Manipulation les beans entit"s

La manipulation des beans entits sa fait travers Manipulation du gestionnaire de persistance :

Accs direct lEM (entityManager) par injection : @PersistenceContext(unitname= ) private EntityManager em;

36

Manipulation les beans entit"s


Les fonction de lEM : Persister un objet (crer une nouvelle entre dans la base) :

Em.persist(objEntity) Em.remove(objEntity) Em.find(objEntity.class, cle) //retourne null si non trouv Em.flush()

Supprimer un objet

Rechercher un objet

Forcer la mise jour de la base de donnes

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

Fonction recherche et suppression


public class PersonnesManager implements PersonnesManagerRemote { @PersistenceContext private EntityManager em; () public Personne rechercherPersonne(int clef) { Personne p= em.find(Personne.class, clef); return p; } Public void SupprimerPersonne(int clef) { Personne p= em.find(Personne.class, clef); em.remove(p); } }

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