module uv java page 1 / 67 deruelle laurent copyright © 2002 laurent deruelle cursus de formation...

50
Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message Module Java Expert

Upload: iseult-coudert

Post on 03-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 1 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT

UV EJB Message

Module Java Expert

Page 2: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 2 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Plan (1/2)

Définition d’un Message L’API Java Message Service Comment fonctionne JMS avec J2EE ? Les concepts de base de JMS Modèle de programmation JMS Exemples

Page 3: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 3 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Définition des messages

Les messages sont un moyen de communication entre les composants ou les applications.

Les messages peuvent être envoyés par :– N’importe quel composant J2EE :

• les applications clientes,

• les enterprises beans,

• les composants Web,

– Une application J2EE interne / externe: interconnexion d’applications J2EE distribuées

– Une autre application externe non J2EE : interconnexion d’applications J2EE et du système d’information : EAI

Page 4: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 4 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Définition des messages

La communication est point-à-point et faiblement couplé dans des environnements distribués :– Un client envoie un message et reçoit un message d’autres

clients– Les clients se connectent à un agent de messages pour :

• La création de messages.

• L’envoie et le réception de messages.

• La lecture de messages.

– L’envoie et la réception s’effectue sur la base d’une destination (asynchrone).

Page 5: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 5 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’API Java Message Service

JMS est une API, spécifiée en 1998, pour la création, l’envoie et la réception des messages de façon :– Asynchrone : un client reçoit les messages dès qu’ils

arrivent ou lorsque le client est disponible et sans avoir à demander si un message est disponible.

– Fiable : le message est délivré une fois et une seule.

Page 6: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 6 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Quand utiliser JMS?

JMS peut être utilisé lorsque :– les composants n’ont pas besoin de connaître les interfaces des

autres composants, – mais uniquement transmettre un événement, une information.

Exemple : une entreprise automobile– Le stock envoie un message à la production lorsque le nombre de

véhicule répertorié est en dessous d’un seuil.– La production envoie un message aux unités pour assembler des

parties d’une automobile.– Les unités envoient des messages à leurs stocks internes pour

récupérer les parties.– Les unités envoient des messages aux gestionnaire de

commandes pour commander les parties chez le fournisseur.– Le stock peut publier un catalogue pour la force de vente

Page 7: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 7 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Comment fonctionne JMS avec J2EE ?

JMS peut accéder aux Messaging-oriented middleware (MOM), tels que MQSeries d’IBM,

Elle fait partie intégrante de J2EE à partir de la version 1.3.

Réception et envoie de messages de type :– Synchrones : applications clientes , EJBs, composants Web

(sauf applets, hors spécification)– Asynchrones : applications clients, les beans orientés

messages. Les composants messages participent aux

transactions distribuées des autres composants.

Page 8: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 8 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’architecture JMS

Une application JMS est composée des parties suivantes :– Un JMS provider est un système de gestion de messages qui

implémente les interfaces JMS. Une plateforme J2EE v.1.3 incluse un JMS provider.

– Les clients JMS sont les composants Java, qui produisent et consomment des messages.

– Les Messages sont les objets qui communiquent des informations entre les clients JMS.

– Les Administered objects sont des objets JMS pré-configurés créés par un administrateur pour l’utilisation de clients. Les deux types d’objets sont les destinations et les connection factories.

– Les Native clients sont des programmes qui utilisent une API native de gestion de message à la place de JMS.

Page 9: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 9 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’architecture JMS

– Les Administrative tools permettent de lier les destinations et les connections factories avec JNDI.

– Un client JMS peut alors rechercher les objets administrés dans JNDI et établir une connexion logique à travers le JMS Provider.

Page 10: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 10 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les domaines

Avant l’arrivée de JMS, les produits proposaient une gestion de messages :– Selon un protocole point-à-point,– Selon un protocole publier/souscrire

Les JMS Provider compatible J2EE 1.3 doivent obligatoirement implémenter ces deux protocoles

Page 11: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 11 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le protocole point-à-point

Ce protocole est basé sur le concept de queue de messages, d’envoyeurs et de receveurs.

Chaque message est adressé à une queue spécifique et les clients consomment leurs messages.

Ce protocole doit être utilisé pour s’assurer qu’un seul client consommera le message.

Page 12: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 12 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le protocole publier/souscrire

Les clients sont anonymes et adressent les messages selon certaines rubriques.

Le système distribue le message à l’ensemble des souscripteurs puis l’efface.

