2011-11-30 74 views
1

我有一個異步接收JMS如此編碼(明顯缺少細節):的javax.jms.JMSException:MQJMS2002:無法從MQ隊列得到消息

connection = connectionFactory.createConnection(); 
connection.setExceptionListener(new ExceptionListener() { 
    @Override 
    public void onException(JMSException ex) { 
     logger.info("JMS exception " + ex.getMessage()); 
    } 
}); 

session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
consumer = session.createConsumer(queue); 
consumer.setMessageListener(listener); 
logger.info("Waiting for a message"); 
connection.start(); 

一切都很好地啓動,但是當消息到達我獲取ExceptionListener拾取的JMSException。例外說:

javax.jms.JMSException: MQJMS2002: failed to get message from MQ queue. 
at com.ibm.msg.client.wmq.v6.jms.internal.ConfigEnvironment.newException(ConfigEnvironment.java:374) 
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageConsumer.getMessage(MQMessageConsumer.java:3047) 
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageConsumer.receiveAsync(MQMessageConsumer.java:4042) 
at com.ibm.msg.client.wmq.v6.jms.internal.SessionAsyncHelper.run(SessionAsyncHelper.java:507) 
at java.lang.Thread.run(Thread.java:662) 

鏈接的異常只是說NullPointerException並沒有提供任何其他細節。

我已經拖網尋找答案,但我不是MQ專家,並沒有得到任何與此。這裏的中間件人員不是很有幫助,讓他們做任何事情都證明是緩慢而痛苦的。我得到的印象是與隊列配置有關,但我覺得我正在抓着吸管。

如果任何人有任何建議,我將不勝感激 - 特別是如果這是我可以自己武裝與和

我使用的MQ 7.0.0.2客戶端罐子面對中間件:)。在IBM網站上的

回答

1

令人尷尬的是,我剛剛發現上面略過的一些'顯而易見的'代碼有一個finally塊,它在打開後不久就關閉了連接。不知道爲什麼錯誤信息必須如此模糊 - 告訴我,連接關閉會節省我幾個小時的頭部劃傷。

感謝那些花時間閱讀我的問題!

+0

空指針異常將回答有關錯誤消息的問題。如果在MQ API調用中發生錯誤,則鏈接的異常將包含適當的MQ返回碼,告訴您API調用在關閉的連接上不起作用。在API調用中沒有發生異常,或者您的代碼引用了不存在的鏈接異常,或者MQ代碼中有一個未初始化鏈接異常的錯誤。如果你認爲這是最後一個(和開發者*總是*做!:-)並且可以重新創建它,請打開PMR。否則,請確保您正確訪問鏈接的異常。 –

0

This support link似乎與您的問題有關。雖然它提到了版本6的類而不是7,但除了行號之外,堆棧跟蹤相似。顯然原因將是用於封裝標題信息的XML中出現的屬性。

客戶端是否使用與Websphere MQ服務器實例相同的版本?您可能需要說服中間件人員升級至7.0.1.0並安裝最新的修訂包,然後確保使用適合該版本的客戶端jar。從7.0.1.0開始,解析頭文件已經有了修復。

1

除了例外,還可能有MQ原因碼給出。這可以節省你的時間真的很有幫助。

+0

是不是MQJMS2002的原因代碼? – DaveRlz