Le modèle JMS et Jakarta Messaging
Le modèle JMS et Jakarta Messaging définit un ensemble d'interfaces que les applications Java peuvent utiliser pour effectuer des opérations de messagerie. IBM® MQ classes for JMS et IBM MQ classes for Jakarta Messaging sont des fournisseurs de messagerie. Ils définissent comment les objets JMS et Jakarta Messaging sont liés aux concepts IBM MQ . Les spécifications JMS et Jakarta Messaging s'attendent à ce que certains objets JMS et Jakarta Messaging soient des objets gérés.
IBM MQ 8.0 a ajouté la prise en charge de la version JMS 2.0 de la norme JMS , qui a introduit une API simplifiée, tout en conservant l'API classique de JMS 1.1.
À partir de IBM MQ 9.3.0, Jakarta Messaging 3.0 est pris en charge pour le développement de nouvelles applications. IBM MQ 9.3.0 continue de prendre en charge JMS 2.0 pour les applications existantes. L'utilisation de l'API JMS 2.0 et de l'API Jakarta Messaging 3.0 dans la même application n'est pas prise en charge.- Le nom officiel de la version 3.0 est Jakarta Messaging et non Java Message Service.
- Les noms de pack et de constante sont précédés de
jakartaet non dejavax. Par exemple, dans JMS 2.0 , la connexion initiale à un fournisseur de messagerie est un objetjavax.jms.Connectionet dans Jakarta Messaging 3.0 , il s'agit d'un objetjakarta.jms.Connection.
Les paquets javax.jms définissent les interfaces JMS , et un fournisseur JMS met en œuvre ces interfaces pour un produit de messagerie spécifique. IBM MQ classes for JMS est un fournisseur JMS qui implémente les interfaces JMS pour IBM MQ.
Les paquets jakarta.jms définissent les interfaces Jakarta Messaging , et un fournisseur Jakarta Messaging met en œuvre ces interfaces pour un produit de messagerie spécifique. IBM MQ classes for Jakarta Messaging est un fournisseur Jakarta Messaging qui implémente les interfaces Jakarta Messaging pour IBM MQ.
Etant donné que JMS et Jakarta Messaging partagent beaucoup de choses en commun, d'autres références à JMS dans cette rubrique peuvent être considérées comme faisant référence aux deux. Toutes les différences sont mises en évidence si nécessaire.
API simplifiée
- ConnectionFactory
- Une ConnectionFactory est un objet géré qui est utilisé par un client JMS pour créer une connexion. Cette interface est également utilisée dans l'API classique.
- JMSContexte
- Cet objet combine les objets Connection et Session de l'API classicCd. JMSLes objets de contexte peuvent être créés à partir d'autres objets de contexte JMS, la connexion sous-jacente étant dupliquée.
- JMSExpéditeur
- Un fournisseur JMSest créé par un contexte JMSet est utilisé pour envoyer des messages à une file d'attente ou à une rubrique. L'objet JMSProducer entraîne la création des objets nécessaires à l'envoi du message.
- JMSConsommateur
- Un consommateur JMSest créé par un contexte JMSet est utilisé pour recevoir des messages d'une rubrique ou d'une file d'attente.
- L'objet de contexte JMSdémarre toujours automatiquement la connexion sous-jacente.
- JMSProducteurs et JMSConsommateurs peuvent désormais travailler directement avec les corps de message, sans avoir à obtenir l'objet de message entier, à l'aide de la méthode getBody du message.
- Les propriétés de message peuvent être définies sur l'objet Producteur JMS, à l'aide du chaînage de méthodes, avant l'envoi d'un "corps", d'un contenu de message. Le fournisseur JMSgère la création de tous les objets nécessaires à l'envoi du message. Avec JMS 2.0, les propriétés peuvent être définies et un message peut être envoyé comme suit:
context.createProducer(). setProperty("foo", "bar"). setTimeToLive(10000). setDeliveryMode(NON_PERSISTENT). setDisableMessageTimestamp(true). send(dataQueue, body);
JMS 2.0 a également introduit des abonnements partagés dans lesquels les messages peuvent être partagés entre plusieurs consommateurs. Tous les abonnements JMS 1.1 sont traités comme des abonnements non partagés.
API classique
La liste suivante récapitule les principales interfaces JMS de l'API classique:- Destination
- Une destination représente l'endroit où une application envoie des messages, l'endroit d'où elle en reçoit, ou les deux.
- ConnectionFactory
- Un objet ConnectionFactory encapsule un ensemble de propriétés de configuration pour une connexion. Une application utilise une fabrique de connexions pour créer une connexion.
- Connexion
- Un objet Connection encapsule la connexion active d'une application sur un serveur de messagerie. Une application utilise une connexion pour créer des sessions.
- Session
- Une session est un contexte à unité d'exécution unique pour l'envoi et la réception de messages. Une application utilise ensuite une session pour créer des messages, des expéditeurs de message et des consommateurs de message. Une session est transactionnelle ou non transactionnelle.
- Message
- Un objet Message encapsule un message envoyé ou reçu par une application.
- MessageProducer
- Une application utilise un expéditeur de message pour envoyer des messages vers une destination.
- MessageConsumer
- Une application utilise un consommateur de message pour la réception des messages envoyés vers une destination.

