1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 

EJB 2 - Les Entreprise Java Bean (JavaBeans)

4.5.Spécifications d’un Message Driven Bean

Un message-driven bean se base sur l’utilisation de Java Message Service et il est donc nécessaire de connaître le fonctionnemnet de cette API avant de commencer à utiliser un message driven-bean.
Un message-driven bean s’utilise en tant que message listener pour JMS. C’est lui qui permettra la gestion asynchrone des messages lors de leur réception.

Nous allons voir dans ce chapitre un exemple d’utilisation d’un message-driven bean.
L’application SimpleMessageApp contient les composants suivants :
  • SimpleMessageClient : Une application client qui envoie des messages avec une file d’attente (queue).
  • SimpleMessageEJB : Un message-driven bean qui reçoit et traite les messages reçus de façon asynchrone en provenance de la file d’attente (queue).

La figure suivante vous présente graphiquement l’organisation des différents composants. L’application cliente peut envoyer des messages à la file d’attente, qui a été créée de façon administrative à l’aide de la console d’administration (Admin Console). Le fournisseur JMS (ici Application Server) délivre les messages aux instances du message-driven bean, qui traitera par la suite ces messages.

L’application SimpleMessageApp

4.5.1.L’application cliente

        1. Présentation de l’application d’exemple

L’application SimpleMessageClient envoie des messages à la file d’attente que le bean SimpleMessageBean surveille.

Celui-ci commence par récupérer une connection factory et une file d’attente (queue) via JNDI :
connectionFactory = (ConnectionFactory) jndiContext.lookup("java:com/env/jms/MyConnectionFactory");
destination = (Queue) jndiContext.lookup("java:com/env/jms/QueueName");

Une connexion à la file d’attente (queue) est ensuite créée :
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
messageProducer = session.createProducer(destination);

Enfin, le client envoie un message à la file d’attente :
message = session.createTextMessage();
for (int i = 0; i < NUM_MSGS; i++) {
message.setText("This is message " + (i + 1));
System.out.println("Sending message: " +
message.getText());
messageProducer.send(message);
}

4.5.2.Classe du bean

La classe MessageDrivenBean montre les besoins d’une classe de message-driven bean :
  • Elle doit implémenter les interfaces MessageDrivenBean et MessageListener.
  • La classe doit être publique (public).
  • La classe ne peut être définie comme abstraite (abstract) ou finale (final).
  • Elle doit implémenter la méthode onMessage().
  • Elle doit implémenter les méthodes ejbCreate() et ejbRemove().
  • Elle doit contenir un constructeur public sans argument.
  • Elle ne doit pas implémenter la méthode finalize().
Contrairement aux session beans et entity beans, un message-driven bean n’a pas d’interfaces locales ou distantes qui définissent l’accès des clients. Bien que les message-driven beans n’aient pas de méthode métier, ils peuvent contenir des méthodes qui peuvent être appelée en interne par la méthode onMessage().

4.5.3.La méthode onMessage()

Quand la file d’attente reçoit un message, le conteneur EJB appelle la méthode onMessage() du message-driven bean.
La méthode onMessage() est appelée par le conteneur du bean quand un message arrive. Cette méthode contient la logique métier qui permet la gestion du message. C’est le rôle du message-driven bean d’analyser et parser le message afin de procéder à la logique métier.
La méthode onMessage() n’accepte qu’un seul argument : le message qui vient d’arriver.
La méthode onMessage() d’un message-driven bean doit respecter les règles suivantes :
  • Elle doit être définie comme publique (public) et ne doit pas être déclarée comme finale (final) ou statique (static).
  • Son type de retour doit être void.
  • L’unique argument qu’elle accepte est du type javax.jms.Message.
  • Elle ne doit pas spécifier de mot clé throws (il ne doit pas être renvoyé d’exception).
  • L’appel de cette méthode doit se faire dans le cadre d’une transaction définie dans le descripteur de déploiement.

Dans la classe SimpleMessageBean, la méthode onMessage() procède à un cast sur le message arrivant en tant que TextMessage et affiche le texte.

4.5.4.Les méthodes ejbCreate() et ejbRemove()

Ces méthodes doivent respecter les points suivants :
  • Elles doivent être publique (public).
  • Leur type de retour doit être void.
  • Elles ne peuvent être définies avec static ou final.
  • Elles ne doivent pas renvoyer d’exception.
  • Elles n’acceptent aucun argument.
Dans la classe SimpleMessageBean, ces méthodes sont vides.

4.5.5.Descripteur de déploiement

Le descripteur de déploiement est assez simple pour ce type d’EJB. En effet, aucune interface n’est à définir.
Voici un exemple de descripteur :


<message-driven>
<description><![CDATA[Description for SimpleMessage]]></description>
<display-name>Name for SimpleMessage</display-name>

<ejb-name>SimpleMessage</ejb-name>

<ejb-class>com.society.stockmanager.ejb.SimpleMessageBean</ejb-class>

<transaction-type>Container</transaction-type>
<acknowledge-mode>Auto-acknowledge</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>


