Vous êtes sur la page 1sur 29

Java EE avancée

Filière Informatique et Ingénierie des Données


Semestre 3

Prof. Bouchra KAROUM

Ecole Nationale des sciences Appliquées - Khouribga


Université Sultan Moulay Slimane Béni-Mellal

2023-2024
Chapitre 1 : Les composants
métiers EJB
2
Introduction aux EJB

▷ EJB acronyme d'Enterprise JavaBeans


▷ Composants logiciels côté serveur basés sur la technologie Java EE qui
encapsulent la logique métier d'une application d'entreprise.
▷ EJB fournit une abstraction pour le développement de composants
réutilisables qui gèrent des aspects tels que
○ la persistance des données,
○ la gestion des transactions,
○ la sécurité,
○ et la communication entre les différents composants d'une
application distribuée.

3
Le conteneur d’EJB
▷ les serveurs d'application Java EE fournissent des conteneurs;
▷ Le conteneur EJB offre un environnement d'exécution géré qui
simplifie le développement des EJB.
▷ Le conteneur EJB est responsable de :
○ la gestion du cycle de vie des EJB,
○ la gestion des transactions,
○ la sécurité,
○ l'accès aux bases de données,
○ et d'autres aspects liés à l'exécution des composants EJB.
▷ Il s'assure qu'un même bean ne recevra pas d'appel de méthode
de la part de deux clients différents en même temps.

4
Architecture des EJB

5
Accès aux composants EJB
Chaque EJB fournit :
▷ Une interface d'accès distant:
○ les services (méthodes) offerts à ses clients
○ Le client d'un EJB peut être : servlet, applet, application
classique, autre EJB
○ Les clients distants sont situés dans un conteneur EJB
différent ou même sur une machine différente.

▷ Une interface d'accès local


○ les services offerts par le bean à ses clients locaux
○ les mêmes (ou d'autres) que ceux offerts à distance
○ Les clients locaux sont des composants qui
accèdent aux EJB dans le même conteneur EJB

6
Les types d’EJB
▷ EJBs session : proposer des services avec ou sans conservation d’état
entre les appels

▷ EJBs Entity (@Entity) : représenter des objets persistants dans une base
de données.

▷ EJB Message-Driven (@MessageDriven) : Accomplir des tâches de


manière asynchrone, permettre la communication asynchrone basée sur
le modèle "JMS" (Java Message Service).

7
EJB session
▷ Les Session Beans fournissent un service aux clients.
▷ Ils sont accessibles via le réseau (en passant par le protocole Remote
Method Invocation - RMI ) ou localement dans la JVM du client.Les E]B
sessions sont les points d'entrée de la couche métier.
▷ Les Session Beans sont utilisés pour gérer les opérations spécifiques à une
session pour les clients dans un environnement d'entreprise.
▷ Exemple: gestion de compte bancaire, affichage de catalogue de produit,
vérifieur de données bancaires..
▷ RMI (Remote Method Invocation) est une API Java qui permet l'invoquation de
méthodes sur des objets distants, c'est-à-dire des objets qui existent sur une
machine virtuelle différente.

8
EJB session
▷ Durée de vie = la session = Le temps qu'un client reste connecté sur le
bean.
▷ Les Session Beans ne résistent pas aux pannes du serveur
▷ Des objets stockés en mémoire, non persistants; Contrairement aux Entity
Beans
▷ Types de Session bean :
○ Sans état (@Stateless)
○ Avec état (@Stateful)
○ Singleton (@Singleton)

9
EJB session
Bean sans état : Stateless
▷ Les Stateless Session Beans sont conçus pour traiter des opérations métier sans
maintenir d'état entre les appels.
▷ Ils sont généralement créés et détruits à chaque appel de client.
▷ Déclarés sur la classe EJB par l'annotation @Stateless
▷ Une instance est créée par le serveur pour plusieurs connexions clientes.
▷ Les Stateless Session Beans sont adaptés pour gérer des opérations indépendantes,
comme la recherche, le calcul, ou l'accès aux bases de données.
▷ Ils sont efficaces en termes de performances, car ils peuvent être mis en cache et
réutilisés pour plusieurs clients.
▷ Ils ne stockent pas d'informations d'état spécifiques au client, ce qui les rend adaptés
à la conception d'applications hautement évolutives.

10
EJB session
Bean sans état : Stateless

▷ Le conteneur conserve en mémoire un certain


nombre d’instances (un pool) de chaque EJB
sans état et les partage entre les clients.
▷ Lorsqu’un client appelle une méthode d’un
bean sans état, le conteneur choisit une
instance du pool et l’affecte au client; lorsque
ce dernier en a fini, l’instance est retournée
dans le pool pour y être réutilisée.
▷ Il suffit donc d’un petit nombre de beans pour
gérer plusieurs clients (le conteneur ne garantit
pas qu’il fournira toujours la même instance du
bean pour un client donné).

