Tutoriel EJB3 N°2 : création EJB3 message (MDB)

////Tutoriel EJB3 N°2 : création EJB3 message (MDB)

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

programme-detaille-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’.

architecture_ejb3_jms.png

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

tutoriel_ejb3_creation_ejbmdb_1.png

L’écran suivant apparaît.

tutoriel_ejb3_creation_ejbmdb_2.png

 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.

tutoriel_ejb3_creation_ejbmdb_3.png

 Cliquez sur Finish.

Eclipse crée l’ossature du projet

tutoriel_ejb3_creation_ejbmdb_4.png

Remarquez les librairies de Jboss présentes.

Création d’un package

tutoriel_ejb3_creation_ejbmdb_5.png

 Dans l’écran suivant , entrez comme nom de package : com.objis.demoejb3.mdb

L’écran suivant aparaît alors

tutoriel_ejb3_creation_ejbmdb_6.png

Création bu bean

 Créer un PoJo implémentant javax.jms.MessageListener

tutoriel_ejb3_creation_ejbmdb_8.png

L’interface a été choisie dans un jar de Jboss 5.

tutoriel_ejb3_creation_ejbmdb_7.png

Jboss génère le code suivant

tutoriel_ejb3_creation_ejbmdb_9.png

 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

tutoriel_ejb3_creation_ejbmdb_11.png

 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

tutoriel_ejb3_creation_ejbmdb_12.png

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

tutoriel_ejb3_creation_ejbmdb_13.png

 Générer avec l’assistant eclipse les getters et setters.

tutoriel_ejb3_creation_ejbmdb_14.png

tutoriel_ejb3_creation_ejbmdb_15.png

 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,…)

tutoriel_ejb3_creation_ejbmdb_16.png

 injectez toute autre @Ressource necessaire , comme une base de données

tutoriel_jboss_objis_configuration_jms_33.png

 Préparer une méthode pour le traitement métier du message récupéré dans la fille de méssage :

tutoriel_ejb3_creation_ejbmdb_17.png

 Ajoutez le corps de l’implémentation de onMessage()

tutoriel_ejb3_creation_ejbmdb_18.png

 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.

tutoriel_jboss_objis_configuration_jms_32.png

 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)…
tutoriel_ejb3_creation_ejbmdb_22.png

…et libérer cette ressource lorsque l’ejb est détruit (PreDestroy).

tutoriel_ejb3_creation_ejbmdb_21.png

Votre EJB Message est désormais prêt.

Export en livrable .jar

 Exportez votre EJB en un livrable EJB jee 5

tutoriel_ejb3_creation_ejbmdb_23.png

 Choisissez le répertoire dans lequel le jar sera déposé par Eclipse. Ici nous déployons le Jar directement dans Jboss 5.

tutoriel_jboss_objis_configuration_jms_36.png

 Appuyez sur Finish. Observez les logs de Jboss.

tutoriel_jboss_objis_configuration_jms_24-2.png

Client EJB3 Message

Codage

 Classe ClientJMS dans projet Eclipse Application Client.

tutoriel_jboss_objis_configuration_jms_35.png

Lancement

 Run/Run as Java application

Observez la console :

tutoriel_jboss_objis_configuration_jms_37.png

l’EJB3 a réagit et inséré les données en base de données.

tutoriel_jboss_objis_configuration_jms_31.png

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

programme-detaille-formation-architecture-java-objis

2018-01-27T15:59:04+01:00

Contactez nous

241 rue DUGUESCLIN, 69003 Lyon

Web : Objis : spécialiste formation Java