【发布时间】:2015-08-12 11:04:30
【问题描述】:
目前我们使用 JNDI 的 Tomcat 配置是基于这个目前正在运行的建议。
How do I connect to a Websphere MQ (MQ Series) server using JMS and JNDI?
由于我们正在升级到 v8,因此我想利用 JMS 2.0 功能。这需要将 jar 文件更新为 JMS 2.0 版本。
所以我从 tomcat lib 文件夹中删除了以下 jar。
- com.ibm.mq.jar
- com.ibm.mqjms.jar
- connector.jar
- dhbcore.jar
- geronimo-j2ee-management_1.0_spec-1.0.jar
- geronimo-jms_1.1_spec-1.0.jar
并用这些罐子代替它们。基于此link
- com.ibm.mq.allclient.jar
- com.ibm.mq.traceControl.jar
我的 JNDI 配置与此配置匹配。
<Resource
name="jms/MyQCF"
auth="Container"
type="com.ibm.mq.jms.MQQueueConnectionFactory"
factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
description="JMS Queue Connection Factory for sending messages"
HOST="<mymqserver>"
PORT="1414"
CHAN="<mychannel>"
TRAN="1"
QMGR="<myqueuemanager>"/>
现在有了更新的 jar 文件,我得到了以下异常。
Caused by: java.lang.NoClassDefFoundError: javax/jms/JMSRuntimeException
at com.ibm.mq.jms.MQQueueConnectionFactoryFactory.getObjectInstance(MQQueueConnectionFactoryFactory.java:69)
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.NamingContextBindingsEnumeration.nextElementInternal(NamingContextBindingsEnumeration.java:117)
at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:71)
at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:34)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:138)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:110)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.lifecycleEvent(GlobalResourcesLifecycleListener.java:82)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:724)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
问题:
我应该在类路径中包含另一个 jar 文件吗?
或者 v8 的 JNDI 配置是否发生了变化?
【问题讨论】:
-
尝试添加在 MQ 安装中找到的 jms.jar。
-
Umapathy 似乎 jms.jar 有所帮助。在您的 tomcat 设置中,您是否只包含 jms.jar 和 com.ibm.mq.allclient.jar?
-
是的,它们是唯一用于 tomcat jms 客户端的 jars。