spring - jms 连接工厂 javax.naming.NamingException : Could not create resource factory instance

标签 spring tomcat ibm-mq jndi

您好,我正在尝试从 Tomcat 8 连接 WebSphere IBM MQ 7.5.0.7 连接工厂。启动 tomcat 服务器时,我们加载 spring XML,从中我们连接到 IBM MQ 连接工厂。

下面是spring xml中的代码。

<bean name="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="java:comp/env/JMS/QFX_PF1UATMQCF" />
        </bean>

Tomcat 中 Context.xml 中的代码。

<Resource name="JMS/QFX_PF1UATMQCF"
        auth="Container"
        type="com.ibm.mq.jms.MQQueueConnectionFactory"
        factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
        description="JMS Queue Connection Factory for sending messages"
        HOST="some hostname"
        PORT="1425"
        CHAN="SYSTEM.DEF.SVRCONN"
        TRAN="1"
        QMGR="EUQFXP7A"/>   

下面是我在启动 tomcat 时遇到的异常。

 Cannot resolve reference to bean 'jmsConnectionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory' defined in class path resource : Invocation of init method failed; nested exception is javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.NoClassDefFoundError: javax/jms/JMSException]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)

最佳答案

您至少需要将以下 JAR 文件复制到 Tomcat(例如 $CATALINA_BASE/lib):

正如@JoshMc 提到的,您不应该再使用 MQ 7.5。

启动 Tomcat 时,您可能会在 catalina.log 中看到 WARNING 消息,如下所示:

24-Feb-2018 22:06:40.473 WARNING [localhost-startStop-1] org.apache.tomcat.util.scan.StandardJarScanner.processURLs Failed to scan [file:.../lib/jms.jar] from classloader hierarchy
 java.io.FileNotFoundException: .../lib/jms.jar (The system cannot find the file specified)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:219)

您可以通过将 MQ jar 添加到 catalina.properties 中的 tomcat.util.scan.StandardJarScanFilter.jarsToSkip 属性来消除这些警告。

关于spring - jms 连接工厂 javax.naming.NamingException : Could not create resource factory instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48947349/

相关文章:

java - 带有 Spring Security 的 AspectJ

java - 在JSP中调用Spring bean方法

java - 为什么我的OpenGrok全搜索总是出不到结果?

java - Tomcat 安装目录无效。它缺少预期的文件或文件夹 lib/jasper-el.jar

php - 安装 mqseries PHP 时出现问题 - Ubuntu

version - 最新的 WebSphere MQ 客户端版本是什么?

java - 收到的 COD 的关联 ID 和正文为空

java - 哪个相当于reactor.netty.http.server包中的旧方法startAndAwait?

java - 使用环境变量作为 CATALINA_HOME 的属性占位符

maven - Jersey Web 应用程序的 Docker 镜像