使用 jndi 查找的 Jndi DestinationResolver 的 Bean 定义示例
Bean definition example for JndiDestinationResolver using jndi look up
我正在使用 JmsTemplate 发送和接收消息 to/from IBM MQ 队列。我的应用程序安装在 WebSphere 应用程序服务器 8.0 上,为了检索连接,我使用了 jndi 查找。
我有 6 个队列,根据情况,我需要 pick/drop xml。我还在 WAS 中添加了这些队列。我需要帮助来理解两件事:
我应该用DynamicDestinationResolver
还是JndiDestinationResolver
?
根据我的理解我应该使用JndiDestinationResolver
;如果这是正确的,我如何在我的上下文文件中定义它并为每个队列引用 jndi-lookup
以便我可以在使用 jmsTemplate send/receive?
[=28= 时从我的代码中检索它]
请参阅下面我的应用程序上下文文件:
<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/CPC.TapQueueConnCPC" />
<property name="lookupOnStartup" value="false" />
<property name="cache" value="true" />
<property name="proxyInterface" value="javax.jms.QueueConnectionFactory" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="receiveTimeout" value="10000" />
<property name="sessionAcknowledgeMode" value="1" />
<property name="destinationResolver" ref="jmsDestResolver"/>
</bean>
<bean id="fileTransferServiceImpl" class="org.kp.cpc.service.FileTransferServiceImpl" >
<constructor-arg name="jmsTemplate" ref="jmsTemplate" />
</bean>
<bean id="jmsDestResolver" class=" org.springframework.jms.support.destination.JndiDestinationResolver"/>
<jee:jndi-lookup id="drop278" jndi-name="jms/CPC.SEND.AUTHREQ278" />
<jee:jndi-lookup id="drop275" jndi-name="jms/CPC.SEND.AUTHREQ275" />
<jee:jndi-lookup id="recev278" jndi-name="jms/CPC.RECE.AUTHREQ278" />
<jee:jndi-lookup id="recev275" jndi-name="jms/CPC.RECE.AUTHREQ275" />
<jee:jndi-lookup id="preAuthStatus" jndi-name="jms/CPC.RECE.PREAUTH.STSUPD278"/>
<jee:jndi-lookup id="succ278" jndi-name="jms/CPC.RECE.SUCC.AUTHRESP278" />
JndiDestinationResolver
的全部意义在于您不需要进行手动查找。换句话说,当使用 JndiDestinationResolver
时,您不需要 <jee:jndi-lookup />
,因为它已由 DestinationResolver
处理。
目的地的名称将是 JNDI 名称。因此,在您的 JMS 代码中,您将使用以下内容。
jmsTemplate.convertAndSend("jms/CPC.SEND.AUTHREQ278", "Your-Message-Here");
JndiDestinationResolver
将使用目标名称进行 JNDI 查找。
如果您真的想在代码中保留 JNDI 名称并想使用 <jee:jndi-lookup />
,那么请使用 [BeanFactoryDestinationResolver
]。这将使用目标名称从 BeanFactory
(在本例中为 ApplicationContext
)中查找 bean。然后,您的 JMS 代码将指向 bean 名称而不是 JNDI 名称。
jmsTemplate.convertAndSend("drop278", "Your-Message-Here");
所以使用哪一个取决于您的喜好。
我正在使用 JmsTemplate 发送和接收消息 to/from IBM MQ 队列。我的应用程序安装在 WebSphere 应用程序服务器 8.0 上,为了检索连接,我使用了 jndi 查找。
我有 6 个队列,根据情况,我需要 pick/drop xml。我还在 WAS 中添加了这些队列。我需要帮助来理解两件事:
我应该用
DynamicDestinationResolver
还是JndiDestinationResolver
?根据我的理解我应该使用
[=28= 时从我的代码中检索它]JndiDestinationResolver
;如果这是正确的,我如何在我的上下文文件中定义它并为每个队列引用jndi-lookup
以便我可以在使用 jmsTemplate send/receive?
请参阅下面我的应用程序上下文文件:
<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/CPC.TapQueueConnCPC" />
<property name="lookupOnStartup" value="false" />
<property name="cache" value="true" />
<property name="proxyInterface" value="javax.jms.QueueConnectionFactory" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="receiveTimeout" value="10000" />
<property name="sessionAcknowledgeMode" value="1" />
<property name="destinationResolver" ref="jmsDestResolver"/>
</bean>
<bean id="fileTransferServiceImpl" class="org.kp.cpc.service.FileTransferServiceImpl" >
<constructor-arg name="jmsTemplate" ref="jmsTemplate" />
</bean>
<bean id="jmsDestResolver" class=" org.springframework.jms.support.destination.JndiDestinationResolver"/>
<jee:jndi-lookup id="drop278" jndi-name="jms/CPC.SEND.AUTHREQ278" />
<jee:jndi-lookup id="drop275" jndi-name="jms/CPC.SEND.AUTHREQ275" />
<jee:jndi-lookup id="recev278" jndi-name="jms/CPC.RECE.AUTHREQ278" />
<jee:jndi-lookup id="recev275" jndi-name="jms/CPC.RECE.AUTHREQ275" />
<jee:jndi-lookup id="preAuthStatus" jndi-name="jms/CPC.RECE.PREAUTH.STSUPD278"/>
<jee:jndi-lookup id="succ278" jndi-name="jms/CPC.RECE.SUCC.AUTHRESP278" />
JndiDestinationResolver
的全部意义在于您不需要进行手动查找。换句话说,当使用 JndiDestinationResolver
时,您不需要 <jee:jndi-lookup />
,因为它已由 DestinationResolver
处理。
目的地的名称将是 JNDI 名称。因此,在您的 JMS 代码中,您将使用以下内容。
jmsTemplate.convertAndSend("jms/CPC.SEND.AUTHREQ278", "Your-Message-Here");
JndiDestinationResolver
将使用目标名称进行 JNDI 查找。
如果您真的想在代码中保留 JNDI 名称并想使用 <jee:jndi-lookup />
,那么请使用 [BeanFactoryDestinationResolver
]。这将使用目标名称从 BeanFactory
(在本例中为 ApplicationContext
)中查找 bean。然后,您的 JMS 代码将指向 bean 名称而不是 JNDI 名称。
jmsTemplate.convertAndSend("drop278", "Your-Message-Here");
所以使用哪一个取决于您的喜好。