2011-01-25 30 views
2

我有這個奇怪的問題與JMS上的MQ隊列與MDBJMS MQ綁定問題

消息驅動EJB綁定:CrbEventMessageAsynchronousService是無法連接到JMS目標:queue.contratto.crb.input.publicQueue。錯誤是:

javax.jms.JMSExceptionMQJMS1017:非本地MQ隊列不適用於接收或瀏覽>

我檢查了QueueManager和MQ隊列被定義爲本地而不是遠程由所述例外。

回答

3

這可能是應用程序打開讀取的最上面的隊列在本地定義的。但是,WMQ解決的隊列不是。例如,如果您通過遠程羣集隊列定義本地別名,則解析的隊列是非本地的。另一個可能的原因是,您打算打開輸出的隊列實際上也被打開以用於輸入。這實際上很常見。

最後,WMQ客戶端連接到預期的不同隊列管理器也是有點常見的。例如,連接到QMGRA,隊列對象指定一個完全限定的名稱,如QUEUE @ QMGRB。即使隊列駐留在QMGRB上,並且JNDI對象按名稱指定了隊列管理器,QMGRA上的連接也將其解析爲傳輸隊列,因此將其視爲非本地。

在Dev中指定這種錯誤的最佳方法之一是使用SupportPac MA0W。此SupportPac作爲API出口或通道出口運行,並以人類可讀的語言列出所有API調用和爲呼叫選擇的所有選項。這將毫不含糊地顯示打開的對象名稱,解析的內容和使用的選項。

或者,您可以使用strmqtrc打開跟蹤。當你完成後,不要忘記使用endmqtrc來禁用它!這些跟蹤在QMgr服務器上啓用和禁用,並跟蹤WMQ API調用。有相同的痕跡在客戶端運行,但這些可能不會顯示您需要的詳細程度。

最後,打印任何鏈接到JMS異常的異常將是明智的。 JMS異常是一種多級數據結構,其中鏈接的異常保存了提供程序特定的值。例如,JMS安全異常可能是WMQ授權錯誤。但是,再次,它可能是密鑰庫或文件系統中的錯誤。如果鏈接的異常未顯示WMQ 2035原因碼,則不是WMQ安全性錯誤。 Infocenter介紹如何在名爲Exceptions in WebSphere MQ classes for JMS的部分中打印鏈接的例外數據。

請注意,我提供了v7.0 WMQ文檔的鏈接。如果您在v6中進行編碼,這些可能不完全準確,您可以改爲查看v6.0 Infocenter。由於WMQ的v6.0在2011年9月即將報廢,強烈建議在v7.0上進行所有新的開發。如果您需要v7.0客戶端,則可下載爲SupportPac MQC7,並向後兼容v6.0 WMQ服務器。

+0

非常感謝。問題出在這個建議中:「最後,WMQ客戶端連接到不同於預期的隊列管理器也是有點常見的」。實際上這是一個應用問題。 MDB定義@ActivationConfigProperty(propertyName =「connectionFactoryJndiName」,propertyValue =「cont0QCFinter」)指向指向錯誤隊列管理器的錯誤連接工廠。親切的問候。最大 – 2011-01-28 07:31:33