Ce protocole est efficace lorsqu’un message doit être envoyé à zéro, un ou plusieurs clients.

Page 13: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 13 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La consommation de messages

Un client consomme les messages de façon :– Synchrone : en appelant la méthode receive, qui est

bloquante jusqu’à ce qu’un message soit délivré, ou qu’un délai d’attente soit expiré.

– Asynchrone : un client peut s’enregistrer auprès d’un écouteur de message (listener). Lorsqu’un message arrive, JMS le délivre en invoquant la méthode onMessage du listener, lequel agit sur le message.

Page 14: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 14 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le modèle de programmation JMS

Page 15: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 15 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Connection Factories

Une connection factory est l’objet qu’un client utilise pour créer une connexion avec un JMS provider.

Chaque connection factory est une instance de l’interface QueueConnectionFactory ou de TopicConnectionFactory.

Pour créer de nouvelles connexions :– j2eeadmin -addJmsFactory jndi_name queue – j2eeadmin -addJmsFactory jndi_name topic

Page 16: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 16 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Connection Factories

Au début d’un programme JMS, le client réalise une opération de recherche de connexion via JNDI :

Context ctx = new InitialContext();

QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)

ctx.lookup("QueueConnectionFactory");

TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory)

ctx.lookup("TopicConnectionFactory");

Page 17: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 17 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les destinations

Une destination est un objet qu’un client utilise pour spécifier la cible des messages produits et la source des messages consommés.

Dans le protocole point-à-point : les queues sont les destinations; dans les publications/souscriptions : les topiques sont les destinations.

Pour créer de nouvelles destinations :– j2eeadmin -addJmsDestination queue_name queue – j2eeadmin -addJmsDestination topic_name topic

Page 18: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 18 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les destinations

Un client doit rechercher sa destination via JNDI, en plus de la connection factory :

Topic myTopic = (Topic) ctx.lookup("MyTopic");

Queue myQueue = (Queue) ctx.lookup("MyQueue");

Page 19: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 19 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’objet connection

Un objet connection encapsule une connexion virtuelle avec le JMS Provider (i.e. socket TCP/IP avec le démon).

L’objet connection permet de créer une ou plusieurs sessions.

QueueConnection queueConnection = queueConnectionFactory.createQueueConnection();

TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();

//fermeture sessions, producteurs et consommateursqueueConnection.close(); topicConnection.close();

Page 20: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 20 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’objet session

L’objet session est un contexte transactionnel pour produire et consommer des messages.

Il permet de créer :– un producteur de messages,– un consommateurs de messages,– les messages.

QueueSession queueSession = queueConnection.createQueueSession(true, 0);

TopicSession topicSession = topicConnection.createTopicSession(false,

Session.AUTO_ACKNOWLEDGE);

Transactionnelle

Non- transactionnelle

Non spécifié pour les transactions

Page 21: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 21 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les producteurs de messages

Un producteur de message est un objet créé par une session et utilisé pour envoyer des messages à une destination.

QueueSender queueSender = queueSession.createSender(myQueue);

TopicPublisher topicPublisher = topicSession.createPublisher(myTopic);

L’envoi de message est réalisé par :queueSender.send(message);

topicPublisher.publish(message);

Page 22: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 22 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les consommateurs de messages synchrones

Un consommateur de message est un objet créé par une session et utilisé pour recevoir des messages provenant d’une destination.

QueueReceiver queueReceiver = queueSession.createReceiver(myQueue); TopicSubscriber topicSubscriber = topicSession.createSubscriber(myTopic);

La réception de message débute :queueConnection.start(); Message m = queueReceiver.receive(); topicConnection.start(); Message m = topicSubscriber.receive(1000); // time out d’une seconde

La méthode close() permet de rende inactif un consommateur

Page 23: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 23 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les consommateurs de messages asynchrones

Un consommateur de message asynchrone doit être connecté à un listener de message, qui agit comme un gestionnaire événementiel asynchrone.

TopicListener topicListener = new TopicListener();

topicSubscriber.setMessageListener(topicListener);

//idem pour QueueListener

La réception de message débute :queueConnection.start();

topicConnection.start();

Dans J2EE 1.3, le bean orienté message est un type spécial de message listener.

Page 24: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 24 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les messages

Les messages JMS ont un format standard :– Un entête, comportant des champs dont les valeurs sont

