490 likes | 955 Views
Le Standard EJB3 par la pratique. Réalisé par : MEDINI Soumaya MEJRI Nassiha 2005-2006. Plan général. Introduction Historique Complexités de EJB2 Les apports de EJB3 Demo Conclusion. INTRODUCTION (1).
E N D
Le Standard EJB3 par la pratique Réalisé par: MEDINI Soumaya MEJRI Nassiha 2005-2006
Plan général • Introduction • Historique • Complexités de EJB2 • Les apports de EJB3 • Demo • Conclusion Réalisé par: MEDINI Soumaya et MEJRI Nassiha
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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
INTRODUCTION (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. Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Historique • 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Quelles sont les complexités des EJB2.X? Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Les 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é d’avoir une connaissance détaillée à propos du JNDI pour réussir une application EJB. Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Les complexités de EJB 2.x (2) • Les EJB components ne sont pas totalement orientés objet (pb pour l’heritage 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Les complexités de EJB 2.x (3) • verbose : beaucoup de fichiers à écrire • Compléxité des descripteurs de déploiement (EJB). • Difficulté d’utiliser les classes persistantes en dehors du container en particulier pour les tests • Le framework ne peut pas prendre en charge la persistance d’objets des classes Java ordinaire (POJO) Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Les 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Les complexités de EJB 2.x (5) Donc: EJB 2.1 aujourd 'hui puissant, mais complexe à utiliser! Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Quels sont les apports de EJB3? Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports d’EJB3 (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 l’architecture 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports 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, … Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports de EJB3 (4) Descripteur Déploiement EJB 2.1 <session> <ejb-name>ShopCartBean</ejb-name> <local-home>ShopCartHome</local-home> <local>ShopCart</local> <ejb-class>com.example.ShopCartBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> <resource-ref> <res-ref-name>jdbc/myDB</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref> </session> ... <assembly-descriptor> ... </assembly-descriptor> Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports de EJB3 (5) • Pour EJB3 : Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Compatibilité 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports de EJB3 (6) EJB 3 définit un standard de persistance qui ne cible que le relationnel à l’exclusion des autres formes de données (XML, mainframe) et qui ne peut s’exécuter que dans le contexte d’un container (à l’exclusion des applications Swing, JSP ou batch par exemple). Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Apports d’EJB3 (7) •Conclusion: EJB3.0 = Simplification des Développements avec Compatibilité et Migration EJB3.0 = EJB2.X + XDoclet Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: POJO (1) • POJO:Plain 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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) Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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,.. Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: POJO (3) Cycle de vie Réalisé par: MEDINI Soumaya et MEJRI Nassiha
POJO: 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
POJO: cycle de vie • Detached - Identité de persistance - Non géré par le conteneur - Necessité de la synchronisation • Removed • Identity de persistance • Suppression du bean Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Annotations (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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Annotations(2) Annotations EJB 3.0 1- Nature de l'EJB - @Stateless, @Stateful, @MessageDriven ou @Entity 2- Accès distant ou local - @Remote, @Local - Plus de RemoteException 3- Cycle de vie - @PostConstruct, @PostActivate, @Remove, @PreDestroy, @PrePassivate Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Annotations(3) • @Entity indique que le User class est un bean entité. • @EJBconfigure la valeur EJB pour chaque méthode • @Id annotation indique l’attribut de la clé primaire du bean entité • @Tablespécifie la table de base de données pour les bean entité Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Annotations (4) • @SecondaryTablespécifie la table secondaire • @Serializedspecifie que la propriété persistante doit être serializable • @JoinColumnspécifie la colonne de jointure avec la colonne secondaire • @OneToMany Specifie le champ comme une relation1-n Réalisé par: MEDINI Soumaya et MEJRI Nassiha
INJECTION • 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Les annotations d’injection • @EJB - Annote les interfaces métier des EJB - Annote les interfaces Home • @Inject ou @PersistenceContext - Permet l 'injection de tout ce qui se trouve dans JNDI - Permet d 'injecter SessionContext, UserTransaction, EntityManager, ... • @Resource - Annote toute le reste (ou presque) - Injection de variable d 'instance ou de setter Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Annotations 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: Bean Session(1) • Spécification par @Stateful ou @Stateless • stateful session beans sont transitoires • @Remove: spécifier au conteneur que le stateful session bean instance peut être supprimé Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: Bean Session(2) Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: Bean Session(2) Pour indiquer que cette classe est un stateless session bean Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: Bean Session(2) injection de tout ce qui se trouve dans JNDI Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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 l’annotation @Entity Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: Entity Bean(3) Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: Entity Bean(3) Spécifie la table de la base pour l’entité bean Spécifie le champ comme une relation n-1 Définit la clé étrangère Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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: @MessageDriven. Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
EJB3: 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. Réalisé par: MEDINI Soumaya et MEJRI Nassiha
DEMO. . . Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Conclusion • 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 Réalisé par: MEDINI Soumaya et MEJRI Nassiha
Merci pour votre attention. . . Réalisé par: MEDINI Soumaya et MEJRI Nassiha