Enterprise Java Beans (EJB)

Programming, Java, Software Architecture · lab

Voir tous les documents en programmation

EJB

ENTERPRISE

JAVA BEANS

D FINITION

EJB : Enterprise Java Beans

Les EJB sont des extensions des Java

Beans : une technologie utilis e pour

d velopper des composants Java

r utilisables.

Un composant crit en Java

Une brique applicative sex cutant c t

serveur,

Objectif : construire des applications

distribu es

EJB est une architecture de composants

logiciels c t serveur pour la plateforme de

d veloppement J2EE.

D FINITION (SUITE)

JavaBean = Java (un caf )+Bean (un grain de

caf )

Un ensemble de grains de caf permet la

fabrication de caf . Chaque grain apporte sa

contribution lar me et la saveur du caf

JavaBean = Une classe Java ind pendante qui

d finit des propri t s (donn es) et des

m thodes d crivant ses diff rents services.

Un logiciel est con u par assemblage des

services offerts par les JavaBeans.

Chaque JavaBean apporte sa contribution aux

traitements du logiciel.

PR SENTATION

Le but des EJB est de faciliter la cr ation

dapplications distribu es pour les entreprises.

4

PR SENTATION

Les EJB sont parfaitement adapt s pour

tre int gr s dans une architecture trois

tiers ou plus.

Dans une telle architecture, chaque tier

assure une fonction particuli re :

Le client l ger assure la saisie et

l'affichage des donn es sur le serveur,

les objets m tiers contiennent les

traitements. Les EJB sont sp cialement

con us pour constituer de telles entit s.

Une base de donn es assure la

persistance des informations

SERVEUR DAPPLICATION

/ CONTENEUR DEJB

  • Un container EJB est un environnement

dex cution pour un composant EJB.

  • Un EJB sex cute sur un container EJB.

-Un container EJB sex cute sur un

serveur dapplication

  • R le:

o Encapsule un composant

o Fournit des services de nommage, de

gestion du cycle de vie, persistance,

s curit , transaction

PR SENTATION

Les EJB permettent de :

Repr senter des donn es manipul es par

lapplication (EJB dit Entity),

Proposer des services avec ou sans

conservation d tat entre les appels (EJB dit

Session),

Accomplir des t ches de mani re asynchrone

(EJB dit Message Driven Bean).

7

DIFF RENTS TYPES

DEJB

Il existe trois types dEJB :

EJB Session: r alisation dune t che

pour un client

EJB Entity: mod lisation dune donn e

persistance (Ex: lignes dans une table de

BD)

EJB Message Driven : r ception de

messages suite un v nement

Publicité

SESSION BEANS

Il existe diff rents types:

  • Stateless : sans tat
  • Statefull : avec tat
  • Singleton: Instance Unique

SESSION BEANS

  • Stateless : sans tat

" Une instance est cr e par le serveur pour

plusieurs connexions clientes.

" En cas de demandes simultan es, d'autres

instances sont cr es.

" Ce type de bean ne conserve aucune donn e

dans son tat.

SESSION BEANS

  • Statefull : avec tat

" Cr ation dune instance pour chaque connexion

cliente.

" Ce type de bean peut conserver des donn es

entre les changes avec le client.

SESSION BEANS

  • Singleton: Instance Unique

" Cr ation dune instance unique quelque soit le

nombre de connexions.

" Autorise les acc s concurrents

CYCLE DE VIE DUN

EJB SESSION

Stateful

create et remove invoqu es par le client

Le conteneur peut d cider de "passiver" le

bean(sauvegarde temporaire du beanen cas

de besoin de m moire)

Stateless

m me diagramme d' tats sauf pas de

passivation

Inexistant

create

remove

Pr t

passivate

activate

Passif

UTILISATION DUN EJB

(1/2)

Chaque EJB fournit 2 interfaces d'acc s

distant:

Remote : les services "m tiers" (m thodes)

fournis par le bean

RemoteHome : interface de gestion du

composant (cr ation, recherche, destruction

d'instances de bean)

Le client doit :

Localiser le Bean par JNDI

Utiliser le Bean via RemoteHome et Remote

UTILISATION DUN EJB

(2/2)

+ ventuellement 2 interfaces d'acc s local (

partir EJB 2.0)

(i.e. pour clients h berg s dans le m me

conteneur meilleure performance)

Local: Services "m tiers" (m thodes)

fournis par le Bean

LocalHome: Gestion du composant

PROCESSUS DE

D VELOPPEMENT

1. D veloppement dun Bean

Ecrire la RemoteHome interface

Ecrire la Remote interface

Ecrire limpl mentation (classe) du

bean

Compiler ces classes et interfaces

2. D ploiement du Bean

Construire le descripteur de

d ploiement

Construire larchive .jar

3. Utilisation du Bean

Ecrire, compiler et ex cuter le client

(Servlet ou application Java ou

Applet)

16

D VELOPPEMENT

DUN EJB SESSION

Publicité

D veloppement

2 interfaces + 1 classe

Interface Remote

services "m tiers" fournis par le bean

extends javax.ejb.EJBObject

Interface RemoteHome

gestion du bean

extends javax.ejb.EJBHome

Classe Java

code des interfaces Remote et RemoteHome

implements javax.ejb.SessionBean

EXEMPLE: EJB

CALCULATRICE

INTERFACE DUTILISATION

(REMOTE)

32

package p;

import javax.ejb.*;

import java.rmi.*;

public interface CalculatriceRemote extends

EJBObject {

public double add(double v1,double v2) throws

RemoteException;

public double sub(double v1,double v2) throws

RemoteException;

public double mul(double v1,double v2) throws

RemoteException;

public double div(double v1,double v2) throws

RemoteException;

}

}

