Vous êtes sur la page 1sur 17

Introduction aux Session Beans

Michel Buffa (buffa@unice.fr), UNSA 2002


modifi par Richard Grin (version 1.1, 21/11/11)
Plan du cours
Introduction gnrale
EJB : Les fondamentaux
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
2
Session Bean : rappel
Un Session Bean reprsente
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
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
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
Exemple de bean sans tat
package fr.unice.ejb.conversion;
import java.math.BigDecimal;
import javax.ejb.*;
@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
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
Interface locale et implmentation
@Local
public interface Convertisseur {
public BigDecimal yenVersEuro(BigDecimal yen);
}
@Stateless
public class ConvertisseurBean
implements Convertisseur {
...
}
Donner une interface locale explicite permet de
ne pas exposer aux clients toutes les
mthodes publiques du bean


Interface distante et implmentation
Pour que le bean session soit utilisable par un
composant situ sur un serveur dapplication, il
faut lui ajouter une interface distante :
@Remote
public interface ConvertisseurDistant {
public BigDecimal yenVersEuro(BigDecimal yen);
}
@Stateless
public class ConvertisseurBean
implements Convertisseur {
...
}


Stateful Session Beans
Certaines conversations se droulent sous
forment de requtes successives.
Exemple : un client surfe sur un site de e-
commerce, slectionne des produits, remplit son
caddy
D'une requte HTTP l'autre, il faut un moyen
de conserver un tat (le caddy par ex.)
Stateful Session Beans
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.
Consquence : une instance de Stateful
Session Bean par client.
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) {
...
}
@Remove
public void checkout() {
caddy.clear();
}
...
}
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
Passivation / Activation
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
Activation/Passivation callbacks
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)

Vous aimerez peut-être aussi