Vous êtes sur la page 1sur 3

Cours EJB/J2EE

Copyright Michel Buffa

24/11/2011

Plan du cours
Introduction gnrale
EJB : Les fondamentaux

Introduction aux Session Beans


Michel Buffa (buffa@unice.fr), UNSA 2002
modifi par Richard Grin (version 1.1, 21/11/11)

Introduction aux Session Beans


Introduction aux Entity Beans
Introduction aux Message-Driven Beans
Concepts avancs sur la persistance
Relations avec les Entity Beans
Gestion des transactions

Session Bean : rappel

Un Session Bean reprsente

3 types de beans sessions

Sans tat : traite les tches qui peuvent tre


accomplies en un seul appel de mthode ; pas dtat
maintenu entre 2 appels de mthode

Exemple : afficher la liste des comptes bancaires dun


client

Avec tat : est associ un seul client ; maintient un


tat entre plusieurs appels de mthodes ; pour les
tches accomplies en plusieurs tapes

Exemple : remplir son caddy avec des articles dont les


caractristiques sont affiches sur des pages
diffrentes

une action, un verbe,


une logique mtier, un algorithme,
Un enchanement de tches

Exemples

Saisie d'une commande,


Compression vido,
Gestion d'un caddy, d'un catalogue de produits,
Transactions bancaires

3 types de beans sessions

Singleton : quand on veut tre assur quil ny a


quune seule instance du bean pour tous les
utilisateurs de lapplication

Exemple : cache dune liste de pays (pour amliorer


les performances)

Stateless Session Beans

Le client passe toutes les donnes ncessaires au


traitement lors de l'appel de mthode

Le container est responsable de la cration et de la


destruction du Bean

Il peut le dtruire juste aprs un appel de mthode, ou le


garder en mmoire pendant un certain temps pour
rutilisation.

Une instance de Stateless Session Bean n'est pas


propre un client donn, elle peut tre partage entre
chaque appel de mthode

Le serveur maintient un pool de beans sans tat

Cours EJB/J2EE
Copyright Michel Buffa

Exemple de bean sans tat

24/11/2011

Interface locale

package fr.unice.ejb.conversion;
import java.math.BigDecimal;
import javax.ejb.*;

Si on ne fournit pas dinterface spar


ConverterBean, il aura automatiquement
linterface compose de sa mthode publique
et il ne pourra tre utilis que par les
composants qui sont dans le mme serveur
dapplication

Ce qui correspondra au code du transparent


suivant

@Stateless
public class ConvertisseurBean {
private BigDecimal tauxEuro =
new BigDecimal("0.0093016");
public BigDecimal yenVersEuro(BigDecimal yen) {
BigDecimal val = yen.multiply(tauxEuro);
return val.setScale(2, BigDecimal.ROUND_UP);
}
}

Interface locale et implmentation

Interface distante et implmentation

@Local
public interface Convertisseur {
public BigDecimal yenVersEuro(BigDecimal yen);
}

Pour que le bean session soit utilisable par un


composant situ sur un serveur dapplication, il
faut lui ajouter une interface distante :

@Stateless
public class ConvertisseurBean
implements Convertisseur {
...
}

@Remote
public interface ConvertisseurDistant {
public BigDecimal yenVersEuro(BigDecimal yen);
}

Donner une interface locale explicite permet de


ne pas exposer aux clients toutes les
mthodes publiques du bean

@Stateless
public class ConvertisseurBean
implements Convertisseur {
...
}

Stateful Session Beans

Certaines conversations se droulent sous


forment de requtes successives.

Stateful Session Beans

Exemple : un client surfe sur un site de ecommerce, slectionne des produits, remplit son
caddy

En rsum, un Stateful Session Bean est utile


pour maintenir un tat pendant la dure de vie
du client

au cours d'appels de mthodes successifs.


Au cours de transactions successives.
Si un appel de mthode change l'tat du Bean, lors
d'un autre appel de mthode l'tat sera disponible.

D'une requte HTTP l'autre, il faut un moyen


de conserver un tat (le caddy par ex.)

Consquence : une instance de Stateful


Session Bean par client.

Cours EJB/J2EE
Copyright Michel Buffa

Exemple de bean avec tat


@Stateful
@StatefulTimeout(300000) // 5 minutes
public class CaddyEJB {
private List<Item> caddy =
new ArrayList<Item>();
public void addItem(Item item) {
...
}

24/11/2011

Problme de ressource

Le client entretient une conversation avec le


bean, dont l'tat doit tre disponible lorsque ce
mme client appelle une autre mthode.

Problme si trop de clients utilisent ce type de


Bean en mme temps.

Ressources limites (connexions, mmoire,


sockets)
Mauvaise scalabilit du systme,
L'tat peut occuper pas mal de mmoire

@Remove
public void checkout() {
caddy.clear();
}
...
}

Passivation / Activation

Activation/Passivation callbacks

Passivation : pour conomiser la mmoire, le serveur


dapplication peut retirer temporairement de la
mmoire centrale les beans sessions avec tat pour
les placer sur le disque

Activation : le bean sera remis en mmoire ds que


possible quand les clients en auront besoin

Pendant la passivation il est bon de librer les


ressources utilises par le bean (connexions avec la
BD par exemple)

Au moment de lactivation, il faut alors rcuprer ces


ressources

Lorsqu'un bean va tre mis en passivation, le


container peut lavertir (@PrePassivate)

Il peut librer des ressources (connexions)

Idem lorsque le bean vient d'tre activ


(@PostActivate)

Accs concurrents

Le code des beans session na pas besoin


dtre thread-safe puisque le container ne
permettra jamais laccs par plusieurs requtes

Ca nest pas ncessairement le cas pour les


EJB singletons (configurable) ; on peut laisser
le container grer la concurrence en donnant
des annotations (@Lock ou
@ConcurrencyManagement)