Maîtrisez la création d’un EJB3 Message avec Eclipse WTP et Jboss 5. Comprenez la relation de l’EJB3 avec le conteneur EJB de JEE ainsi que les avantages de l’EJB3 message. Crééez et testez pas à pas un gestionnaire de demandes de formations Objis (DemandeFormationManager). Celui-ci réagit à toute demande de formation déposée dans une file de message Jboss Messaging ou ActiveMQ.
Ce tutoriel s’inscrit dans le projet global jee 5 réalisé par plusieurs équipes . C’est l’équipe comorienne qui est en charge de la partie EJB (ObjisEarProjectEJB)
Les + objis
70% de travaux pratiques
Clé USB avec tous les outils utilisés + Corrigés TPs
Bilan pédagogique individuel + conseils
Liens utiles
+ de 100 tutoriaux java/jee Objis
Tutoriel et formation EJB3
Objis, spécialiste formation java depuis 2005
Tutoriel jee 5 Objis
Tutoriel ActiveMQ N°1 : installation et analyse
Tutoriel officiel JEE 5 de Sun Microsystem
Spécifications JEE 5 et API javadoc JEE 5
Site de téléchargement du serveur d’applications JEE 5 Jboss
Prérequis
(obligatoire) Instalation Eclipse ganymede jee SR2 (WTP inclus)
(obligatoire) Tutoriel Jboss N°6 : configuration JMS (JBoss Messaging)
Article : Les différentes livraisons j2ee (WAR, EAR, JAR, RAR)
intégration eclipse / jboss 5 avec jboss tools 3
Installation Jboss 5 (serveur d’application jee de RedHat)
Formation Architecture Java
Soyez prêt pour des projets ambitieux : formation architecture Java Objis
Objectifs
Comprendre le contexte d’utilisation d’un EJB3 Message.
Comprendre les avantages et inconvénients de la solution EJB3.
Comprendre la création pas à pas d’un EJB3 Message.
Comprendre le concurrent Spring JMS.
Avoir une idée d’un contexte d’utilisation dans le projet global jee 5 .
Introduction
Contexte d’utilisation EJB3 message et architecture
L’EJB MDB favorise en couplage faible entre 2 applications. Il apporte une solution aux problème des communications synchrones. Ci-dessous l’application ‘client’ dépose un message dans une file de message. L’application EJB traite le message. Ces 2 applis ‘ne se connaissent pas’.
A travers un pool d’EJB, le conteneur EJB gère l’écoute et le traitement d’un message arrivant dans la file de message.
Avantages de l’EJB3 message
— Gestion multitheading (plusieurs clients simmultanés) par le conteneur ! Cela grâce à un pool de MDB.
— Diminution du code Consumer/Producer (pas besoin de connaître toute l’API JMS : ConnectionFactory, connexion, session, Destination, Consumer + attachement à un listener…)
— Gestion du cycle de vie du mdb (il démarre et disparaît en même temps que le conteneur)
Inconvénients de l’ejb MDB
— l’EJB doit évoluer dans un conteneur Jee5 (exeption notable pour le conteneur OpenEJB).
Concurrents de l’ejb mdb
— Un des concurrents les plus sérieux de l’EJB MDB est la solution apportée par le framework Spring, en particulier avec Spring JMS . A travers un système d’adapter, vous pouvez déclencher l’exécution d’une méthode de tout POJO suite à la réception d’un message dans une file d’attente.
Règles de programmation
— 1) le MDB doit directement (implements) ou indirectement (@) implémenter une interface d’écoute (Listener).
— 2) le MDB doit être une classe concrète (ni final, ni abstract)
— 3) le MDB doit être public
— 4) le MDB doit être un POJO et non une sous classe d’un autre MDB
— 5) vous ne pouvez pas définir une méthode finalise dans un MDB. Utilisez plutôt interface preDestroy du cycle de vie EJB
— 6) le MDB ne doit lancer aucune exception type javax.rmi.RemoteException ou runtime. Si c’est le cas, le MDB est arrété par le conteneur.
Partie 1 : étapes de Codage du MDB
Créer un PoJo implémentant javax.jms.MessageListener
Ajouter l’annotation @MessageBean au dessus de la déclaration de la classe pour que le conteneur sache que c’est un MDB et le gère en conséquence
Injectez l’attribut @Ressource MessageDrivenContext , qui servira, dans le corps d’implémentation de onMessage(), réaliser des RollBack transactuonels (en cas d’exceptions JMSException ou autre SQLException,…)
Ajoutez la méthode métier qui sera appelée dans le corps de onMessage()
Ajoutez le corps de l’implémentation de onMessage()
Partie 2 : mise en oeuvre
A partir d’eclipse (ici eclipse 3.4 Ganymède), menu File->New->EJB Project
L’écran suivant apparaît.
entrez le nom du projet. Ici demoejb3mdb . Ce projet sera un sous-projet du projet ObjisEarProject que doivent livrer l’équipe des Commores.
REMARQUE : le projet va être déployé sur le serveur JBoss. [Cliquez ici pour l’intégration Jboss et eclipse>article74].
REMARQUE : que vous avez la possibilité (case à cocher) d’inclure l’EJB dans un projet EAR global (Exemple projet ObjisEarProject).
Cliquez sur suivant. L’écran suivant apparaît.
Cliquez sur Finish.
Eclipse crée l’ossature du projet
Remarquez les librairies de Jboss présentes.
Création d’un package
Dans l’écran suivant , entrez comme nom de package : com.objis.demoejb3.mdb
L’écran suivant aparaît alors
Création bu bean
Créer un PoJo implémentant javax.jms.MessageListener
L’interface a été choisie dans un jar de Jboss 5.
Jboss génère le code suivant
Ajouter l’annotation @MessageBean au dessus de la déclaration de la classe pour que le conteneur sache que c’est un MDB et le gère en conséquence
Complétez la déclaration de l’annotation en précisant :
— le type de ‘Destination’ (Queue ou Topic). Ici c’est une file de message Queue
— le nom de la ressource qui gère les messages. ici ressource JNDI jms/DemandeFormationQueue
Création bu bean
Préparer une classe représentant une Demande de formation.
Une Demande de formation est caractérisée par :
— Nom de la personne à former$
— Société
— thème de la formation
— Date de la formation
Générer avec l’assistant eclipse les getters et setters.
injectez l’attribut @Ressource MessageDrivenContext , qui servira, dans le corps d’implémentation de onMessage(), réaliser des RollBack transactuonels (en cas d’exceptions JMSException ou autre SQLException,…)
injectez toute autre @Ressource necessaire , comme une base de données
Préparer une méthode pour le traitement métier du message récupéré dans la fille de méssage :
Ajoutez le corps de l’implémentation de onMessage()
Mettez en œuvre le traitement métier. Ici, les informations récupérées dans le message sont enregistrés en base de données. Ici une implémentation simple basée sur JDBC. Une meilleure implémentation serait d’utiliser JPA.
implémenter les interfaces PostConstruct et Predestroy du cycle de vie de l’EJB Message.
Cela pour préparer la ressource base de données dès que l’ejb est instancé (PostConstruct)…
…et libérer cette ressource lorsque l’ejb est détruit (PreDestroy).
Votre EJB Message est désormais prêt.
Export en livrable .jar
Exportez votre EJB en un livrable EJB jee 5
Choisissez le répertoire dans lequel le jar sera déposé par Eclipse. Ici nous déployons le Jar directement dans Jboss 5.
Appuyez sur Finish. Observez les logs de Jboss.
Client EJB3 Message
Codage
Classe ClientJMS dans projet Eclipse Application Client.
Lancement
Run/Run as Java application
Observez la console :
l’EJB3 a réagit et inséré les données en base de données.
Sources : projet Eclipse
EJB3 Message
ejb3 message DeandeFormationManager- Jboss5
Client EJB3 Message
client EJB3 Message – Depot demande formation dans Topic JMS
Conclusion
Vous avez développé un EJB3 message et son client Java.
Formation Architecture Java
Soyez prêt pour des projets ambitieux : formation architecture Java Objis