> Index du TP

 

Exercice 4 – API avancée

 

On souhaite dans cet exercice mettre en pratique certains éléments avancés de l'API JMS.  

L'objectif de cet exercice est d'écrire un producteur de messages envoyant sur un topic des dépêches classées en plusieurs catégories. N consommateurs de messages vont lire les messages émis sur ce topic. Ces consommateurs ne sont intéressés que par un type de message. Ils effectueront donc un filtrage sur les messages reçus et ne retiendront que les messages pertinents.

On se donne les contraintes suivantes :

Note: il s'agit d'une hypothèse de déploiement, l'implantation ne doit pas dépendre de cette hypothèse. 

 

Le squelette du programme à compléter est dans TopicSelectors.java.

 

Un objet Barrier vous permettra de synchroniser un objet local, par exemple pour indiquer à un consommateur de messages que son MessageListener a reçu le dernier message.  

Dans le cas de la synchronisation entre producteur et consommateurs, il faut prendre en compte le caractère potentiellement distribué de l'application.

Les messages émis sur un Topic auquel aucun consommateur n'est abonné seront perdus. Il faut donc dans l'exemple précédent s'assurer que des consommateurs seront effectivement présents avant d'émettre. Pour résoudre ce problème, nous allons utiliser une fille de control (un objet Queue) pour synchroniser producteur et consommateurs de messages. On se propose d'ajouter les méthodes suivantes à la classe TopicSelectors :

         public static void sendSynchronizeMessage(String prefix)

throws Exception { … }

    

         public static void receiveSynchronizeMessages(String prefix, int count) { … }

 

Ces deux méthodes utiliseront la file de control (ex : syncQueueName) pour échanger des messages de synchronisation: le producteur attendra count messages de synchronisation émis par chacun des consommateurs avant d'émettre ses messages.

§  Modifiez votre code pour permettre la synchronisation entre MessageListener et consommateur de message, puis entre producteur de messages et consommateurs.

Pour exécuter le TopicSelectors, consultez les commandes d’exécution de clients JMS - Commandes > Exécution