JMS 및 Spring Framework
Spring Framework 애플리케이션은 JMSTemplate 클래스를 사용하여 JMS 메시지를 전송하거나 동기 JMS 메시지를 수신할 수 있습니다.
JMSTemplate는 사용자가 애플리케이션 자원 참조에 구성한 JNDI(Java™ Naming and Directory Interface) 이름에서 JMS 대상을 찾을 수 있습니다.
또는 Spring Framework 버전 2.5 이상의 경우 JMSTemplate는 WebSphere® Application Server에 구성된 대상의 관리 이름을 찾는 동적 해결을 통해 JMS 대상을 찾을 수 있습니다.
JMS 자원이 올바르게 관리되는지 확인하기 위해 Spring 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 네임스페이스에 저장되어 있는 구성되고 관리되는 Connection Factory로 맵핑됩니다. 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의 dynamic 참조에 바인드되는 JMS 큐 myQueue를 찾기 위해 동적 해결을 사용하는 방법을 보여 줍니다.
jmsTemplate.send("myQueue", messageCreator);