====== 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 jms/epims (2) epims_cf (1b) * 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 MyRefQueue (3) javax.jms.Queue Produces QueueDiffPN (1c) * 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) {{ .:jmslinks.png }} === 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 - TopicListener implémentant MessageListener et initialisé pour écouter le Topic d'intérêt - 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 - SampleService qui envoie un message au Topic d'intérêt via JmsTemplate - SampleServiceWOTemplate qui envoie un message au Topic d'intérêt via un MessageProducer * application web définissant les servelts : - SendTopic : utilisation du bean SampleServiceWOTemplate de la librairie pour l'envoie de message - 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