2017-08-07 19 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版本。