【问题标题】:Upgrade of Java 8 and MQ - NoClassDEfFoundErrorJava 8 和 MQ 升级 - NoClassDEfFoundError
【发布时间】:2022-01-29 06:04:40
【问题描述】:

我们最近将代码升级到了 Java 8。作为其中的一部分,MQ 也升级到了 MQ 9。我们之前使用了两个组件 jms(7.0.1.6) 和 jmqi(7.0.1.6)。 现在我们用 MQ 9.0.0.0 JAR 的 allclient 和 tracecontrol 替换了这两个 jar。

2017-10-24 02:30:07 INFO  server.SqlService<start:29> -  SQL
Exception in thread "main" java.lang.NoClassDefFoundError: javax/jms/JMSRuntimeException
    at com.ibm.mq.jms.MQDestination.<clinit>(MQDestination.java:71)
    at com.epo.core.server.config.LdapConfig.getQueue(LdapConfig.java:213)
    at com.epo.core.server.MqService.start(MqService.java:77)
    at com.epo.core.service.ServiceGroup.start(ServiceGroup.java:90)
    at com.epo.core.service.ServiceGroup.startAll(ServiceGroup.java:76)
    at com.epo.core.service.ServiceGroup.start(ServiceGroup.java:70)
    at com.epo.server.dispatcher.DispatcherProcess.initializeServices(DispatcherProcess.java:380)
    at com.epo.server.dispatcher.DispatcherProcess.run(DispatcherProcess.java:320)
    at com.epo.server.dispatcher.DispatcherProcess.main(DispatcherProcess.java:200)
Caused by: java.lang.ClassNotFoundException: javax.jms.JMSRuntimeException
    at java.net.URLClassLoader.findCl`enter code here`ass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 9 more

请告诉我为什么收到NoClassDefFoundError

【问题讨论】:

  • 请注意,对于与 IBM MQ 产品相关的问题,您应该使用 [ibm-mq] 标签而不是 [mq] 标签,我已经编辑了您的问题并将 [mq] 替换为 [ibm-mq ]

标签: java ibm-mq


【解决方案1】:

你得到了异常:

java.lang.ClassNotFoundException: javax.jms.JMSRuntimeException

因为您的类路径中没有 JMS v2.0 jar。您可能仍在使用 JMS v1.1 jar。

查看您的应用程序如何配置其 Java 类路径以纠正问题。

请注意,如果您没有复制 MQ 客户端库,而只是从真正的 MQ 客户端安装中引用 Java classapth 上的 com.ibm.mq.allclient.jar 文件,则不会出现此问题,因为JMS v2.0 jar 将与 allclient jar 一起存在于 MQ_INSTALLATION_DIR/java/lib 目录中,并且会被自动拉入。

【讨论】:

  • @a _conish_pasty 感谢您的回复。我添加了 javax.jms-api 2.0.1 版本。但是现在 classnotfounderror 不会出现。
  • 现在我收到以下错误 com.ibm.msg.client.jms.DetailedJMSSecurityException=com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was为具有连接模式“客户端”和主机名“W-******”的 QueueManager“****”提供。
  • @SindhuriDevatha 新错误是另一个不相关的问题,应该作为新问题提出。如果您认为任一答案都可以帮助您解决收到的NoClassDefFoundError 发现错误,请接受其中一个。然后我建议在 StackOverflow 上搜索新错误,因为我确信有几个不同的问题可以解决这个问题。如果找不到,请发布与您的新错误相关的新问题。
【解决方案2】:

如 a_cornish_pasty 所述,您可能缺少 jms.jar 或拥有旧版本。

对于 IBM MQ Classes for JMS,您可以在 IBM MQ v9 知识中心页面“What is installed for IBM MQ classes for JMS”上找到所需的文件列表:

可重定位的 JAR 文件
在企业内部,可以将以下文件移动到需要为 JMS 运行 IBM MQ 类的系统中:

  • com.ibm.mq.allclient.jar
  • com.ibm.mq.traceControl.jar
  • jms.jar
  • fscontext.jar
  • providerutil.jar
  • Bouncy Castle 安全提供程序和 CMS 支持 jars

如果您的应用程序使用文件系统上下文执行 JNDI 查找,则需要 fscontext.jar 和 providerutil.jar 文件。

需要 Bouncy Castle 安全提供程序和 CMS 支持 jar 文件。有关更多信息,请参阅对非 IBM JRE 的支持。

请注意,只有com.ibm.mq.allclient.jarjms.jar 和 Bouncy Castle 安全提供程序和 CMS 支持 jar 包含在 Redistributable 客户端中,但所有这些 jar 都包含在 Java All 客户端中。您也在运行 9.0.0.0,我建议您转到 9.0.0.2。您可以在 Fix Central 上找到 Redistributable 和 Java All 客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 2014-06-09
    • 2015-12-20
    • 1970-01-01
    • 2017-07-24
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多