déterminées par les clients et les providers (automatique)– Des propriétés (optionnel), pour filtrer les messages– Un corps (optionnel) parmi cinq prédéfinis :

• TextMessage : chaîne de caractère (java.lang.String)• MapMessage : couple nom(String) / valeur (type primitif),

accédé via une énumération• BytesMessage : suite d’octets (encodage du message)• StreamMessage : suite de valeurs primitives remplies et lues

de façon séquentielle• ObjectMessage : un objet Java serializable• Message : rien, vide (comme void pour les méthodes).

Page 25: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 25 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les valeurs des champs de l’entête de message

champs modifié parJMSDestination méthode send ou publish // la queue ou le topique JMSDeliveryMode méthode send ou publish // type de receptionJMSExpiration méthode send ou publish //time outJMSPriority méthode send ou publish // niveau de prioritéJMSMessageID méthode send ou publish // ID unique de messageJMSTimestamp méthode send ou publish //estampillage JMSCorrelationIDClientJMSReplyTo ClientJMSType Client

JMSRedelivered JMS provider

Page 26: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 26 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Création, envoi et réception d’un message

Selon le type de message, la procédure est la suivante :

TextMessage message = queueSession.createTextMessage();

message.setText(msg_text); // msg_text est une chaîne (String)

queueSender.send(message); La consommation d’un message est réalisée :Message m = queueReceiver.receive();

if (m instanceof TextMessage) {

TextMessage message = (TextMessage) m; System.out.println("Reading message: " + message.getText());

} else {

// gérer l’erreur

}

Page 27: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 27 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Gestion des exceptions dans JMS

Toutes les exceptions JMS héritent de JMSException :– IllegalStateException – InvalidClientIDException – InvalidDestinationException – InvalidSelectorException – JMSSecurityException – MessageEOFException – MessageFormatException – MessageNotReadableException – MessageNotWriteableException – ResourceAllocationException – TransactionInProgressException – TransactionRolledBackException

Page 28: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 28 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple point-à-point synchrone

Écriture des programmes clients :– SimpleQueueSender.java :

• Effectue une recherche JNDI du QueueConnectionFactory et d’une queue (destination)

• Création d’une connexion et d’une session

• Création d’un QueueSender

• Création d’un TextMessage

• Envoi un ou plusieurs messages à la queue

• Envoi un a message de contrôle pour indiquer la fin de du flux de messages

• Fermeture de la connexion dans un bloc finally

Page 29: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 29 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple point-à-point synchrone

Écriture des programmes clients :– SimpleQueueReceiver.java

• Effectue une recherche JNDI du QueueConnectionFactory et d’une queue (destination)

• Création d’une connexion et d’une session

• Création d’un QueueReceiver

• Démarre la connexion, permettant la réception de messages

• Réception des messages de la queue jusqu’au message de contrôle pour indiquer la fin de du flux de messages

• Fermeture de la connexion dans un bloc finally

Page 30: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 30 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Compilation, exécution

Compilation classique :– javac SimpleQueueSender.java – javac SimpleQueueReceiver.java

Démarrage du JMS Provider :– j2ee -verbose – Attendre le message « J2EE server startup complete »

Créer les objets administrés :– j2eeadmin -addJmsDestination MyQueue queue – j2eeadmin -listJmsDestination

Exécution de l’exemple :– java -Djms.properties=%J2EE_HOME%\config\jms_client.properties SimpleQueueSender MyQueue 3 – java -Djms.properties=%J2EE_HOME%\config\jms_client.properties SimpleQueueReceiver MyQueue

Suppression des objets administrés et arrêt du serveur J2EE:– j2eeadmin -removeJmsDestination MyQueue – j2ee -stop

Page 31: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 31 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Automatiser JMS dans J2EE

À partir de J2EE v1.3, l’API JMS est incluse dans les archives du serveur d’applications.

Sun conseille de ne pas utiliser la méthode receive() avec les enterprises beans, du fait de la monopolisation des ressources et de blocage.

Il est préférable d’utiliser : – un time out : receive(time out), avec time out > 0 (synchrone)– Un bean orienté message (asynchrone)

Pour les objets administrés, Sun définit un sous contexte java:comp/env/jms pour stocker les noms JNDI.

Les ressources, telles que les connections et les sessions doivent être gérées de la manière suivante :– Création dans ejbCreate() et ejbActivate()– Libération / fermeture dans ejbRemove() et ejbPassivate() avec affectation

à la valeur null

