Você está na página 1de 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

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 ecommerce, 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)

Você também pode gostar