java - 实例化 MQ ConnectionFactory 对象时出错

标签 java tomcat spring-boot ibm-mq mq

首先,我要为这里写得有点乱而道歉。我正在编写一个 Spring Boot 应用程序来从 MQ 队列读取消息。但是在尝试创建 MQXAConnectionFactory 对象的实例时遇到异常。我意识到这是因为 MQXAConnectionFactory 扩展了 com.ibm.msg.client.jms.admin.JmsJndiConnectionFactoryImpl

代码片段

    @Value("${ems.mq.cf.hostName}")
    String mqHostName;
    @Value("${ems.mq.cf.port}")
    int mqPort;
    @Value("${ems.mq.cf.queueManager}")
    String mqQueueManager;
    @Value("${ems.mq.cf.channel}")
    String mqChannel;

    private ConnectionFactory mqJmsConnectionFactory() throws JMSException{

    try {

    MQXAConnectionFactory factory=new MQXAConnectionFactory();
    factory.setHostName(mqHostName);
    factory.setPort(mqPort);
    factory.setQueueManager(mqQueueManager);
    factory.setChannel(mqChannel);
    factory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
    return factory;
    }
    catch (JMSException e){
        throw new RuntimeException(e);
    }

}

问题是我在类路径上设置的任何 jar 上都不存在 com.ibm.msg.client.jms.admin 包。 IBM 网站中建议的解决方案如下所示,也没有帮助。

The type com.ibm.msg.client.jms.admin.JmsJndiDestinationImpl
cannot be resolved. It is indirectly referenced from required .class files.

本地修复

 Import the com.ibm.msg.client.jms.internal from
    wmq.jmsra.rar and add it to the build path.
    You can find the rar file under <WPS_HOME>\lib\WMQ\ra

但这对我来说不是一个选择,因为我使用的是本地 tomcat 服务器,并且将该文件放在我的类路径上对我来说不是一个选择。

以下 ibm jar 位于我的类路径中

1. mqjms-7.0.1.0.jar, 
2. ibm-mq-7.0.1.0.jar
3. client.osgi.jms.jar

任何有关此问题的帮助将不胜感激。合十礼

最佳答案

我终于找到问题所在了。 使用版本 6 或更早的 com.ibm.mq.jar 和 com.ibm.mqims.jar。

然后添加connector.jar 这似乎是最重要的。我从 mqseries.net 获得了这个解决方案来添加连接器 jar

http://www.mqseries.net/phpBB2/viewtopic.php?t=40546

由gaya3发布

请在构建路径中添加connector.jar,jta.jar(connector.jar在那里)(看起来connector.jar可能已损坏或不具有所有访问权限)

检查是否有访问权限

以下 jar 文件必须位于类路径中

  1. com.ibm.mq.jar
  2. com.ibm.mqims.jar
  3. connector.jar(重要)
  4. jms.jar

关于java - 实例化 MQ ConnectionFactory 对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795713/

相关文章:

java - spring boot连接池理解

java - 使用 Spring Boot 执行器安全关闭休息服务器?

java - 使用 HTTP OPTIONS 检索有关 REST 资源的信息

tomcat - Tomcat 上的 Grails - 如何记录原始 HTTP 请求/响应

java - Spring Boot应用程序错误

visual-studio - 关闭浏览器窗口时如何关闭本地tomcat服务器?

java - 在哪里可以找到特定于应用程序的 context.xml 文件?

java - Gradle 清理并复制 JAR 文件

java - 启动调试时出现空指针异常(无法实例化 Activity )。 IF 条件不好?

java - ProcessBuilder 向命令行添加额外的引号