Introduction
Le système de messagerie Java, JMS, fournit une plateforme standard pour la communication asynchrone des données métier
et des événements au sein de l'entreprise. La communication se fait habituellement au moyen de processus et de
machines. Les objets dans les applications habituellement en cours de fonctionnement sur différentes machines,
communiquent en accédant aux services du middleware orienté message (MOM) grâce à un ensemble standard d'interfaces
défini par JMS.
JMS fournit un ensemble d'interfaces qui isole le programmeur Java (implémentant les fournisseurs et consommateurs de
messages) des fournisseurs MOM.
Cette page décrit les concepts clés et l'utilisation habituelle de JMS.
Messages
Un message est un package autonome de données métier. Il comporte trois compartiments :
-
En-tête : contient des informations sur l'acheminement des données et des identificateurs de message.
-
Propriétés : contient des métadonnées pour le message. JMS détermine certaines propriétés mais les
programmeurs d'application peuvent également ajouter leurs propres propriétés.
-
Données utiles : contient les données métier réelles. Les données utiles sont entièrement contrôlées par le
programmeur d'application.
Dans JMS, le message est encapsulé dans un objet qui implémente l'interface javax.jms.Message. Un programme Java
peut accéder aux compartiments par cette interface, comme le montre le diagramme suivant. Les données utiles se
déclinent en plusieurs variations ; celles-ci sont décrites plus loin.
L'en-tête contient les propriétés du message qui doivent toujours être là. Les propriétés suivantes sont disponibles
pour l'en-tête :
-
Identificateur de message
-
Horodatage
-
Identificateur de corrélation
-
Répondre à
-
Destination
-
Mode de livraison
-
Redélivré
-
Type
-
Expiration
-
Priorité
Les propriétés peuvent être utilisées par le programmeur d'application pour fournir les métadonnées pour le
message. Les propriétés consistent en un ensemble arbitraire de paires nom/valeur.
Il existe six types de données utiles prises en charge par JMS :
-
Messages de texte
-
Messages d'objet
-
Messages d'octets
-
Messages de mappe
-
Messages de flux
-
Message (sans corps)
Les types de données utiles se reflètent dans la hiérarchie de classes où les interfaces étendent
javax.jms.Message. Dans le diagramme de classes suivant, nous présentons les messages de texte, d'objet et
d'octets qui sont souvent utilisés. Les messages de texte sont généralement les porteurs des données XML.
Destinations
JMS définit le concept d'une destination. Les messages sont envoyés aux destinations et proviennent des destinations.
Les destinations peuvent prendre deux formes :
-
Files d'attente
-
Rubriques
Les files d'attente représentent des destinations de messages utilisées lorsque les messages sont traités
uniquement par un récepteur. Considérant que les messages sont comparables au courrier ordinaire, les files d'attente
sont des boîtes aux lettres appartenant à un destinataire particulier. Le communication utilisant les files d'attente
est appelée communication point à point.
Les rubriques représentent des destinations de message, utilisées lorsque les messages ont besoin d'être
réceptionnés par des récepteurs multiples ; chacun d'entre eux manifeste un intérêt dans la réception d'un type
particulier de message. Pour poursuivre la comparaison avec le courrier ordinaire, c'est comme écrire un article dans
un journal ; un message est lu par un certain nombre de récepteurs. Nous appelons souvent ce type de conception, modèle
publish-and-subscribe.
Livraison des messages
La livraison des messages peut être réalisée de deux manières :
-
Persistante
-
Non persistante
La livraison persistante comprend le stockage du message dans un fichier ou une base de données permettant ainsi de
garantir la livraison. La livraison non persistante améliore la performance et réduit le temps système de stockage,
mais elle ne garantit pas la livraison du message. Pour la plupart des applications utilisant JMS, la livraison
persistante est la plus employée.
Clients JMS
Les clients JMS sont les objets Java qui utilisent JMS. Il existe deux rôles :
-
Producteurs de message : programmes Java qui créent et envoient des messages.
-
Consommateurs de message : programmes Java qui reçoivent des messages.
La diagramme suivant est une vue d'ensemble présentant la manière dont le producteur, les consommateurs et les fournisseurs JMS collaborent.
Un producteur de messages peut être n'importe quelle classe Java ayant accès à une implémentation JMS. Les producteurs
de message créent et envoient des messages.
Un consommateur de message peut être n'importe quelle classe Java ayant accès à une implémentation JMS. Les
consommateurs de message reçoivent et traitent les messages.
Un client JMS utilise un ensemble d'interfaces pour accéder à JMS. Les objets qui implémentent les interfaces JMS sont
créés grâce à un ensemble de fabriques. La fabrique initiale est ConnectionFactory (Fabrique de connexions). La
fabrique de connexions est optimisée grâce à JNDI. Le client JMS utilise la fabrique de connexions pour créer un objet
de connexion. L'objet de connexion est utilisé pour créer un objet de session, et utilisé comme fabrique pour les
autres objets JMS. La figure suivante illustre les relations conceptuelles clés entre les fabriques, sans rentrer dans
les détails des files d'attente et des rubriques.
Les fabriques de connexion, les connexions et les sessions prennent deux formes : une pour les files d'attente (queue)
et une autre pour les rubriques (topic). Le diagramme des classes ci-dessous montre la hiérarchie d'interface pour les
concepts JMS clés.
Fournisseurs JMS
Un fournisseur JMS est une implémentation qui est conforme à la spécification JMS. Le fournisseur JMS a la
responsabilité de recevoir, conserver et délivrer des messages.
Plus d'informations
Pour plus d'informations, reportez-vous à http://java.sun.com/products/jms/.
|