【问题标题】:Different JMS providers in Websphere and JMSWebsphere 和 JMS 中的不同 JMS 提供程序
【发布时间】:2017-11-24 19:30:03
【问题描述】:

方式 1:第三方消息传递提供商

我使用 Websphere 应用程序服务器 8.5.5,并通过创建配置队列
我在link1link2 中提到的JMS provider

(在类路径中:我使用 fscontext jar 并需要所需的 ibm jms jar 和)。 QueueConnectionFactory 与我的 jms 提供商。

在应用程序中,我使用 jms 将消息放入队列。

  @Resource(lookup = "jms/ConnectionFactory")
  private static QueueConnectionFactory connectionFactory;

  @Resource(lookup = "jms/Queue")
  private static Queue queue;

  public void putMessagesToQueue() {                                                                   
  try {
     // create a queue connection
     QueueConnection queueConn = connFactory.createQueueConnection();
     ......... 
  } catch(JMSException exp) {
       // Handle this exception
   } finally {      
        if(queueConn != null) {                                                     
             // close the queue connection
            queueConn.close();
        } else {
          System.out.println("Queue connection is null");
        }
   }

我在 connFactory.createQueueConnection() 行收到以下异常。我看到最后一个块中的 sysout 被打印为“队列连接为空”。

例外:

javax.jms.JMSException: Failed to create queue connection
    at com.ibm.ejs.jms.JMSCMUtils.mapToJMSException(JMSCMUtils.java:140) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle.createQueueConnection(JMSQueueConnectionFactoryHandle.java:91) ~[com.ibm.ws.runtime.jar:na]

getLinkedException()=javax.resource.spi.ResourceAllocationException: Expected QueueConnectionFactory

Caused by: java.lang.ClassCastException: com.ibm.mq.jms.MQConnectionFactory incompatible with javax.jms.QueueConnectionFactory
    at com.ibm.ejs.jms.JMSManagedQueueConnection.createConnection(JMSManagedQueueConnection.java:157) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.jms.JMSManagedConnection.<init>(JMSManagedConnection.java:352) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.jms.JMSManagedQueueConnection.<init>(JMSManagedQueueConnection.java:72) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.jms.GenericJMSManagedQueueConnectionFactory.createManagedConnection(GenericJMSManagedQueueConnectionFactory.java:92) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.jms.JMSManagedConnectionFactory.createManagedConnection(JMSManagedConnectionFactory.java:687) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.j2c.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:2160) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1838) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3816) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3092) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1548) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:1031) ~[com.ibm.ws.runtime.jar:na]
    at com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle.createQueueConnection(JMSQueueConnectionFactoryHandle.java:85) ~[com.ibm.ws.runtime.jar:na]

方式 2:WebSphere MQ 消息传递提供程序

我在应用程序中使用相同的代码将消息放入队列,但使用不同的提供者(WebSphere MQ messaging provider),并使用该提供者和队列管理器、主机名、端口和我在@987654328 中添加的所有详细信息创建了队列连接工厂@。

在这种情况下,我看不到任何错误,并且我能够成功写入队列。

问题:

为什么它不能以方式 1 工作?我需要以方式 1 而非方式 2 工作。

【问题讨论】:

  • 为什么不能使用 WebSphere MQ 消息传递提供程序?这是配置 WAS 访问 MQ 的受支持方式。
  • 建议在我的要求中使用 way1 而不是使用 WebSphere MQ 消息传递提供程序。知道为什么它不能以方式 1 工作吗??
  • 那么您想使用哪个 JMS 提供程序?你在类路径上有相应的 JAR 吗?
  • 我想使用方式1中描述的那个,我还在类路径中添加了所有的jar
  • 我知道您想使用方式 1,但是如果您正在与 IBM MQ 交谈,为什么您需要使用不受支持的机制而不是完全受支持的机制?

标签: jakarta-ee jms ibm-mq websphere-8


【解决方案1】:

基于来自 OP @AlagammalP 的 cmets,将非 IBM MQ 提供的 providerutil.jar 和 fscontext.jar 添加到类路径中。

WAS (Websphere Application Server) 附带 IBM MQ 资源适配器,其中包括这些。

删除非 IBM MQ 提供的 providerutil.jar 和 fscontext.jar,它们已添加到类路径中,因为它们会导致您的问题:

Caused by: java.lang.ClassCastException: com.ibm.mq.jms.MQConnectionFactory incompatible with javax.jms.QueueConnectionFactory

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2018-10-13
    • 2015-11-23
    • 2015-05-25
    • 2015-01-25
    • 2023-03-29
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多