Les MDBs sont des beans qui s'inscrivent à des Queues ou des Topics.
Un message reçu par une Queue est envoyé à un seul MDB destinataire.
Un message reçu par un Topic est envoyé à plusieurs MDB destinataires qui ont été inscrits au préalable au Topic.
Le container EJB peut créer plusieurs instances du MDB pour traiter les différents messages reçus pour ce MDB.
Mais une seule instance du MDB va être utilisée pour traiter un message :
lorsqu'une méthode d'une instance du MDB est appelée, alors le container EJB va attendre que la méthode complète son exécution avant d'utiliser cette même instance pour traiter un autre message.
L'envoie/réception des messages utilisent l'API JMS qui permet une communication asynchrone entre les expéditeurs (envoient des messages) et les destinataires (consomment les messages).
Il y a deux modes de communications : mode point à point (Queue) et mode publier/abonner (Topic) :
-
Mode point à point (Queue)
La communication via des queues permet à un expéditeur (application client) d'envoyer un message à une queue, et un destinataire qui est lié à cette queue de consommer ce message.
Le message est toujours consommer par un seul destinataire.
-
Mode publier/abonner (Topic)
La communication via des topics permet à un expéditeur (application client) d'envoyer un message à un topic, et plusieurs destinataires qui sont abonnés à ce topic vont consommer ce message.
Un message JMS est composé de :
-
Entête du message
L'entête du message contient un ensemble de champs prédéfinis et leurs valeurs qui permettent d'identifier et router le message.
-
Les propriétés du message
Les propriétés (nom/valeur) permettent d'assigner des informations additionnelles au message.
-
Le corps du message
Le corps du message contient le contenu du message qui peut être en un des cinq types supportés par JMS.
JMS supporte cinq types de messages.
L'interface
Message
(
javax.jms.Message
) est dérivée en plusieurs sous-interfaces qui précisent le type du message :
-
TextMessage
(javax.jms.TextMessage
)
Un objet TextMessage
est utilisé pour envoyer un message dont le corps est une chaîne de caractères.
-
StreamMessage
(javax.jms.StreamMessage
)
Un objet StreamMessage
est utilisé pour envoyer un message dont le corps est une suite de valeurs dont le type correspond à un des types primitifs Java.
-
ObjectMessage
(javax.jms.ObjectMessage
)
Un objet ObjectMessage
est utilisé pour envoyer un message dont le corps est un objet Java.
-
MapMessage
(javax.jms.MapMessage
)
Un objet MapMessage
est utilisé pour envoyer un message dont le corps est une Map Java.
-
BytesMessage
(javax.jms.BytesMessage
)
Un objet BytesMessage
est utilisé pour envoyer un message dont le corps est une suite binaire de données.
Terminologies :
-
Fournisseur JMS (JMS Provider)
Un Fournisseur JMS est une implémentation des spécifications JMS.
-
Message JMS
Le message JMS est un message qui respecte les spécifications JMS.
-
Domaines JMS
Un domaine JMS correspond au mode de communication point à point avec des queues ou publier/abonner (publish/subscribe) avec des topics.
-
Destination
Les objets destinations sont des objets servant à identifier la cible (domaine : queue ou topic) des messages à envoyer ou à recevoir.
-
Expéditeur JMS (JMS Producer)
Un Expéditeur JMS est une application qui envoie des messages JMS.
-
Consommateur JMS (JMS Consumer)
Un Consommateur JMS est une application qui reçoit des messages JMS.