L'INTERFACE

REMOTE

L'interface remote permet de d finir les

m thodes qui contiendront les traitements

propos s par le bean. Cette interface doit

tendre l'interface javax.ejb.EJBObject.

Toutes les m thodes d finies dans cette

interface doivent obligatoirement respecter les

sp cifications de RMI et d clarer qu'elles

peuvent lever une exception de type

RemoteException.

EXEMPLE: EJB

CALCULATRICE

INTERFACE DE

CR ATION (HOME)

package p;

import javax.ejb.*;

import java.rmi.*;

public interface CalculatriceRemoteHome

extends EJBHome {

public CalculatriceRemote create()

throws RemoteException,

CreateException;

}

L'INTERFACE HOME

L'interface home permet de d finir des

m thodes qui vont g rer le cycle de vie du

bean. Cette interface doit tendre l'interface

EJBHome.

La cr ation d'une instance d'un bean se fait

gr ce une ou plusieurs surcharges de la

m thode create(). Chacune de ces m thodes

renvoie une instance d'un objet du type de

l'interface remote.

La ou les m thodes d finir dans l'interface

home d pendent du type d'EJB :

EXEMPLE: EJB

CALCULATRICE

CLASSE DIMPL MENTATION

package p;

import javax.ejb.*;

public class CalculatriceBean implements

SessionBean {

/ M thodes de l'interface Remote /

public double add(double v1,double v2) {return

v1+v2;}

public double sub(double v1,double v2) {return v1-

v2;}

Publicité

public double mul(double v1,double v2) {return

v1*v2;}

public double div(double v1,double v2) {return

v1/v2;}

/ M thodes de l'interface RemoteHome /

public void ejbCreate() throws CreateException {}

/ M thodes de l'interface SessionBean /

public void ejbActivate() { }

public void ejbPassivate() { }

public void ejbRemove() { }

public void setSessionContext(SessionContext sc){ }

}

D PLOIEMENT DUN EJB

EXEMPLE

<enterprise-beans>

<session>

<ejb-name>MaCalculatrice</ejb-name>

<home>p.CalculatriceHome</home>

<remote>p.CalculatriceRemote </remote>

<ejb-class>p.CalculatriceBean </ejb-class>

<type>Stateless</session-type>

<transaction-type>Container</transaction-type>

</session>

</enterprise-beans>

EXEMPLE: EJB

CALCULATRICE

UTILISATION (CLIENT)

import javax.naming.; import javax.ejb.;

public class Client {

public static void main(String args [ ]) throws Exception {

JNDI: R cup ration dune r f rence

sur le serveur de noms

Context ic = new InitialContext();

Recherche lobjet bean dont le nom a

t attribu par JNDI

Object obj =

ic.lookup("java:global/ProjetEjb/MaCalculatrice");

CalculatriceRemoteHome home =

(CalculatriceRemoteHome)

Construction souche

cliente pour l'acc s

(distant) la Home

PortableRemoteObject.narrow(obj,CalculatriceRemoteHom

e.class);

CalculatriceRemote b = home.create();

double res = b.add(3,6); } }

Interface

Home

Home

Client

Interface M tier:

Composant

EJB 2

Impl mentation du

composant

Descripteur de

d ploiement

<resource-ref>

<..name>jdbc/MyDS

&

<trans-attribute>Required

Logique m tier & +

Callbacks & +

ic=new InitialContext();

o = ic.lookup(

&);

Conteneur

EJB

25

EJB 3

Impl mentation du

composant

Client

Business

Interface

Logique m tier

+ Annotations d ploiement EJB3

+ Callbacks conteneur

Interface M tier:

Publicité

Conteneur EJB

Simplification : 1 classe, 1 ou 2 interfaces

  • Linterface Home (cycle de vie)

dispara t

  • Le descripteur de d ploiement devient

facultatif (remplac par des annotations

java dans le bean)

-

26

EXEMPLE: EJB

CALCULATRICE

INTERFACE DUTILISATION

(REMOTE) SIMPLIFI E

32

package monpaquet.EJB;

import javax.ejb.Remote;

@Remote

public interface CalculatriceRemote

{

public double add(double v1,double v2);

public double sub(double v1,double v2) ;

public double mul(double v1,double v2) ;

public double div(double v1,double v2) ;

}

CLASSE EJB SIMPLIFI E

package monpaquet.EJB;

import javax.ejb.*;

@Stateless

public class CalculatriceBean implements

CalculatriceRemote {

/ M thodes de l'interface Remote /

public double add(double v1,double v2) {

return v1+v2;}

public double sub(double v1,double v2) {

return v1-v2;}

public double mul(double v1,double v2) {

return v1*v2;}

public double div(double v1,double v2) {

return v1/v2;}

}

EXEMPLE 1 (UTILISATION)

import javax.naming.; import javax.ejb.;

import monpaquet.EJB.*;

public class Client {

public static void main(String args [ ]) throws Exception {

// Cr ation du contexte

Context ic = new InitialContext();

// Recherche du bean enregistr avec JNDI

Object obj = ic.lookup("

java:global/ProjetEjb/MaCalculatrice ");

// R cup ration du bean r el

CalculatriceRemote b = (CalculatriceRemote) obj;

// Appel m thode du Bean

double res = b.add(3,6);

&

}

}

29

EXEMPLE 2 (AVEC

ANNOTATION)

import monpaquet.EJB.*;

import javax.ejb.*;

public class Client {

public static void main(String args [ ]) throws Exception {

// Injection dun EJB

// Remplace lutilisation implicite de JNDI

@ EJB

CalculatriceRemote b ;

// Appel m thode du Bean

double res = b.add(3,6);

&

}

}

30