2017-08-07 20 views
1

我正在使用IBM MQ作爲客戶端來放置/獲取消息。問題與com.ibm.mq.jar

試圖創建MQMessage reqMsg= new MQMessage()獲得例外低於 java.lang.NoClassDefFoundError: Could not initialize class com.ibm.mq.internal.MQCommonServices

com.ibm.mq.jar可我war.The相同的代碼裏面是工作在我的Windows機器,但不工作的時候在Linux(煙霧)服務器。這將經常發生,但是當我用新的它替換現有的mq jar它再次開始工作。但是這次沒有運氣。

下面的一些關鍵點可能有助於找出問題。

1)由於服務器運行的是相同的版本,因此我們手動將jar添加到7.1.0.6版本的工件中,因此客戶端也需要具有相同版本的jar。

但是,當我做Java的罐子com.ibm.mq.jar它會顯示如下

Name:  WebSphere MQ classes for Java 
Version:  8.0.0.5 
Level:  p800-005-160516.2 
Build Type: Production 

2)我有以下7.1.0.6版本罐子在我的戰爭把/獲取消息從/到服務器。

com.ibm.mq.allclient 
com.ibm.mq.axis2 
com.ibm.mq.commonservices 
com.ibm.mq.headers 
com.ibm.mq 
com.ibm.mq.jmqi 
com.ibm.mq.jms.Nojndi 
com.ibm.mq.pcf 
com.ibm.mq.soap 
com.ibm.mq.tools.ras 
com.ibm.mq.traceControl 
com.ibm.mqjms 

3)我使用jdk 1.8。

任何幫助,非常感謝。

+0

com.ibm.mq.allclient.jar在IBM MQ v8之前不存在,因此它不能從v7.1安裝。我會檢查每個jar中的MANIFEST.MF文件以檢查它們來自哪個版本。在linux上,你可以使用這個命令'unzip -p com.ibm.mq.jar META-INF/MANIFEST.MF | grep Specification-Version',用每個jar替換jar名稱。 – JoshMc

+0

你想要做什麼?你寫過,你把jar放在你的戰爭中..你是從部署在應用服務器上的web應用中訪問MQ的嗎?如果是的話哪一個?你如何訪問MQ?如果您的應用程序部署在應用程序服務器中,最好使用隨附的RAR和相關JEE API,並且不要在應用程序中部署該jar文件。或者,您可能正在使用專有類連接到MQ? 。請更準確地瞭解你在做什麼......你的問題到底是什麼? – titou10

+0

@ titou10我有一個Java客戶端程序,我正嘗試將消息發佈到遠程MQ服務器。是的,我正在從一個Web應用程序(戰爭)訪問MQ服務器,並且我正在使用tomcat8作爲應用程序服務器。就像其他依賴項一樣,我在pom中添加了MQ依賴關係。我的問題是我得到CNF異常,並且如果替換com。在戰爭中的ibm.mq.jar並重新啓動它用來工作的服務器。但是這次它不起作用。從過去的7個月開始,它一直在正常工作,並突然停止了異常工作。 – lkreddy1231

回答

0

com.ibm.mq.allclient.jar在IBM MQ v8之前不存在,因此它不能從v7.1.0.6安裝。

檢查每個jar中的MANIFEST.MF文件以檢查它來自哪個版本的IBM MQ。

在linux上,您可以使用以下命令,用每個jar替換jar名稱。

unzip -p com.ibm.mq.jar META-INF/MANIFEST.MF|grep Implementation-Version 

您收到的錯誤可能是由於jar版本之間的錯誤匹配。驗證所有jar文件來自IBM MQ的SAME版本。