JMS et Spring Framework

Une application Spring Framework peut utiliser la classe JMSTemplate pour envoyer des messages JMS ou recevoir des messages JMS synchrones.

Le JMSTemplate peut localiser les destinations JMS à partir de leur nom JNDI (Java™ Naming and Directory Interface) que vous configurez dans une référence de ressource d'application.

Alternativement, pour la version Spring Framework 2.5 et versions ultérieures, JMSTemplate peut localiser les destinations JMS via une résolution dynamique, qui recherche le nom administratif de la destination configurée dans WebSphere® Application Server

Vous utilisez un objet Spring JndiObjectFactoryBean comme relais d'un objet ConnectionFactory pour vérifier que les ressources JMS sont correctement gérées. Par exemple :
<bean id="jmsConnectionFactory" 
   class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="java:comp/env/jms/myCF"/>
      <property name="lookupOnStartup" value="false"/>
      <property name="cache" value="true"/>
      <property name="proxyInterface" value="javax.jms.ConnectionFactory"/>
</bean>
L'exemple suivant montre comment configurer une référence de ressource pour un objet ConnectionFactory. Pendant le déploiement de l'application, cette référence de ressource est mappée à une fabrique de connexions gérée, configurée et installée dans l'espace de nom JNDI du serveur d'applications. L'objet ConnectionFactory est obligatoire pour la messagerie et doit être injecté dans l'objet Spring JMSTemplate.
<resource-ref>
  <res-ref-name>jms/myCF</res-ref-name>
  <res-type>javax.jms.ConnectionFactory</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
Quand le nom JNDI défini pour l'objet ConnectionFactory a été injecté dans l'application, ce nom JNDI peut être recherché et injecté dans l'objet JMSTemplate. Par exemple :
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name=" jms/myCF "/>

<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory">
    <ref bean="jmsConnectionFactory"/>
  </property>
  <property name="destinationResolver">
    <ref bean="jmsDestResolver"/>
  </property>

  ...
</bean>

<!-- A dynamic resolver --> 
<bean id="jmsDestResolver" 
  class=" org.springframework.jms.support.destination.DynamicDestinationResolver"/>

<!-- A JNDI resolver -->  
<bean id="jmsDestResolver" 
  class=" org.springframework.jms.support.destination.JndiDestinationResolver"/>

Pendant la phase d'exécution, l'objet JMSTemplate peut rechercher une destination sur la base du nom JNDI qui a été configuré dans une référence de ressource d'application. Alternativement, l'objet JMSTemplate peut localiser une destination à l'aide d'une résolution dynamique, basée sur le nom administratif de la destination configurée dans WebSphere Application Server.

L'exemple suivant montre comment utiliser la résolution dynamique pour rechercher la file d'attente JMS "myQueue" liée à une référence JNDI de jms/myQueue :
jmsTemplate.send("java:comp/env/jms/myQueue", messageCreator);
L'exemple suivant montre comment utiliser la résolution dynamique pour rechercher la file d'attente JMS "myQueue" liée à une référence JNDI de jms/myQueue :
jmsTemplate.send("myQueue", messageCreator);