11
EJB session
Bean sans état : Stateless
Cycle de vie
1. L'EJB n'existe pas
2. Un client appelle une référence sur l’EJB
3. Le conteneur crée l'instance et réalise les injections de
dépendance de cet EJB
4. Le conteneur appelle les méthodes annotées @PostConstruct
5. L'instance traite l'appel et reste en attente d'autres requêtes dans
le pool
6. Lorsque le conteneur s'éteint, il appelle les méthodes annotées
@PreDestroy

12
EJB session
Bean avec état : Stateful
▷ Un EJB est dit « Stateful » lorsqu'il conserve un état
associé à un client spécifique entre les appels de
méthode
▷ Un Stateful Session Bean introduit le concept de
session entre le client et le serveur.
▷ Cet EJB est partagé par toutes les méthodes pour un
unique client. Chaque client est lié à une instance de
l’EJB.
▷ Exemple : remplir le panier d'achat pour une application
de commerce électronique
▷ L’annotation @Stateful indique au conteneur EJB que la
classe doit être gérée en tant que bean avec état

13
EJB session
Bean avec état : Stateful
▷ La passivation et l'activation sont des mécanismes spécifiques aux Stateful Session
Beans; utilisés pour gérer l'état de session associé à un client particulier entre les appels
de méthode.
▷ Passivation :
▪ La passivation est le processus par lequel l'état d'un Stateful Session Bean est
temporairement sauvegardé dans un stockage persistant, généralement sur le
disque, afin de libérer des ressources en mémoire lorsque le bean n'est pas
activement utilisé.
▪ Lorsqu'un bean est passivé, son état est sérialisé et stocké de manière à pouvoir
être restauré ultérieurement.
▷ Activation :
▪ L'activation est le processus par lequel un Stateful Session Bean est réactivé à partir
d'une passivation précédente. Lorsqu'un client souhaite réutiliser un bean qui a été
passivé, le bean est activé en restaurant son état précédemment sauvegardé.
▪ L'état est désérialisé et rétabli en mémoire pour permettre au bean de reprendre
son exécution à partir du point où il a été passivé.

14
EJB session
Bean avec état : Stateful
▷ Le cycle de vie d'un Stateful Session Bean peut inclure plusieurs phases
d'activation et de passivation en fonction de l'utilisation par les clients.
▷ Le conteneur EJB gère automatiquement ces transitions d'état pour garantir
que le Stateful Session Bean est disponible pour le client avec son état
approprié.
▷ L’annotation @PrePassivate indique au serveur d’application qu’une méthode
doit être exécutée avant la passivation,
▷ L’annotation @PostActivate indique au serveur d’application qu’une méthode
doit être exécutée après l'activation.
▷ La fin de l’utilisation de l’instance d’un Stateful bean est donné par un appel à
une méthode annotée @Remove

15
EJB session
Bean avec état : Stateful
Cycle de vie
1. L'EJB n'existe pas
2. Un client appelle une référence sur l’EJB
3. Le conteneur crée l'instance et réalise les injections de dépendance de cet EJB
4. Le conteneur appelle les méthodes annotées @PostConstruct
5. L'instance traite l'appel et reste en attente d'autres requêtes dans le pool
6. Si le client attend un certain temps avant de refaire une requête alors le
conteneur appelle la méthode annotée @PrePassivate puis l'EJB est sérialisé
sur un stockage permanent
7. Lorsque le client refait une requête alors le conteneur recharge en mémoire
l'EJB et appelle la méthode annotée @PostActivate
8. Si le client invoque une méthode annotée @Remove alors le conteneur appelle
également la méthode @PreDestroy puis supprimer l'EJB
16
EJB session
Bean avec état : Stateful

17
EJB session
Bean avec état : Stateful
import javax.ejb.Stateful;
import javax.ejb.PrePassivate;
import javax.ejb.PostActivate;

