【问题标题】:IBM MQ - NoSuchMethodError - getQmgrSplCapability()IBM MQ - NoSuchMethodError - getQmgrSplCapability()
【发布时间】:2016-10-06 12:44:31
【问题描述】:

我正在使用 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 配置的一些问题吗?我知道这不是很多信息,但我只是在寻找解决此类问题的正确方向。

任何帮助将不胜感激。

【问题讨论】:

  • 很难说你想做什么。将您的 servlet 中的代码添加到问题中。一般来说,你不应该在你的应用程序中打包 MQ 相关的 jars 并使用 JNDI 来查找 MQ 资源和 JMS API 来发送/接收消息。

标签: java ibm-mq websphere-7


【解决方案1】:

这里的问题很简单。您已经在应用程序中捆绑了 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,重新打包、重新部署并重试。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我在使用骆驼和 IBM MQ 时遇到了同样的问题,与我在项目中导入的版本相比,我使用了一个自定义的内部 jar,它导入了不同的 ibm mq 版本。将版本与依赖 jar 对齐,这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2012-12-02
      • 2017-05-30
      • 2020-09-29
      • 2021-08-02
      相关资源
      最近更新 更多