Page 32: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 32 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les beans orientés messages dans J2EE

Un bean orienté message est un listener de messages, possédant une méthode onMessage().

Le conteneur EJB réalise automatiquement les tâches :– Création d’un consommateur de messages (QueueReceiver ou

TopicReceiver), le bean message aura une destination et une connection factory lors du déploiement (assemblage)

– L’enregistrement du listener de messages (pas besoin d’appeler setMessageListener)

– La spécification du mode d’accusé réception des messages.

Page 33: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 33 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Spécification d’un bean message

Le bean message doit implémenter les interfaces – javax.ejb.MessageDrivenBean et – javax.jms.MessageListener– Les méthodes :

• public void onMessage(Message m), • public void ejbCreate() {}• public void ejbRemove() {}• public void setMessageDrivenContext(MessageDrivenContext mdc)

{} pour les aspects transactionnels

Le bean message ne doit pas disposer de :– L’interface Home– L’interface Remote

Page 34: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 34 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Cycle de vie du bean message

Page 35: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 35 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le bean message et les transactions

Le bean message peut participer aux transactions distribuées :– Utiliser le container-managed transactions

– Spécifier l’attribut Required pour la méthode onMessage :• Démarrage d’une transaction avant l’exécution de la méthode• Commit de la transaction à la fin de l’exécution de la méthode

Le contexte de la transaction (MessageDrivenContext) est passée au bean via la méthode setMessageDrivenContext et permet les opérations suivantes:– setRollbackOnly : à utiliser pour spécifier une exception dans le bean

– getRollbackOnly : permet de tester si une transaction est déjà marquée en rollback

Page 36: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 36 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple MessageBean.java

public class MessageBean implements MessageDrivenBean, MessageListener { private transient MessageDrivenContext mdc = null; private Context context; public MessageBean() { System.out.println("In MessageBean.MessageBean()"); } public void setMessageDrivenContext(MessageDrivenContext mdc) { System.out.println("In " + "MessageBean.setMessageDrivenContext()"); this.mdc = mdc; } public void ejbCreate() { System.out.println("In MessageBean.ejbCreate()"); }public void ejbRemove() { System.out.println("In MessageBean.remove()"); }

Page 37: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 37 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple MessageBean.java

public void onMessage(Message inMessage) { TextMessage msg = null;

try { if (inMessage instanceof TextMessage) { msg = (TextMessage) inMessage; System.out.println("MESSAGE BEAN: Message " + "received: " + msg.getText()); } else { System.out.println("Message of wrong type: " + inMessage.getClass().getName()); } } catch (JMSException e) { System.err.println("MessageBean.onMessage: " + "JMSException: " + e.toString()); mdc.setRollbackOnly(); } catch (Throwable te) { System.err.println("MessageBean.onMessage: " + "Exception: " + te.toString()); } }}

Page 38: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 38 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple

Page 39: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 39 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Création du code client

Vous ne spécifiez par le nom de la queue name. Le client obtiendra le nom de la queue name à travers une recherche JNDI.

Vous ne spécifiez pas le nombre des messages; par défaut il est positionné à 3, et pas de fin de message ne sera envoyée au MDB (Message-driven bean).

La recherche JNDI s’effectuera dans le sous contexte java:/comp/env/jms.

Page 40: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 40 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Compilation et déploiement

Compiler les fichier à l’aide de la commande :– javac *.java

Démarrer le serveur J2EE et l’outil de déploiement Création d’une queue :

– Dans l’outil de déploiement :• Menu tools -> Server Configuration -> JMS -> Destinations

• Sélectionner JMS Queue Destinations

• Cliquer sur Add puis insérer le texte jms/MyQueue

• Vérifier à l’aide de la commande j2eeadmin -listJmsDestination

Page 41: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 41 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Création de l’application EAR

La création de l’application EAR est réalisée :– Dans l’outil de déploiement File->New Application – Donner un nom et clic sur Browse pour sélectionner le

répertoire contenant les fichiers Java de l’application– Dans le champs File Name : MDBApp– Clic New Application– Clic OK

Page 42: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 42 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Packager l’application cliente

Utiliser l’assistant pour créer votre application cliente :– Menu File -> New -> Application Client

– Clic Next

– Dans la liste déroulante : sélectionner MDBApp

– Clic sur Edit :• Choisir le répertoire contenant les fichiers clients• Sélectionner uniquement les fichiers .class : SimpleClient.class puis Add• Clic Ok