@Stateful
public class MyStatefulBean {
private int counter = 0;

public int incrementCounter() {


return ++counter;
}

@PrePassivate
private void update() {// Code exécuté avant la passivation }

@PostActivate
private void find() { // Code exécuté après l'activation }
}
18
EJB session
Singleton
▷ Un EJB est dit « Singleton » lorsqu'il conserve
un état de la conversation partagé entre tous
les clients de l'application
▷ Déclaré par l'annotation @Singleton
▷ Une seule instance est créée dans le conteneur
EJB et cette instance est fonctionnelle durant
tout le cycle de vie de l'application au sein de
laquelle il est développé.
▷ La concurrence d'accès est gérée via le
contexte JTA (Java Transaction API) qui est
initié dans le conteneur et paramétré par
l'application

19
EJB session
Singleton
▷ Un bean singleton est un composant qui a une seule instance
dans le conteneur EJB et est partagé par toutes les sessions
clientes.
▷ Les Singletons EJB sont utiles pour gérer des ressources
partagées, des caches, des configurations globales, ou d'autres
données nécessitant une conservation entre les sessions clientes
▷ Contrairement aux Stateless Session Beans, les Singletons
conservent leur état entre les invocations de méthode. Cela
permet de stocker des données partagées entre les clients.

20
EJB session
▷ Un EJB Session possède :
o Une interface Remote : qui permet de déclarer les méthodes qui
sont accessibles à distance. C’est-à-dire accessible aux composants
qui sont déployés dans d’autres machines.
o Une interface Locale : qui permet de déclarer les méthodes qui sont
accessible en local. C’est-à-dire les méthodes accessibles par les
composants déployés dans le même serveur d’application.
o La classe du bean : qui implémente les deux interfaces remote et
local. l’implémentation des méthodes de cette classe représentent
les traitements métier de l’application

▷ Les annotations @Remote ou @Local définissent respectivement si le


Session Bean fournit les méthodes à des clients distants ou locaux.

21
Exemple

22
EJB Entity
▷ EJB Entity sont des composants EJB conçus pour représenter et
manipuler des données persistantes dans une base de données
relationnelle.
▷ Avec l'évolution de la plate-forme Java EE, les Entity Beans ont subi
des changements significatifs, et de nouvelles approches, comme les
JPA (Java Persistence API) et les EJB 3.x, ont été introduites pour
améliorer la gestion de la persistance des données.
▷ Les Entity Beans ont été remplacés par des technologies plus légères
et plus flexibles telles que JPA, qui offre un modèle de
programmation plus simple et plus intuitif pour la persistance des
données (voir chapitre 4)

23
EJB Entity
@PersistenceContext
▷ Simplifie la gestion de la persistance dans les applications Java EE
▷ avec @PersistenceContext, le conteneur se charge d'injecter automatiquement une
instance d'EntityManager dans le champ ou la méthode annotée
▷ @PersistenceContext admet plusieurs attributs :
○ unitName: définit le nom de l’unité de persistance à laquelle l'EntityManager est associé.
○ name: déclare un nom local référencé sur une unité de persistance déployée
○ type: spécifie le type d'objet qui sera injecté:
■ PersistenceContextType.TRANSACTION signifie qu'un nouvel EntityManager est
créé pour chaque transaction.
■ PersistenceContextType.EXTENDED pour avoir un EntityManager étendu qui
traverse plusieurs transactions

24
Injection de Dépendances

▷ C'est un concept où les dépendances requises par un


composant sont fournies par une entité externe (souvent un
conteneur ou un framework) plutôt que d'être créées à
l'intérieur du composant lui-même.

▷ Objectif : Réduire le couplage entre les composants, facilitant


ainsi la maintenance, la modification et le test du code.

▷ Le développeur spécifie ces dépendances grâce à des


annotations telles que @EJB , @Resource, …

25
Processus de développement
1. Développement d'un bean
○ Ecrire l’interface locale
○ Ecrire l’interface distante
○ Ecrire l'implémentation (classe) du bean
○ Compiler ces classes et interfaces
2. Déploiement du Bean
○ Construire le descripteur de déploiement
○ Construire le fichier d'archive jar ou .ear
3. Utilisation du Bean
○ Ecrire, compiler et exécuter le client = qui peut être une
servlet ou une application Java ou une applet, etc.

26
Déploiement des EJB
▷ Un EJB doit être déployé sous forme d'une archive jar contenant un fichier qui
est le descripteur de déploiement et toutes les classes qui composent chaque EJB
(interfaces home et remote, les classes qui implémentent ces interfaces et toutes
les autres classes nécessaires aux EJB).
▷ Une archive ne doit contenir qu'un seul descripteur de déploiement pour tous les
EJB de l'archive.
▷ Le descripteur de déploiement est un fichier au format XML qui permet de
fournir au conteneur des informations sur les beans à déployer. Le contenu de ce
fichier dépend du type de beans à déployer.
▷ Le reste de l'archive doit contenir les fichiers .class avec toute l'arborescence des
répertoires des packages.
▷ Le jar des EJB peut être inclus dans un fichier de type EAR.
▷ Le processus de déploiement peut varier en fonction du serveur d'application
utilisé (ex : WildFly, Apache TomEE, GlassFish).

27
JNDI

▷ JNDI, acronyme de Java Naming and Directory Interface,

▷ Une API Java qui permet aux applications Java de localiser et d'accéder
dynamiquement à des objets tels que des bases de données, des files d'attente de
messages, et d'autres ressources distribuées.

▷ JNDI est utilisé dans le contexte des EJBs pour localiser et accéder aux composants
EJB déployés dans un environnement d'entreprise.

▷ L'utilisation de JNDI permet de rendre les clients indépendants de la localisation des


composants dans l'environnement

28
JNDI
▷ Après instanciation d'un EJB Session, ses références Remote (IP, Port, Adresse Mémoire)
et Locale (Adresse Mémoire) seront publiée dans l'annuaire JNDI

▷ Le nom complet JNDI d'un EJB Session est de la forme suivante :


○ Pour EJB stateless et singleton
Le nom : Nom_ Projet_EAR/Nom_Projet_EJB/Name!Package NomInterface
○ Pour EJB stateful
Le nom : Nom Projet_EAR/Nom_Projet_EJB/Name!Package.NomInterface?stateful

▷ L'attribut Name de ces trois annotations, permet de spécifier le nom JNDI qui sera
associé aux références de l'EJB dans l'annuaire JNDI

▷ Par défaut, c’est le nom de la classe qui sera utilisé

29

Vous aimerez peut-être aussi