Upgrade of Java 8 and MQ - NoClassDEfFoundError

左心房为你撑大大i 提交于 2019-12-23 02:32:56

问题


we recently upgraded our code to Java 8. As part of it MQ was also upgraded to MQ 9. We are using two components jms(7.0.1.6) and jmqi(7.0.1.6) earlier. Now we replaced both the jars with allclient and tracecontrol of MQ 9.0.0.0 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

Please let me know why I am getting NoClassDefFoundError.


回答1:


You're getting the exception:

java.lang.ClassNotFoundException: javax.jms.JMSRuntimeException

because you don't have the JMS v2.0 jar on your classpath. You're probably still using the JMS v1.1 jar.

Look at how your application configures its Java classpath to correct the issue.

Note that if you didn't copy the MQ client libraries around, and just referenced the com.ibm.mq.allclient.jar file on the Java classapth from a real MQ client install, you wouldn't have this problem as the JMS v2.0 jar will exist alongside the allclient jar in the MQ_INSTALLATION_DIR/java/lib directory and would be pulled into auto-magically.




回答2:


As stated by a_cornish_pasty you are likely missing the jms.jar or have an older version.

For IBM MQ Classes for JMS you can find the list of files required on the IBM MQ v9 Knowledge Center page "What is installed for IBM MQ classes for JMS":

Relocatable JAR files
Within an enterprise, the following files can be moved to systems that need to run IBM MQ classes for JMS:

  • com.ibm.mq.allclient.jar
  • com.ibm.mq.traceControl.jar
  • jms.jar
  • fscontext.jar
  • providerutil.jar
  • The Bouncy Castle security provider and CMS support jars

The fscontext.jar and providerutil.jar files are required if your application performs JNDI lookups using a file system context.

The Bouncy Castle security provider and CMS support jar files are required. For more information, see Support for non-IBM JREs.

Note that only com.ibm.mq.allclient.jar, jms.jar, and the Bouncy Castle security provider and CMS support jars are included in the Redistributable client, but all are included in Java All client. You are also running 9.0.0.0 and I would recommend you go to 9.0.0.2. You can find both the Redistributable and Java All clients on Fix Central.



来源:https://stackoverflow.com/questions/46931561/upgrade-of-java-8-and-mq-noclassdeffounderror

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!