– Clic Next

– Vérifier que le nom affiché et la classe principale sont SimpleClient

– Vérifier que l’authentification Container-managed est sélectionnée

– Clic Next jusqu’à Resource References

Page 43: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 43 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Spécifier les ressources de l’application :Resource References Dialog Box

Associer le nom JNDI pour la connection factory dans le code SimpleClient.java avec le nom de la QueueConnectionFactory.

Vous devez spécifier l’ authentification conteneur pour la ressource connection factory, en définissant le nom de l’utilisateur et le mot de passe afin de pouvoir créer une connexion.

Les étapes sont les suivantes :– Clic Add. – Dans le champs Coded Name, saisir jms/MyQueueConnectionFactory

(SimpleClient). – Dans le champs Type, choisir javax.jms.QueueConnectionFactory. – Dans le champs Authentication, choisir Container. – Dans le champs Sharable, vérifier que la case est activée. Ceci permet au

conteneur d’optimiser les connexions. – Dans le champs JNDI Name, saisir jms/QueueConnectionFactory. – Dans le champs User Name, saisir j2ee. – Dans le champs Password, saisir j2ee. – Clic Next.

Page 44: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 44 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Spécifier les références aux destinations JMS:JMS Destination References

Associer le nom JNDI pour la queue définie dans SimpleClient.java avec le nom de la queue créée à l’aide de j2eeadmin.

Les tâches sont les suivantes :– Clic Add. – Dans le champs Coded Name, saisir jms/QueueName

(SimpleClient). – Dans le champs Type, choisir javax.jms.Queue. – Dans le champs JNDI Name, saisir jms/MyQueue. – Clic Next.

Finalement clic sur Finish

Page 45: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 45 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Packager le bean message

Utiliser l’assistant pour créer votre application cliente :– Menu File -> New -> Enterprise Bean– Clic Next – Dans la liste déroulante : sélectionner MDBApp– Clic sur Edit :

• Choisir le répertoire contenant les fichiers du bean

• Sélectionner uniquement les fichiers .class : MessageBean.class puis Add

• Clic Ok

– Clic Next

Page 46: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 46 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Sélectionner le type du bean :General Dialog Box

Dans le Bean Type, choisir le Message-Driven. Dans le champs Enterprise Bean Class, choisir

MessageBean. Les listes déroulantes pour les interfaces locales et remote sont grisées.

Dans le champs Enterprise Bean Name, saisir MessageBean.

Click Next.

Page 47: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 47 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Spécifier le type de transaction :Transaction Management Dialog Box

Vous spécifier la manière dont les transactions pour la méthode onMessage seront gérées.

Un enterprise bean ordinaire dispose de six attributs possibles, un bean orienté messages n’en a que deux.

Les tâches sont les suivantes :– Choisir Container-Managed. – Dans le champs Transaction Attribute, vérifier que la valeur

Required est sélectionnée pour la méthode onMessage. – Clic Next.

Page 48: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 48 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Spécifier les paramètres du bean: Message-Driven Bean Settings Dialog Box

Vous spécifiez les propriétés du déploiement du bean. Du fait que les transactions soient gérées par le conteneur, le champs Acknowledgment est grisé.

Les tâches sont les suivantes :– Dans la liste Destination Type, choisir Queue. – Dans le champs Destination, choisir jms/MyQueue. – Dans le champs Connection Factory, choisir

jms/QueueConnectionFactory. – Clic Next.

Finalement clic sur Finish.

Page 49: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 49 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Déploiement de l’application

Pour déployer l’application, réaliser les tâches suivantes :– A partir du menu File, sauvegarder l’application. – A partir du menu Tools, choisir Deploy. – Clic Next. – Dans la boîte de dialogue JNDI Names, vérifier que les

noms corrects. – Clic Next. – Clic Finish. – Lorsque le message "Deployment of MDBApp is complete"

apparaît cliquer sur OK.

Page 50: Module UV Java Page 1 / 67 Deruelle Laurent Copyright © 2002 Laurent Deruelle CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Message

Module UV JavaPage 50 / 67

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exécuter le client

Pour exécuter le client, il faut se positionner dans le répertoire contenant les fichiers clients.

runclient -client MDBApp.ear -name SimpleClient Lorsque la demande de Login apparaît :

– Saisir j2ee pour le nom de l’utilisateur – Saisir j2ee pour le mot de passe.

Cliquer sur OK.