vers l'accueil formulaire de contact

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

Votre formation EJB avec Objis, spécialiste formation java depuis 2005 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)

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

Zip - 8.8 ko
ejb3 message DeandeFormationManager- Jboss5

Client EJB3 Message

Zip - 10.7 ko
client EJB3 Message - Depot demande formation dans Topic JMS

Conclusion

Vous avez développé un EJB3 message et son client Java.

Prochaine formation EJB

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur EJB :

Votre formation EJB avec Objis, spécialiste formation java depuis 2005

Pour aller plus loin : le réseau Objis

Si vous appréciez notre sens du partage, devenez gratuitement membre ’classic’ du Club Objis :
- Votez pour les prochains tutoriaux à publier
- Préparez vos entretiens techniques
- Valorisez votre profil / expertise
- Identifiez des opportunités d’emploi
- Recevez la newsletter objis.com