java - IBM MQ - NoSuchMethodError - getQmgrSplCapability()

标签 java ibm-mq websphere-7

我正在使用 Websphere Application Server 版本 7.0 和 Websphere MQ 版本 7.5.0.2。我已经构建了一个 .war 文件并将其部署在服务器上,但是当我尝试发送 MQ 消息时,事情崩溃了,我收到了以下错误消息...

[6/6/16 13:28:53:849 CDT] 0000001a ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper 
service SRVE0068E: Uncaught exception created in one of the service methods of the servlet action in application xxxx_war. Exception created : 
java.lang.NoSuchMethodError: com/ibm/mq/jmqi/handles/Hconn.getQmgrSplCapability()Lcom/ibm/mq/constants/QmgrSplCapability;
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:313)

我已经检查了 .war 文件,该类确实存在于其中。我是 WAS 新手,这可能是我的 WAS 配置存在问题吗?我知道这并不是很多信息,但我只是在寻找解决此类问题的正确方向。

如有任何帮助,我们将不胜感激。

最佳答案

这里的问题很简单。您已将 WebSphere MQ 客户端 jar 文件捆绑到您的应用程序中。这是不受支持的,可能会导致各种问题(加载的类的混合版本、奇怪的行为、ClassNotFoundError 等)。也不以任何方式支持它。

混合版本控制正是问题所在,因为您组合了 MQ V7.5 Java 客户端类(在您的应用程序中)和 WebSphere Application Server (WSAS) V7.0 本身中包含的 V7.0.1 类。 ese.intercept 类存在于捆绑的 V7.5 jar 中,但它们试图在 V7.0.1 类中查找未定义的常量。

WSAS 附带了一个名为 WebSphere MQ JCA 资源适配器 (WMQ RA) 的组件。它处理与 MQ 队列管理器的所有通信,并支持 JMS API 类和 Java API 类(尽管应尽可能使用前一种)。尽管 WSAS V7.0 附带了 WMQ V7.0.1 Java 客户端类的一个版本,但它们不能用于任何版本的队列管理器。 WSAS 使 WMQ RA 中 JMS/Java 类的所有 MQ 类可供已部署的应用程序使用。

因此,解压您的 .war 应用程序,删除其中的 MQ Java 客户端 jar,重新打包、重新部署,然后重试。

希望这有帮助!

关于java - IBM MQ - NoSuchMethodError - getQmgrSplCapability(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665385/

相关文章:

java - 如何通过 Selenium WebDriver 使用 ChromeOptions 禁用通知

java - QuickFIX/J 组与组件

ibm-mq - 对多个 MQ 消息使用一个消息句柄会导致内存泄漏吗?

ibm-mq - 可以创建 Websphere Queue Manager 但不能连接

deployment - Websphere 7 集群部署

java - JSF 没有 session 超时。有什么缺点?

jakarta-ee - Spring `jms:listener-container` 和 IBM MQ 回退队列

java - 使用 Guice 在对象图中构建特定类

java - 在循环中启动一个线程

vb.net - MQQueueManager 构造函数抛出 FileNotFoundException