Les nouvelles balises sont :
  • acknowledge-mode :
  • message-driven-destination :
    • destination-type :


4.5.6.Cycle de vie

Le schéma ci-dessous illustre les étapes du cycle de vie d’un message-driven bean.

Le conteneur d’EJB crée habituellement un pool d’instances de message-driven bean. Pour chaque instance, le conteneur instancie le bean et effectue les tâches suivantes :
  1. Il appelle la méthode setMessageDrivenContext() pour passer l’objet contexte à l’instance.
  2. Il appelle la méthode ejbCreate() de l’instance.


Schéma 1-8 : Cycle de vie d’un Message-Driven Bean

Comme un stateles session bean, un message-driven bean n’est jamais passivé et il n’a également que deux états : « n’existe pas » et « prêt » à recevoir les messages.

À la fin du cycle de vie, le conteneur appelle la méthode ejbRemove(). L’instance du bean est prête à être détruite par le Garbage Collector.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Essentiels de cours Java
JavaEJB 3 - Les Entreprise Java Bean version 3 (JavaBeans)
Cet essentiel est la suite de « Entreprise JavaBean 2.1 ». Cependant, nous allons étudier les nouvelles spécifications 3.0 qui simplifient énormément le développement par rapport aux EJB 2.6/20/06
JavaSWT - Créer des interfaces graphiques performantes
SWT (Standard Widget Toolkit) est une librairie graphique qui vous permet de réaliser des applications graphiques Java beaucoup plus avancées et surtout plus rapide à l’exécution.1/29/06
JavaStruts - Un framework MVC pour vos applications J2EE
Struts est un framework open-source qui vous permet de gagner du temps, mais qui permet aussi de voir des applications complexes comme une suite de composants de base : Vues, Actions, Modèles. Vous gagnez ainsi en évolutivité et en lisibilité du code.1/13/06
JavaHibernate - Persistance objet - relationnel
Cet essentiel explique comment utiliser Hibernate afin de gérer la persistance objet relationnel au sein de vos applications Java.12/14/05
JavaIntroduction J2EE - Applications d'entreprise
Cours d'introduction aux diverses technologies et outils que l'on peut rencontrer dans le monde du Java orienté entreprise J2EE12/14/05
JavaEJB 2 - Les Entreprise Java Bean (JavaBeans)
L'objectif avec EJB2 (Entreprise JavaBeans) est d'introduire les concepts de l’Ingénierie Logicielle Basée sur les Composants.12/14/05
JavaDesign Pattern - Améliorez l'architecture de vos programmes
Afin de répondre a des situation récurrentes en programmation, les "design pattern" apportent une solution type à beaucoup de contraintes liées à la programmation objet.12/14/05
JavaArchitecture J2EE - Comment organiser son application J2EE
Ce cours explique comment créer un code modulable, lisible et évolutif afin d'assurer la pérénité de son application.12/14/05
JavaLes web-services - Publication de services
Le développement tend vers les technologies du Web. Il est difficile de faire la distinction entre les différents logiciels qui sont de plus en plus intégrés au Web. Les Web Services rentrent dans l’optique de différencier bien précisément les couches.12/14/05
JavaAnt - L'automatisation des tâches du programmeur
Ecrire des scripts afin d'exécuter les tâches récurrentes10/31/05
JavaIntroduction au langage Java - Présentation & historique
Présentation des origines du langage, ainsi que se buts premiers8/11/05
JavaLa Syntaxe Java - Bases & nomenclatures
Bases de la syntaxe du langage Java8/11/05
JavaLes Classes - Concepts & héritage
Base du développement objet en Java grâce aux classes8/11/05
JavaLes Exceptions - Gestion d'erreurs
Gérer les erreurs liés à la programmation8/11/05

Articles
Eclipse Europa : le successeur de Callisto
Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3) faisant ainsi passer le nombre de projets embarqués de 10 à 21. Que ceux qui sont réticents aux « distributions » d'Eclipse se rassu12/21/07
JavaCruiseControl : l’outil d’intégration continue à avoir dans sa boite à outils
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou .Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans7/2/07
JavaEJB3 - Des concepts à l'écriture du code - Editions DUNOD
Consulter le résumé du premier ouvrage du laboratoire Sun de SUPINFO : EJB3 - Des concepts à l'écriture du code. Guide du développeur, éditions DUNOD.5/27/07
JavaPassage de certification Java Web (SCWCD)
Passer une certification est toujours un moment important car cela permet de mieux faire reconnaître ses compétences face à un recruteur ou un employeur.5/12/07
JavaGoogle Web Toolkit
Google Web Toolkit est un framework java pour générer du javascript et des requêtes Ajax à partir d’un code java. Voilà comment il fonctionne.5/10/07
JavaJ2ME Vs SDE
Demain, les terminaux « légers » seront plus nombreux que les ordinateurs personnels, ce qui entraîne une bataille sur le choix d’une plateforme identique à tous ces terminaux… Aujourd’hui nous retrouvons le J2ME ainsi que le SDE qui s’offrent une rude b4/22/07

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée