2011-01-25 40 views
1

我正在研究偵聽遠程服務器中的MQ隊列的EJB3 MDB。 除MDB完成的處理外,所有工作都正常(MDB在將消息放入偵聽隊列時觸發)。有關信息,我使用WMQ資源適配器來映射隊列。JBoss MDB - JMSBytesMessage類拋出異常

在MDB的'onMessage'方法中,我嘗試將給定的消息強制轉換爲類'com.ibm.jms.JMSBytesMessage',但我得到一個奇怪的錯誤消息。

的代碼是下面的一個(簡單的示例):

public void onMessage(Message theMessage) { 
    ((JMSBytesMessage) theMessage).readBytes(myBytes); 
} 

和異常信息:

異常而讀取輸入請求:com.ibm.jms.JMSBytesMessage不相容用com.ibm.jms.JMSBytesMessage

好吧,亂七八糟收到的年齡應該是(並且是)類型'com.ibm.jms.JMSBytesMessage',那麼爲什麼應用程序不起作用?我的JBoss服務器是否可能已經使用庫的另一個版本'com.ibm.mqjms.jar'(包括JMSBytesMessage類)並導致這種錯誤?

ps:我已經在linux系統下的JBoss服務器版本4.2.3上部署了應用程序。 我已經使應用程序在我的本地機器上使用同一版本的JBoss服務器,但在窗口系統下(相同的配置,相同的庫等)

有人有關於這種錯誤的原因的想法嗎?

在此先感謝您的幫助。

問候,

編輯:解決方法:javax.jms.BytesMessage代替com.ibm.jms.JMSBytesMessage

+1

你爲什麼要投它一切?如果您不打算繼續使用JMS提供的接口,那麼使用JMS就毫無意義。你不能轉換爲`javax.jms.BytesMessage`嗎? – skaffman 2011-01-25 13:52:16

+0

我試圖轉換BytesMessage,但MDB有一個奇怪的行爲(從輸入隊列讀取消息,但看起來像回滾消息並再次讀取)。但是這個錯誤信息都沒有出現,也沒有其他的處理痕跡(因此MDB中沒有做任何事情):我試圖捕獲'Exception'和'Error'類型並顯示一個跟蹤,但是日誌中沒有顯示任何內容。所以目前,使用javax.jms.BytesMessage進行投射不起作用,但我不知道爲什麼。但是你是對的,沒有必要使用javax.jms.BytesMesasge – kij 2011-01-25 15:49:32

回答

3

不妨重現我的意見作爲答案:

不要投射到特定於MQ的com.ibm.jms.JMSBytesMessage,投射到JMS標準javax.jms.BytesMessage。將代碼耦合到特定於實現的類型與JMS試圖達到的目的相反。