User Tools

Site Tools


wiki:epims4_0:developer:jms

JMS

JMS, (Java Message Service), est la spécification de Sun pour la gestion des messages de la plate-forme Java EE

... et Geronimo

Le provider JMS inclus dans Geronimo est ActiveMQ. On définit les ressources JMS dans la console de Geronimo. Ces ressources sont ensuite référencées, notamment via JNDI, dans les applications (J2EE déployées sur Geronimo ou même standalone externe).

Configuration et liens entre ressources/références

Ressources Geronimo

  • JMS Resource Group (Resource Adapter?): epims_jms (1a)
    • ConnectionFactory epims_cf (1b)
    • Queue : MyTestQueue avec PhysicalName MyTestQueue (1c)
    • Queue : QueueDiffPN avec PhysicalName PhysNameQueue (1c)
    • Queue : QueueNoPhyName sans PhysicalName (1c)

Application EAR

  • EAR
    • dépendance vers console.jms epims_jms (1a) (dans geronimo-application.xml)
  • application Web (incluse dans le EAR)
    • définition d'un mapping dans geronimo-web.xml
   <nam:resource-ref>
      <nam:ref-name> jms/epims </nam:ref-name>            (2)
      <nam:resource-link> epims_cf </nam:resource-link>  (1b)
   </nam:resource-ref>
  • utilisation de la référence jms/epims de type javax.jms.ConnectionFactory dans web.xml
  • définition des messages utilisés dans web.xml
   <message-destination-ref>
      <message-destination-ref-name> MyRefQueue </message-destination-ref-name>    (3)
      <message-destination-type>javax.jms.Queue</message-destination-type>
      <message-destination-usage>Produces</message-destination-usage>
      <message-destination-link>QueueDiffPN</message-destination-link>             (1c)
   </message-destination-ref>
  • dans le code (servlet envoyant un msg par exemple) accès via jndi(lookup) à java:comp/env/MyRefQueue (3)
  • application standalone / Spring Core
    • accès au context via JNDI (SpringCore) java:comp/env/jms/epims (2)
    • accès à l'objet Queue via le nom physique : PhysNameQueue par exemple (1c)

Tests réalisés

  • Il est nécessaire que la référence du message dans web.xml (3) soit celle utilisée dans le code
  • Si on utilise un physicalName <> nom de l'objet Queue dans Geronimo, c'est le physicalname qui doit être utilisé dans les applications standalone mais c'est le nom qui doit être spécifié dans l'application web
  • Un physical name doit obligatoirement être spécifié !

Le workspace Eclipse utilisé pour les tests est sauvegardé (pour le laboratoire EDyP) dans Informatique/Gestion de Projets/ePims/Developpement

Problème avec JmsTemplate

L'utilisation de la classe JmsTemplate de Spring semble poser des problèmes lors de l'envoi/réception de messages dans des TOPIC. Tout est OK pour les QUEUE.

Configuration :

  • application standalone définissant deux beans Spring
    1. TopicListener implémentant MessageListener et initialisé pour écouter le Topic d'intérêt
    2. TopicReceiver ayant comme propriété JmsTemplate et une méthode qui exécute JmsTemplate .receive(le Topic d'intérêt)
  • librairie embarquée dans Geronimo définissant les beans
    1. SampleService qui envoie un message au Topic d'intérêt via JmsTemplate
    2. SampleServiceWOTemplate qui envoie un message au Topic d'intérêt via un MessageProducer
  • application web définissant les servelts :
    1. SendTopic : utilisation du bean SampleServiceWOTemplate de la librairie pour l'envoie de message
    2. SendTopic2 : utilisation du bean SampleService de la librairie pour l'envoie de message

Comportement :

  • Lors de l'envoie de message via SendTopic2 seul le TopicReceiver reçoit le message
  • Lors de l'envoie de message via SendTopic seul le TopicListener reçoit le message et éventuellement des outils extérieur tel que Hermes….

En d'autre termes les “listeners” utilisant JmsTemplate ne reçoivent des messages que des “senders” utilisant Jms Template et inversement; les messages émis par des “senders” utilisant JmsTemplate ne sont reçu que par des “listeners” utilisant JmsTemplate.

Solution : Dans un premier temps (?), nous n'allons pas utiliser le JmsTemplate de Spring afin d'éviter ces problèmes…. Des tests devront/pourront être faits pour tenter d'élucider ce problème ! Les articles suivants sont à conserver sous le coude : http://activemq.apache.org/spring-support.html http://activemq.apache.org/jmstemplate-gotchas.html

wiki/epims4_0/developer/jms.txt · Last modified: 2008/10/02 10:21 (external edit)