chapitre 3 couche métier : le nouveau standard ejb 3.0
DESCRIPTION
Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0. Sommaire. Introduction à la spécification EJB 3.0 Les Session Beans Entity Beans/JPA RelationShips Héritage EntityManager Message Driven Beans/JMS EJB Design Patterns. Objectifs des EJB. Un standard pour - PowerPoint PPT PresentationTRANSCRIPT
Chapitre 3
Couche Métier :
Le nouveau standard EJB 3.0
Nouveautés EJB 3.0
2M.Romdhani, INSAT, Octobre 2009
Sommaire
Introduction à la spécification EJB 3.0
Les Session Beans
Entity Beans/JPA RelationShips Héritage EntityManager
Message Driven Beans/JMS
EJB Design Patterns
Nouveautés EJB 3.0
3M.Romdhani, INSAT, Octobre 2009
Objectifs des EJB Un standard pour
un modèle de composant logiciel distribué, implémenter des "objets métier" d'une manière propre et réutilisable, faciliter le développement RAD d'applications côté serveur
Objectifs de l'architecture EJB Au niveau développement :
Simplifier la tâche des développeurs de composants métier en leur déchargent de la gestion du système (transactions, persistence, erreurs, networking, …)
Au niveau déploiement Permettre de déployer les composants sur des environnements conteneurs
différents sans aucune recompilation de code Au niveau exploitation
Cette organisation modulaire simplifie la maintenance et l'évolutivité d'une application.
Les EJBs sont en général recommandés lorsque: Gestion des montées en charge La gestion des transactions Accessibilité par divers clients Co-développement
Nouveautés EJB 3.0
4M.Romdhani, INSAT, Octobre 2009
Historique
Un peu d'histoire … 1998 : EJB 1.0 Session Bean 1999: EJB 1.1 : Entity Bean, Descripteurs de déploiement 2001 : EJB 2.0 : Local Interfaces, Relationships, EJB-QL, MDBs 2003 : EJB 2.1 : Webb Services, EJB-QL amélioré, Timer Service
EJB 2.1 : Beaucoup d'interfaces, complexité des descripteurs XML, problèmes des entités, test outside container
EJB 3.0 vs Spring +Hibernate !!! Sur les forums de développement
"Pourquoi appeler cela EJB 3.0 alors que ca ressemble juste à un conteneur léger + framework de persistence ?"
"Intéressant, j'étais sur le point de melancer dans Spring + Hibernate, ça fait réfléchir …"
Nouveautés EJB 3.0
5M.Romdhani, INSAT, Octobre 2009
Annotation des métadonnées
Prise en charge des valeurs par default
Injection des dépendances
Simplification des Beans (proche des POJO) EJBObject, EJBLocalObject, or java.rmi.Remote Home
Simplification des CMP Héritage & polymorphisme Annotation du mappage O/R
…
EJB 3.0 : Nouveautés
Nouveautés EJB 3.0
6M.Romdhani, INSAT, Octobre 2009
Concurrence
Transaction (atomicité)
Persistance(JPA)
Object Distribués (RMI-IIOP/SOAP1.2 [JAX-RPC])
Messagerie asynchrone (JMS)
EJB Time Service
Nommage (JNDI)
Sécurité(Authentification/Autorisation/Sécurité des communications)
Interopérabilité
Spécification EJB 3, Services de support
Nouveautés EJB 3.0
7M.Romdhani, INSAT, Octobre 2009
POJO + POJI
L’interface home est optionnelle
Les méthodes de Callback sont optionnelles
Les annotations: Type du Bean, @Stateless, @Stateful, @Remote, @Local,
@WebService Attribut de la transaction @Transaction Injection de dependence @Inject, @EJB, @Resource
Les Beans de Session
Nouveautés EJB 3.0
8M.Romdhani, INSAT, Octobre 2009
@WebService : exposer un Session Bean comme étant un service Web Bénéficier des avantages des EJB Session:
Persistence, Transaction, Sécurité…
@WebMethod : expose une méthode dans le web service.
@WebResult,@WebParam : paramètres et retour
Simplicité d’implémentation: @WebResult, @WebParam, @WebMethod sont facultatives
Les beans de Session et Web Services
Nouveautés EJB 3.0
9M.Romdhani, INSAT, Octobre 2009
Spécification supplémentaire: JPA 1.0
POJO + Persistence.
Interface Home non requis.
Supporte l’héritage et le polymorphisme.
Peut être utilisé en dehors du Container.
Les Annotations des Metedata du mappage O/R.
Les Beans Entité
Nouveautés EJB 3.0
10M.Romdhani, INSAT, Octobre 2009
@Entity : Déclarer un Entity
Mappage des Tables: @Table, @SecondaryTable.
Mappage des colonnes: @Column, @JoinColumn
Clé Primaire @Id.
Les objets @Embedded
Les Beans Entité : Les annotations
Nouveautés EJB 3.0
11M.Romdhani, INSAT, Octobre 2009
7 types de Relations:@OneToOne, @OneToMany, @ManyToOne, @ManyToMany.
(Unidirectional ou bien bidirectional)
MétaData:
Les Relations entre Entités
Nouveautés EJB 3.0
12M.Romdhani, INSAT, Octobre 2009
Mise en Cascade: exemple:
Meta Data :
Les Relations entre Entités
Nouveautés EJB 3.0
13M.Romdhani, INSAT, Octobre 2009
Exemple
Produit.java
@Entitypublic class Produit implements Serializable { @Id private int id; private String libelle; private int quantiteEnStock; @ManyToOne (cascade={CascadeType.MERGE,CascadeType.REFRESH}) @JoinColumn (name="categID",referencedColumnName="id“, updatable=true ) private CategorieProd categID; //setters and Getters…
Les Relations entre Entités
Nouveautés EJB 3.0
14M.Romdhani, INSAT, Octobre 2009
Suite Exemple…
CategorieProd.java
@Entitypublic class CategorieProd implements Serializable{ @Id private int id; private String libelle; @OneToMany(mappedBy="categID", cascade={CascadeType.ALL}) private Collection<Produit> produits = new ArrayList<Produit>( );
//setters and Getters…
Les Relations entre Entités
Nouveautés EJB 3.0
15M.Romdhani, INSAT, Octobre 2009
3 types d’héritage(persistant) :Table UniqueJointure des Tables Table par classe
Super classe (abstraite ou non): @Inheritance(strategy=InheritanceType.(SINGLE_TABLE | JOINED | TABLE_PER_CLASS) ) @DiscriminatorColumn(name="USER_TYPE“,discriminatorType=STRING, length=1) @DiscriminatorValue(value="S“)
Fils (extends SuperClassName) @DiscriminatorValue(value="S") @PrimaryKeyJoinColumn(name="USER_ID")
Héritage
Nouveautés EJB 3.0
16M.Romdhani, INSAT, Octobre 2009
SINGLE_TABLE
JOINED
TABLE_PER_CLASS
Héritage
Nouveautés EJB 3.0
17M.Romdhani, INSAT, Octobre 2009
Maintenant que les entités sont devenues des POJOs
Qui va s’occuper de la persistance ? Solution : Injection d'un Manager (Pattern IoC !)
Injection d'un manager !
Nouveautés EJB 3.0
18M.Romdhani, INSAT, Octobre 2009
C’est notre point d’entrée dans le monde de la persistance avec ces méthodes de CRUD.
Il gère le cycle de vie des entités
Le Entity Manager
Nouveautés EJB 3.0
19M.Romdhani, INSAT, Octobre 2009
L’EntityManager fait appel au contexte de persistance qui gère les entité dans un contexte transactionnel
C’est à l’ intérieur du contexte que les entités managées résident. Dès qu’elles en sortent elle deviennent détachées. Or le contexte est transactionnel, donc dès qu’une transaction se
termine le contexte est détruit et les entités sont détachées
Entity Manager : Contexte de persistance
Nouveautés EJB 3.0
20M.Romdhani, INSAT, Octobre 2009
2 types de contexte de persistance(scope)Transaction-scoped
Pris par default si la persistance est gérée par le conteneur.Extended-scoped
A utiliser avec les beans statefull. Le contexte de persistance existera tant que le contexte de session existe.
Entity Manager : Contexte de persistance
Nouveautés EJB 3.0
21M.Romdhani, INSAT, Octobre 2009
Comment obtenir l’ EntityManager Injection de l’EM : le cycle de vie de l’EM ainsi que son contexte
sera géré par le conteneur JEE A travers l’ EntityManagerFactory : on sera responsable du cycle
de vie de l’EM
Pour l’EMF on peut faire une injection (in container) ou par look up (JSE).
Entity Manager : Contexte de persistance
Nouveautés EJB 3.0
22M.Romdhani, INSAT, Octobre 2009
Principe du service de messagerie JMS
Les Beans Message (MDB)/JMS
Nouveautés EJB 3.0
23M.Romdhani, INSAT, Octobre 2009
2 modèles :
Point-to-point /Queue
Publisher–Subscriber /Topic
Le service JMS
Nouveautés EJB 3.0
24M.Romdhani, INSAT, Octobre 2009
Comment utiliser le service?
Le service JMS
Nouveautés EJB 3.0
25M.Romdhani, INSAT, Octobre 2009
Créer une destination
Descripteur de déploiement JBoss:«deploy/jms/jbossmq-destinations-service.xml»
A partir de la console du Serveur
Le service JMS
Nouveautés EJB 3.0
26M.Romdhani, INSAT, Octobre 2009
C’est Bean stateless qui écoute une destination JMS.
Bean MDB
Nouveautés EJB 3.0
27M.Romdhani, INSAT, Octobre 2009
Création: @MessageDriven
Il a besoin d’un certain nombre de paramètres pour configurer sa connexion Destination (nom JNDI) Type de la destination (queue ou topic)
– Mode d’acquittement
– Filtre de message (messageSelector)
Bean MDB
Nouveautés EJB 3.0
28M.Romdhani, INSAT, Octobre 2009
Envoyer des messages a partir d’un MDB ou d’un Bean de session: Faire comme si on envoyer a partir d’un client JMS
Pour les ressources on peut les injectés
@Resource(mappedName="QueueConnectionFactory")ConnectionFactory connectionFactory; @Resource(mappedName="queue/examples/OurSampleQueue")Queue queue;
Bean MDB
Nouveautés EJB 3.0
29M.Romdhani, INSAT, Octobre 2009
JTA Spécification JEE API offrant un support des transactions distribuées Garantie la atomicité
UserTransaction : begin, commit, rollback, …
Les EJB supportent la JTA et l’utilisent par défault CMT (par défault) BMT :l’utilisateur définit ces transactions JTA
@TransactionManagement(TransactionManagementType.BEAN)
Transactions/JTA
Nouveautés EJB 3.0
30M.Romdhani, INSAT, Octobre 2009
Les beans de session supportent 6 types de démarcation CMT:1. MANDATORY2. REQUIRED (par default)3. REQUIRES_NEW 4. SUPPORTS5. NOT_ SUPPORTED6. NEVER
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
CMT
Nouveautés EJB 3.0
31M.Romdhani, INSAT, Octobre 2009
Les entités ne supportent pas les transactions mais, comme on l’a déjà dit, le contexte de persistance lui supporte et gère les transaction JTA et non JTA Tant qu’on est dans le conteneur c’est le mode JTA qui primeLe mode non JTA (resource-Local transaction) fonctionne en
dehors du conteneurs , il a l’avantage d’etre plus rapide.
CMT
Nouveautés EJB 3.0
32M.Romdhani, INSAT, Octobre 2009
DTO
Les EJB Design patterns
Nouveautés EJB 3.0
33M.Romdhani, INSAT, Octobre 2009
EAO: Entity Access Object (EAO) consiste à séparer la logique
d’accès au données de l’entity et la logique métier. Il permet de modifier facilement le code de l’entité sans affecter
la logique métier.
DAO et EAO sont des variations du même pattern.
Les EJB Design patterns
Nouveautés EJB 3.0
34M.Romdhani, INSAT, Octobre 2009
Session façade
Les EJB Design patterns