目前,我们的 Tomcat 配置 JNDI 是基于当前有效的此建议。
如何使用 JMS 和 JNDI 连接到 Websphere MQ(MQ 系列)服务器? http://wiki.apache.org/tomcat/HowTo#How_do_I_connect_to_a_Websphere_MQ_.28MQ_Series.29_server_using_JMS_and_JNDI.3F
由于我们要升级到 v8,我想利用 JMS 2.0 功能。这需要将 jar 文件更新到 JMS 2.0 版本。
所以我从 tomcat lib 文件夹中删除了以下 jar。
- com.ibm.mq.jar
- com.ibm.mqjms.jar
- 连接器.jar
- dhbcore.jar
- geronimo-j2ee-management_1.0_spec-1.0.jar
- geronimo-jms_1.1_spec-1.0.jar
并用这些罐子代替它们。以此为基础link http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q030590_.htm
- 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 配置是否发生了变化?
请这样做NOT尝试添加在 MQ 安装中找到的 JMS Jar。 IBM 自 v8.0 起重新打包了 JMS,因此现在支持 jar 文件的独立安装。但前提是您使用完整且完整的罐子组,并且不要随心所欲地混合搭配它们。这样做是鲁莽且不明智的。
你走在正确的轨道上,但为了你的目的,我会去抓取文件。然后我会去解释安装过程的技术说明 http://www-01.ibm.com/support/docview.wss?uid=swg21683398并尝试一下。
我确信 IBM 有一个从服务器安装中获取 jar 的流程,但是由于这些包的打包方式似乎有所不同,所以我会把钱花在为独立交付而设计和测试的包上 - 例如我上面链接的那个。
顺便说一句,由于现在支持此功能,如果它不起作用,您可以打开 PMR,告诉 IBM 您严格按照他们的说明进行操作,并让他们与您一起修复它。 (然后在这里发布修复它的内容。)但如果你只是随机抓取 jar 文件并希望它能起作用,他们就不会这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)