2015-06-05 128 views
2

我在Spring中編寫了一個WS-Application,它支持創建消息到JMS隊列中。 我使用帶有ActiveMQ的Apache Tomcat開發它。寄託都工作正常,在這裏,我有我的JNDI資源可以推導出連接工廠和消息發送到隊列:JMS與Spring和Webspehre集成的JNDI MQ

<jee:jndi-lookup id="jndiJmsQueueConnectionFactory" 
     jndi-name="${jms.factory.jndiName}" proxy-interface="javax.jms.ConnectionFactory" 
     lookup-on-startup="false"> 
</jee:jndi-lookup> 

<jee:jndi-lookup id="jndiSendQueue" jndi-name="${jms.myQueue.jndiName}" 
     proxy-interface="javax.jms.Queue" lookup-on-startup="false"></jee:jndi-lookup> 

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
     <property name="connectionFactory" ref ="jmsQueueConnectionFactory"></property> 
     <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/> 

</bean> 

現在我們試圖移動web應用到WebSphere。在JNDI查找工作中,應用程序可以創建工廠,隊列被發現,但是當我的代碼試圖通過createProducer創建生產者()的代碼拋出此異常:

java.lang.ClassCastException: com.sun.proxy.$Proxy28 cannot be cast to com.ibm.mq.jms.MQDestination 

我試圖取代「的javax。 jms.Queue「與」javax.jms.Destination「,但沒有奏效。

當我刪除代理接口它正在工作,但我需要該隊列不會在上下文啓動時獲取。

回答

2

當使用Spring時,它將查找的Destination包裝到Spring動態代理中。 WebSphere MQ JMS提供程序需要實現其目標,並且它不會收到一個異常。您可能能夠在查找的目標上調用toString,然後使用Session對象上的結果調用createDestination。

+0

有確切的問題。這工作(使用createSession)。當依靠Spring來執行JNDI查找Queue時,注入的類是com.sun.proxy類。$ Proxy135,當調用createSession時,我可以獲得類com.ibm.mq.jms.MQQueue。我新增了我的隊列名稱,因此我不需要執行toString。 – AR3Y35