Académique Documents
Professionnel Documents
Culture Documents
Généralités
Interfaces des EJB
1
Avantages des EJB Intégration des EJB
dans une application Web JSF
Le développeur peut se concentrer sur les
traitements « métier » Les pages JSF (Java Server Faces) se chargent
de l’interface avec l’utilisateur
Il n’a (presque) plus à s’occuper des problèmes
non fonctionnels liés aux transactions, à la Elles sont épaulées par des classes Java, les
sécurité, à la concurrence,… backing beans
Les EJB sont portables ; ils peuvent être utilisés Les backing bean font appel à des EJB pour les
avec tous les serveurs d’application Java EE traitements « métier » et pour l’interface avec les
bases de données (entités persistantes si JPA)
2
Interface « Remote » Interface locale
L’interface doit être annotée avec @Remote pour
que ses méthodes soient utilisables à distance Si l’interface n’est pas annotée par @Remote, elle
Le passage des paramètres de type non primitif se est locale
fera en copiant les valeurs des objets L’EJB n’est alors accessible que depuis la JVM
(sérialisation) où il s’exécute
Meilleures performances car
ne passe pas par le réseau
No-interface view
Un EJB session peut ne pas implémenter
d’interface
En ce cas, c’est comme si toutes les méthodes
public de l’EJB était exposées dans une Types d’EJB
interface locale
@Stateless
public class HelloBean {
public String ditHello(String nom){
return "Hello, " + nom;
}
} La méthode ditHello peut être appelée par les clients de l’EJB
Richard Grin EJB page 15 Richard Grin EJB page 16
3
Création d’un EJB session Exemple
Créé par le container avec le constructeur sans @Stateless
public class EJB1 {
paramètre
@EJB
Le constructeur n’est pas assuré que les
private EJB2 autreEJB;
injections de dépendances ont été faites
Une méthode de l’EJB annotée par @PostConstruct
@PostConstruct permet d’initialiser le bean ; public void init(){
elle est appelée par le container juste après la // Initialisation qui utilise autreEJB
création du bean, quand toutes les injections ont ...
été faites }
}
EJB session sans état (2) EJB session avec état (1)
Fait partie d’un pool dont les instances sont Pour exécuter une tâche qui nécessite plusieurs
affectées aux clients au fur et à mesure des appels de méthode à des moments différents
besoins Peut conserver des informations entre 2 appels
Annoté avec @Stateless : de méthode
@Stateless Correspond à une conversation entre un client et
public class HelloBean implements Hello { le serveur
public String ditHello(String nom){
La conversation commence au moment où le
return "Hello, " + nom;
} client obtient une référence à l’EJB et se termine
} lorsque le client abandonne cette référence
Ne peut être partagé entre 2 clients
Richard Grin EJB page 23 Richard Grin EJB page 24
4
EJB session avec état (2) Supprimer un EJB avec état
Exemple : gestion d’un caddy qui contient les Il est bon de supprimer un EJB avec état
produits achetés par un client pendant la session lorsqu’on n’en a plus besoin (sinon, il est
Annoté avec @Stateful supprimé au bout d’un certain temps)
Pour cela il faut invoquer une méthode annotée
par @Remove
5
Définition
Au lieu de créer un objet, on peut demander à
l’environnement d’exécution (container) de le
fournir (de l’« injecter »)
Injection Injection par annotation ou par une déclaration
dans un fichier XML
6
Portée CDI Portées CDI
Requête HTTP : @RequestScoped
Un objet injecté a une portée (requête, session,…)
Vue : @ViewScoped
qui définit la durée de vie de l’objet
Session : @SessionScoped
Par exemple, un objet injecté de portée requête
Application : @ApplicationScoped
est créé pendant le traitement d’une requête
HTTP d’un client, la 1ère fois qu’il y a injection Conversation : @ConversationScoped ; la
Interface javax.ejb.EJBContext
Interface d’un EJB avec le contexte extérieur
Interface fille SessionContext pour les EJB
session
Contexte des EJB
7
Exemple d’utilisation
Nom de l’utilisateur qui est actuellement connecté :
@Resource
private SessionContext context;
2 types CMT
Les transactions peuvent être gérées Le développeur indique ce que doit faire le
par le container (CMT : Container Managed container avec les transactions au moment de
Transaction) l’appel d’une méthode
par le bean (BMT) Indiqué par une annotation ou dans un fichier XML
8
NEVER NOT_SUPPORTED
Si le client appelle la méthode avec une
Toute transaction en cours est suspendue
transaction en cours, une exception est levée
pendant l’exécution de la méthode
Pour une méthode qui ne comporte que des
Cas 1 : « select » pour des entités qui ne sont pas
modifiées (meilleures performances)
Cas 2 :
SUPPORTS REQUIRED
Le bean peut supporter une transaction s’il y en a Une nouvelle transaction est créée par le container
une mais peut fonctionner sans si aucune n’est en cours ; si une transaction est
Pour une méthode qui ne comporte que des
en cours, elle est utilisée par la méthode
« select », pour des entités éventuellement Valeur par défaut
modifiées dans une des méthodes appelantes
REQUIRES_NEW MANDATORY
Une nouvelle transaction est toujours créée par le Une exception est levée si aucune transaction
container pour cette méthode n’est en cours au moment de l’appel de la
Pour une méthode qui veut être sure que ses méthode
modifications sont validées ou non à la fin de son
exécution
9
Nouvelle transaction en CMT Appel d’une autre méthode de l’EJB
C’est la méthode qui a démarré une transaction qui
Attention, ce qu’on vient de voir nécessite
la termine
l’interception du container, par exemple pour
Au retour de la méthode le container la termine démarrer une nouvelle transaction
par un rollback Si une méthode d’un EJB appelle une autre
— si une exception « système » ou une exception méthode du même EJB par « this », le container
« application, avec rollback » a été levée n’intervient pas !
— si la transaction a été marquée comme
annulée (setRollbackOnly)
par un commit sinon
RemoteException
Exception contrôlée par le compilateur (classe
fille de IOException) liée aux erreurs réseau
Exceptions dans les EJB
10
EJBException 2 types d’exception
Exception « runtime » (pas contrôlée par le Exception liée au fonctionnement de l’application ;
compilateur) dédiée aux problèmes sur les EJB un compte bancaire qui n’est pas suffisamment
approvisionné pendant un retrait d’argent
Prévient qu’un problème inattendu n’a pas permis
Exception système ;
l’exécution normale de la méthode
problème dans le fonctionnement du SGBD ou du
réseau ; absence d’une ressource indispensable
au traitement ;
EJBException en est une
Traitées différemment par le container d’EJB
Il ne lance pas un rollback, sauf si l’exception est met l’exception dans les log du serveur
11
L’utilisation de java.io est interdite dans un EJB ;
cette restriction est levée dans EJB 3.2 (mais il
faut l’utiliser « avec précaution »)
La sécurité est traitée dans un support à part
12