Java 8和MQ的升级 - NoClassDEfFoundError

时间:2017-10-25 11:44:10

标签: java ibm-mq

我们最近将代码升级到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

2 个答案:

答案 0 :(得分:0)

你得到了例外:

driver.get("automationpractice.com/index.php"); driver.findElement(By.linkText("Sign in")).click(); driver.findElement(By.id("email_create")).sendKeys("test@te‌​st.com"); driver.findElement(By.id("SubmitCreate")).click(); //driver.findElement(By.name("firstname")).sendKeys("dsdsd"‌​); driver.findElement(By.name("customer_firstname")).sendKeys(‌​"sadsa"); 

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

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

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

答案 1 :(得分:0)

如a_cornish_pasty所述,您可能错过了jms.jar或者有旧版本。

对于 IBM MQ Jlasses for JMS ,您可以在IBM MQ v9知识中心页面上找到所需文件列表&#34; What is installed for IBM MQ classes for JMS&#34;:

  

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

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

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

     

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

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