使用JNDI在Tomcat上设置WMQ V8连接工厂

时间:2015-05-29 14:19:45

标签: tomcat jms ibm-mq

目前我们使用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的配置?

1 个答案:

答案 0 :(得分:3)

请执行 NOT 尝试添加MQ安装中找到的JMS Jar。 IBM从v8.0开始重新打包JMS,以便现在支持独立安装jar文件。但是,只有当你使用完整且完整的罐子套装并且不要随心所欲地混合和匹配它们时。这样做会是鲁莽和不明智的。

你走在正确的轨道上,但为了你的目的,我会从the latest 8.0.0.x MQ Client Fix Pack获取文件。然后我会去the Technote that explains the install procedure尝试一下。

Screen shot showing new v8.0 MQ "Java All" distribution package.

我确信IBM有一个从服务器安装中抓取罐子的过程,但是由于这些看起来是不同的包装,我将我的钱放在设计和测试独立交付的包装上 - 例如我上面提到的那个。

顺便说一句,因为现在支持它,如果它不起作用,你可以打开PMR,告诉IBM你按照他们的指示写信,然后让他们一起修复它。 (然后在这里发布修复它的内容。)但是如果你只是抓住随机的jar文件并希望它能够正常工作,他们就不会这样做。