Title: Le Standard EJB3 par la pratique
1Le Standard EJB3 par la pratique
-
- Réalisé par MEDINI Soumaya
- MEJRI Nassiha
- 2005-2006
2 Plan général
- Introduction
- Historique
- Complexités de EJB2
- Les apports de EJB3
- Demo
- Conclusion
3 INTRODUCTION (1)
- Evolution importante concernant le modèle de
composant JEE les EJB2 deviennent les EJB3. - Nouveau JEE
- - Thèmes Simplification de
développement - - Intégration JSF 1.2 (JSR 252) Java
Specification Request - - EJB 3.0 (JSR 220 )
- JSR220-ORM apporte l'ensemble des outils
nécessaires à la persistance Java - EJB3 nécessite un JDK 1.5.0
-
4INTRODUCTION (2)
- Critique des Enterprise JavaBeans (EJB) par
plusieurs developpeurs à cause de ses
complexités. - Gavin King, leader du Framework Hibernate et
membre du groupe d'experts EJB 3 a dévoilé le
premier brouillon de cette spécification EJB3 - Cette nouvelle version des EJB apporte des
modifications notables dans le domaine du modèle
de développement et intègre de nombreuses
nouveautés notamment en ce qui concerne les EJBs
entity tellement décrites dans les versions 2.X.
5Historique
- Mars 1998 EJB 1.0
- Novembre 1999 EJB 1.1
- - sécurité, entity beans,
- Août 2001 EJB 2.0
- - Local interfaces, relationships,
EJB-QL, MDBs - Novembre 2003 EJB 2.1
- - EJB-QL (order by, avg, max, min, sum,
count, EJB Timer service) - Février 2005 EJB 3.0
6- Quelles sont les complexités des EJB2.X?
7Les complexités de EJB 2.x (1)
- EJBs sont contre-productifs
- - 1 bean a des dépendences avec
EJBLocalObject, EJBLocalHome, EJBHome, EJBObject,
ejb-jar.xml - - Les outils pour masquer la complexité
ne sont pas forcément à la hauteur - -Difficile à tester !
-
- Necessité davoir une connaissance détaillée à
propos du JNDI pour réussir une application EJB.
8Les complexités de EJB 2.x (2)
- Les EJB components ne sont pas totalement
orientés objet (pb pour lheritage et le
polymorphisme) - ? les classes persistantes doivent hériter de
certaines classes fournies par le framework - Entity Beans
- - EJB-QL est à la rescousse en
pratique, trop limité et statique - -JDO, iBatis, Hibernate sont plus
simples et plus appropriés
9Les complexités de EJB 2.x (3)
- verbose beaucoup de fichiers à écrire
- Compléxité des descripteurs de déploiement (EJB).
- Difficulté dutiliser les classes persistantes en
dehors du container en particulier pour les tests - Le framework ne peut pas prendre en charge la
persistance dobjets des classes Java ordinaire
(POJO)
10Les complexités de EJB 2.x (4)
- Certains containers nécessitent une génération de
stubs (JOnAS,..) - D'autres génèrent les proxys automatiquement
(JBoss, Geronimo) - Des containers génèrent des finders
automatiquement (JBoss) - Le développement multi-container est complexe
- Mais ne pas en tenir compte est aussi un risque
11Les complexités de EJB 2.x (5)
- Donc
- EJB 2.1 aujourd 'hui puissant, mais complexe à
utiliser!
12- Quels sont les apports de EJB3?
13 Apports dEJB3 (1)
- Simplifier le développement pour palier à un
modèle de programmation complexe menant à un
certain nombre d'anti-patterns (utilisation de
DTO, Entity Beans, ...). - Simplifier larchitecture des EJBs en réduisant
sa complexité de point de vue développeur - Génération automatique d'interface possible
- Pas de JNDI pour le développeur ou le client
14Apports de EJB3 (2)
- Simplification des composants par l'utilisation
des POJOs / JavaBeans - Elimination des interfaces EJBObject,
EJBLocalObject, Remote, Home, - Simplification des CMPs
- Extension de EJBQL jointures, subqueries,
dynamic queries, native SQLqueries,
15Apports de EJB3 (3)
- Améliorer la testabilité hors du container
- Utilisation des metadata pour simplifier la
maintenance des composants - Simple annotations
- Utilisation systématique des annotations pour
simplifier la programmation. - Elimination de descripteur de deploiement
- Génération des interfaces dont on a besoin
16Apports de EJB3 (4)
- Descripteur Déploiement EJB 2.1
- ltsessiongt
- ltejb-namegtShopCartBeanlt/ejb-namegt
- ltlocal-homegtShopCartHomelt/local-homegt
- ltlocalgtShopCartlt/localgt
- ltejb-classgtcom.example.ShopCartBeanlt/ejb-cla
ssgt - ltsession-typegtStatefullt/session-typegt
- lttransaction-typegtContainerlt/transaction-typ
egt - ltresource-refgt
- ltres-ref-namegtjdbc/myDBlt/res-ref-namegt
- ltres-ref-typegtjavax.sql.DataSourcelt/res-ref-
typegt - ltres-authgtContainerlt/res-authgt
- lt/resource-refgt
- lt/sessiongt
- ...
- ltassembly-descriptorgt
- ...
- lt/assembly-descriptorgt
17Apports de EJB3 (5)
18Compatibilité et migration
- Une application EJB 2.1 doit fonctionner
inchangée dans un conteneur EJB 3.0 - Migration vers EJB 3.0
- - Client EJB 3.0 Composant EJB 2.1
- - Client EJB 2.1 Composant EJB 3.0
19Apports de EJB3 (6)
- EJB 3 définit un standard de persistance
qui ne cible que le relationnel à lexclusion des
autres formes de données (XML, mainframe) et qui
ne peut sexécuter que dans le contexte dun
container (à lexclusion des applications Swing,
JSP ou batch par exemple).
20 Apports dEJB3 (7)
- Conclusion
- EJB3.0 Simplification des Développements
avec Compatibilité et Migration - EJB3.0 EJB2.X XDoclet
21EJB3 POJO (1)
- POJOPlain Old Java Objects (bons vieux objets
Java tous simples) - Utiliser un modèle objet simple (facile à
développer, centré sur l'applicatif plus que sur
le technique) et sans dépendances avec telle API
ou tel framework. - Dans le monde Java, le modèle EJB3 ou les deux
frameworks de persistance Hibernate et TOPlink
sont les trois solutions les plus utilisées pour
assurer la persistance des concepts métier
implémentés sous forme de POJO -
22EJB3 POJO (2)
- EntityManager
- EntityManager est un point de contrôle (home)
pour les opérations sur les EJB entité - 1- Méthodes de cycle de vie
- - Persist, remove, merge, flush,
refresh, etc - 2- Méthodes de requêtage pré-définies
(find) -
-
23EJB3 POJO(4)
- 3- Factory pour des objets Query
- - Requêtes (nommées) statiques et
dynamiques - - Requêtes EJB-QL et SQL
- 4- Gestion du contexte de persistance
- - Réunion des identités persistantes
- - Contexte étendu de persistance
(transactions multiples) - 5- Concept similaire à celui de Hibernate
Session, JDO PersistenceManager,..
24EJB3 POJO (3)
25POJO cycle de vie
- New
- - Pas d 'identité de persistance
- - Pas associé au conteneur
- Managed
- - Identité de persistance
- - Géré par le conteneur
- - Synchronisation SGBDR
- - Gestion des relations
26POJO cycle de vie
- Detached
- - Identité de persistance
- - Non géré par le conteneur
- - Necessité de la synchronisation
- Removed
- Identity de persistance
- Suppression du bean
27Annotations (1)
- Introduites dans JDK1.5 (JSR 175), alternatives à
XDoclet - Rendent les descripteurs de déploiement
facultatifs - Moins de verbosité pour les cas simples
- Meta-données proche du code
- gestion de source simplifiée
- Alléger le code
28Annotations(2)
- Annotations EJB 3.0
- 1- Nature de l'EJB
- - _at_Stateless, _at_Stateful,
_at_MessageDriven ou _at_Entity - 2- Accès distant ou local
- - _at_Remote, _at_Local
- - Plus de RemoteException
- 3- Cycle de vie
- - _at_PostConstruct, _at_PostActivate,
_at_Remove, _at_PreDestroy, _at_PrePassivate
29Annotations(3)
- _at_Entity indique que le User class est un bean
entité. - _at_EJB configure la valeur EJB pour chaque méthode
- _at_Id annotation indique lattribut de la clé
primaire du bean entité - _at_Table spécifie la table de base de données pour
les bean entité
30Annotations (4)
- _at_SecondaryTable spécifie la table secondaire
- _at_Serialized specifie que la propriété persistante
doit être serializable - _at_JoinColumn spécifie la colonne de jointure avec
la colonne secondaire -
- _at_OneToMany Specifie le champ comme une
relation1-n
31INJECTION
- Le composant déclare ce dont il a besoin au
travers de meta-données - Le conteneur fournit au composant ce qu'il
réclame - - Les ressources et services nécessaires à
un composant sont injectées à la création de
chaque instance de composant - Transactions
- Notifications de cycle de vie
- Mécanisme de persistance
-
32Les annotations dinjection
- _at_EJB
- - Annote les interfaces métier des EJB
- - Annote les interfaces Home
- _at_Inject ou _at_PersistenceContext
- - Permet l 'injection de tout ce qui se
trouve dans JNDI - - Permet d 'injecter SessionContext,
UserTransaction, EntityManager, ... - _at_Resource
- - Annote toute le reste (ou presque)
- - Injection de variable d 'instance ou de
setter
33Annotations vs. Descripteur Déploiement
- Le descripteur de déploiement reste pertinent
- - Pour un développeur ou l 'entreprise qui
a ses habitudes - - Pour externaliser des meta-informations
- - Pour redéfinir des annotations
34EJB3 Bean Session(1)
- Spécification par _at_Stateful ou _at_Stateless
- stateful session beans sont transitoires
- _at_Remove spécifier au conteneur que le stateful
session bean instance peut être supprimé
35EJB3 Bean Session(2)
36EJB3 Bean Session(2)
Pour indiquer que cette classe est un stateless
session bean
37EJB3 Bean Session(2)
injection de tout ce qui se trouve dans JNDI
38EJB3 Entity Bean(1)
- Un EJB entité devient une simple classe Java
- 1- Classe concrète
- 2- Héritage et polymorphisme
- 3- Méthodes getXX/setXX pour les propriétés
persistantes - 4- Pas d 'interface à implémenter
- 5- Pas de méthode de callback requise
- Specifié par lannotation _at_Entity
39EJB3 Entity Bean(2)
- Entity bean représente les données persistantes
de la base de données - Entity beans sont aussi partagés par plusieurs
clients - Utilisable comme objet détaché dans d'autres
parties de l'application - 1- Plus besoin de Data Transfer Object
(DTO) - 2- Doit implémenter Serializable
40EJB3 Entity Bean(3)
41EJB3 Entity Bean(3)
Spécifie la table de la base pour lentité bean
Spécifie le champ comme une relation n-1
Définit la clé étrangère
42EJB3 Bean Message
- Message-Driven Beans
- Les beans messages (MDB) offrent une méthode
simple pour implémenter une communication
asynchrone. - MDBs sont crées pour recevoir des messages JMS
asynchrones. - javax.jms.MessageListener interface
- Annotation _at_MessageDriven.
43EJB3 persistance (1)
- La persistance ce terme est utilisé pour
indiquer le fait qu'un objet peut être sauvegardé
de façon plus ou moins automatisée - Le groupe EJB 3 a décidé de proposer une nouvelle
technologie de persistance, totalement en
opposition avec les choix précédents et en partie
basée sur les concepts de JDO
44EJB3 persistance (2)
- La notion de persistance
- Simple et incomplète avant EJB 3.0
- Nécessite de trouver le lien entre approche
object et relationnel - EJB 3.0 propose au développeur d'établir
simplement un mapping entre domaine métier
(objet) et base de données relationnelle
45EJB3 persistance (3)
- 4. Le développeur a conscience de l'existence de
ce mapping entre schéma SGBDR et modèle objet - - Dans la manipulation des requêtes
- - Dans l 'utilisation des annotations
dédiées au mapping O/R - - Dans les règles de configuration par
défaut
46EJB3 persistance (4)
- Objets persistants
- Objets à vie courte contenant l'état de
persistance et la fonction métier. - Ils sont en général les objets de type JavaBean
(ou POJOs) - La seule particularité est qu'ils sont associés
avec une (et une seule) Session.
47 48Conclusion
- EJB 3.0 Simplification drastique pour le
développeur - 1- Suppression de classes et d 'interfaces
- 2- Modèle d 'injection de services et de
ressources - 3- Descripteurs de déploiement rendus
facultatifs - 4- EJB entité POJO
- 5- Capacités de requêtage améliorées
- 6- Spécification du mapping O/R
- EJB 3.0 constitue les fondations de JavaEE 5.0
pour le développeur -
49- Merci pour votre attention. . .