Un objet Destination, ConnectionFactory ou Connection peut être utilisé simultanément par différentes unités d'exécution d'une application comportant plusieurs unités d'exécution, mais un objet Session, MessageProducer ou MessageConsumer ne peut pas être utilisé par des unités d'exécution différentes. La manière la plus simple de s'assurer qu'un objet Session, MessageProducer ou MessageConsumer n'est pas utilisé simultanément consiste à créer un objet Session distinct pour chaque unité d'exécution.
Domaines de messagerie
- Messagerie point-à-point
- Messagerie de type publication/abonnement
| Interfaces indépendantes du domaine | Interfaces propres au domaine pour le domaine point-à-point | Interfaces propres au domaine pour le domaine de publication/abonnement |
|---|---|---|
| ConnectionFactory | QueueConnectionFactory | TopicConnectionFactory |
| Connexion | QueueConnection | TopicConnection |
| Destination | File d'attente | Topic |
| Session | QueueSession | TopicSession |
| MessageProducer | QueueSender | TopicPublisher |
| MessageConsumer | QueueReceiver
QueueBrowser |
TopicSubscriber |
IBM MQ classes for JMS 2.0 supporte à la fois les interfaces spécifiques au domaine de JMS 1.1 et l'API simplifiée de JMS 2.0. IBM MQ classes for JMS 2.0 peut donc être utilisé pour gérer des applications existantes, y compris pour développer de nouvelles fonctions dans des applications existantes.
IBM MQ classes for Jakarta Messaging 3.0 prend en charge les versions Jakarta Messaging des mêmes interfaces et est recommandé pour le développement de nouvelles applications.
- Un objet Connection possède des propriétés issues des propriétés de la fabrique de connexions qui a été utilisée pour créer la connexion. Ces propriétés contrôlent comment une application se connecte à un gestionnaire de files d'attente. Des exemples de ces propriétés sont le nom du gestionnaire de files d'attente et, pour une application qui se connecte au gestionnaire de files d'attente en mode client, le nom d'hôte ou l'adresse IP du système sur lequel s'exécute le gestionnaire de files d'attente.
- Un objet Session encapsule un descripteur de connexion IBM MQ , qui définit donc la portée transactionnelle de la session.
- Un objet MessageProducer et un objet MessageConsumer encapsulent chacun un descripteur d'objet IBM MQ .
Lorsque vous utilisez IBM MQ classes for JMS ou IBM MQ classes for Jakarta Messaging, toutes les règles normales de IBM MQ s'appliquent. Sachez, en particulier, qu'une application peut envoyer un message à une file d'attente éloignée, mais elle peut uniquement recevoir un message d'une file d'attente qui appartient au gestionnaire de files d'attente auquel l'application est connectée.
La spécification JMS s'attend à ce que les objets ConnectionFactory et Destination soient des objets gérés. Un administrateur crée et gère des objets gérés dans un référentiel central et une application JMS extrait ces objets à l'aide de l'interface JNDI ( Java Naming and Directory Interface).
Dans IBM MQ classes for JMS et IBM MQ classes for Jakarta Messaging, l'implémentation de l'interface Destination est une superclasse abstraite de Queue et Topic, et donc une instance de Destination est soit un objet Queue, soit un objet Topic. Les interfaces indépendantes du domaine traitent une file d'attente ou une rubrique en tant que destination. Le domaine de messagerie pour un objet MessageProducer ou MessageConsumer varie selon que la destination est une file d'attente ou une rubrique.
- ConnectionFactory
- QueueConnectionFactory
- TopicConnectionFactory
- File d'attente
- Topic
- XAConnectionFactory
- XAQueueConnectionFactory
- XATopicConnectionFactory