2011-02-14 77 views
3

我的設置是春季3個JMS,MVC +的WebSphere MQ +的Websphere 7春JMS MQJE001:完成代碼 '2',原因是 '2042'

<!-- this is the Message Driven POJO (MDP) --> 
<bean id="messageListener" class="com.SomeListener" /> 

<!-- and this is the message listener container --> 
<bean id="jmsContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="xxxCF" /> 
    <property name="destination" ref="someQueue" /> 
    <property name="messageListener" ref="messageListener" /> 
</bean> 

當我啓動服務器,聽者似乎開始正確的,因爲它接收隊列中的消息,因爲我把它們。

但是,一旦我運行任何簡單的控制器/的行動,甚至沒有任何與JMS它給我的消息,下面一遍又一遍......

DefaultMessag W org.springframework.jms.listener.DefaultMessageListenerContainer handleListenerSetupFailure Setup of JMS message listener invoker failed for destination 'queue:///ABCDEF.EFF.OUT?persistence=-1' - trying to recover. Cause: MQJMS2008: failed to open MQ queue ''.; nested exception is com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2042'. 
DefaultMessag I org.springframework.jms.listener.DefaultMessageListenerContainer refreshConnectionUntilSuccessful Successfully refreshed JMS Connection 

ConnectionEve W J2CA0206W: A connection error occurred. To help determine the problem, enable the Diagnose Connection Usage option on the Connection Factory or Data Source. 

ConnectionEve A J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource [email protected] The exception is: javax.jms.JMSException: MQJMS2008: failed to open MQ queue ''. 

ConnectionEve W J2CA0206W: A connection error occurred. To help determine the problem, enable the Diagnose Connection Usage option on the Connection Factory or Data Source. 

ConnectionEve A J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource jms/XXXQCF. The exception is: javax.jms.JMSException: MQJMS2008: failed to open MQ queue ''. 

原來的聽衆似乎是仍然正常運行...但我認爲控制器以某種方式觸發另一個連接? 有誰知道我應該檢查什麼或可能會導致此問題?

感謝

+0

當我啓動websphere時,監聽器和一切工作正常。一旦我點擊一個動作像\t @RequestMapping(「/ doSomething」) \t public String doSomethingHandler()拋出異常{..........它開始重複2042錯誤 – john 2011-02-15 15:36:40

+0

我認爲主要問題是爲什麼打一個彈簧控制器讓偵聽器嘗試創建另一個連接? – john 2011-02-15 15:47:54

回答

2

的2042點的意思是 「使用對象」。由於消息生成器沒有排隊使用隊列的概念,因此您的一個消費者正在鎖定隊列。

此行爲受queue definition's DEFSOPT attribute控制。這是在隊列管理器本身,而不是在託管對象定義或工廠選項中。從命令行登錄爲mqm(或者如果QMgr在Windows,iSeries,z/OS等平臺上等效),您需要啓動runmqsc併發出以下命令來驗證並解決問題。在我的例子中,QMgr是PLUTO,示例隊列是SYSTEM.DEFAULT.LOCAL.QUEUE。

/home/mqm: runmqsc PLUTO 
5724-H72 (C) Copyright IBM Corp. 1994, 2009. ALL RIGHTS RESERVED. 
Starting MQSC for queue manager PLUTO. 

dis q(system.default.local.queue) defsopt 
    1 : dis q(system.default.local.queue) defsopt 
AMQ8409: Display Queue details. 
    QUEUE(SYSTEM.DEFAULT.LOCAL.QUEUE)  TYPE(QLOCAL) 
    DEFSOPT(EXCL) 
alter ql(system.default.local.queue) defsopt(shared) 
    2 : alter ql(system.default.local.queue) defsopt(shared) 
AMQ8008: WebSphere MQ queue changed. 
dis q(system.default.local.queue) defsopt 
    3 : dis q(system.default.local.queue) defsopt 
AMQ8409: Display Queue details. 
    QUEUE(SYSTEM.DEFAULT.LOCAL.QUEUE)  TYPE(QLOCAL) 
    DEFSOPT(SHARED) 

如果顯示的隊列,並發現它已經被設置爲DEFSOPT(共享),然後必須採取某種指定通過API專用的隊列。這通常意味着一個C或基本Java程序,因爲這些非JMS API可以訪問低級WMQ功能。這些診斷可能會有點棘手,我通常使用trace或SupportPac MA0W退出來顯示使用的API調用和選項。如果是這種情況,我想更多地瞭解原始文章中提到的「簡單控制器/操作」的含義。

最後,如果您正在訪問的隊列是遠程隊列,則它將解析爲傳輸隊列。該通道將始終將發送隊列設置爲GET(INHIBITED)並獲取排它鎖。這與WMQ功能一致,因爲應用程序只能從本地隊列獲取消息。

相關問題