JMS と Spring Framework

Spring Framework アプリケーションは、JMSTemplate クラスを使用して JMS メッセージを送信したり、同期 JMS メッセージを受信したりできます。

JMSTemplate は、アプリケーション・リソース参照で構成した Java™ Naming and Directory Interface (JNDI) 名から JMS 宛先を見つけることができます。

あるいは、Spring Framework バージョン 2.5 以降の場合、JMSTemplate は動的解決を使用して JMS 宛先を見つけることができます。これにより、 WebSphere® Application Server で構成されている宛先の管理名が検索されます。

JMS リソースが正しく管理されるようにするには、JndiObjectFactoryBean を ConnectionFactory のプロキシーとして使用します。 以下に例を示します。
<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>
以下の例は、ConnectionFactory のリソース参照の構成を示しています。 このリソース参照は、アプリケーションのデプロイメント時に、アプリケーション・サーバーの JNDI 名前空間に保管されている構成済みの管理対象接続ファクトリーにマップされます。 ConnectionFactory はメッセージングの実行に必要です。ConnectionFactory は 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>
アプリケーションに ConnectionFactory の定義済み JNDI 名を含めると、その JNDI 名を検索して、JMSTemplate に注入することができます。 以下に例を示します。
<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"/>

JMSTemplate オブジェクトは、実行時に、アプリケーション・リソース参照内に構成されたその JNDI 名に基づいて宛先を特定することができます。 あるいは、JMSTemplate オブジェクトは、 WebSphere Application Serverで構成された宛先の管理名に基づいて、動的解決を使用して宛先を見つけることができます。

以下の例は、jms/myQueue の JNDI 参照にバインドされている JMS キュー myQueue を JNDI 解決を使用して特定する方法を示しています。
jmsTemplate.send("java:comp/env/jms/myQueue", messageCreator);
以下の例は、jms/myQueue の JNDI 参照にバインドされている JMS キュー myQueue を、動的解決を使用して特定する方法を示しています。
jmsTemplate.send("myQueue", messageCreator);