簡體   English   中英

Websphere和JMS中的不同JMS提供程序

[英]Different JMS providers in Websphere and JMS

方法1:第三方消息傳遞提供程序

我使用Websphere Application Server 8.5.5,並通過創建隊列來配置
link1link2中提到的我的JMS provider

(在classpath中:我在其中使用fscontext jar並需要必需的ibm jms jars和)。 我的jms提供程序使用QueueConnectionFactory

在應用程序中,我使用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 ),並使用該提供程序和隊列管理器,主機名,端口以及我在QueueConnectionFactory添加的所有詳細信息創建了隊列連接工廠。

在這種情況下,我看不到任何錯誤,並且可以成功寫入隊列。

題 :

為什么它不能以方式1運作? 我需要以方式1而不是以方式2進行工作。

根據來自OP @AlagammalP的注釋,將非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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM