chapitre 3 couche métier : le nouveau standard ejb 3.0

34
Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Upload: lixue

Post on 04-Feb-2016

58 views

Category:

Documents


3 download

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 Presentation

TRANSCRIPT

Page 1: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Chapitre 3

Couche Métier :

Le nouveau standard EJB 3.0

Page 2: 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

Page 3: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 4: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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 …"

Page 5: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 6: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 7: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 8: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 9: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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é

Page 10: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 11: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 12: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

12M.Romdhani, INSAT, Octobre 2009

Mise en Cascade: exemple:

Meta Data :

Les Relations entre Entités

Page 13: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 14: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 15: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 16: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

16M.Romdhani, INSAT, Octobre 2009

SINGLE_TABLE

JOINED

TABLE_PER_CLASS

Héritage

Page 17: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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 !

Page 18: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 19: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 20: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 21: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 22: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

22M.Romdhani, INSAT, Octobre 2009

Principe du service de messagerie JMS

Les Beans Message (MDB)/JMS

Page 23: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

23M.Romdhani, INSAT, Octobre 2009

2 modèles :

Point-to-point /Queue

Publisher–Subscriber /Topic

Le service JMS

Page 24: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

24M.Romdhani, INSAT, Octobre 2009

Comment utiliser le service?

Le service JMS

Page 25: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 26: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

26M.Romdhani, INSAT, Octobre 2009

C’est Bean stateless qui écoute une destination JMS.

Bean MDB

Page 27: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 28: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 29: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 30: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 31: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 32: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

32M.Romdhani, INSAT, Octobre 2009

DTO

Les EJB Design patterns

Page 33: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

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

Page 34: Chapitre 3 Couche Métier : Le nouveau standard EJB 3.0

Nouveautés EJB 3.0

34M.Romdhani, INSAT, Octobre 2009

Session façade

Les EJB Design patterns