2017-06-21 21 views
0

ウェイ1:サードパーティ製のメッセージング・プロバイダー異なるJMSプロバイダ

私はのWebSphere Application Server 8.5.5を使用してlink1link2で述べたように、私は
JMS providerを作成することにより、キューを構成し

(クラスパスでは、私はfscontext jarを使用し、必須のibm jms jarsとが必要です)。私のjmsプロバイダに QueueConnectionFactory

アプリケーションでは、jmsを使用してmeesagesをキューに入れます。

@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で作業する必要があります。

+0

を?それがMQへのWASアクセスを構成するためのサポートされた方法です。 – Alasdair

+0

way1を使用し、WebSphere MQメッセージング・プロバイダーを使用しないことが必要です。なぜそれがway1で動作していないすべてのアイデア、してください? –

+0

どのJMSプロバイダを使用しますか?あなたはクラスパス上のJARを持っていますか? –

答えて

1

OP @ AlagammalPのコメントに基づいて、IBM MQ以外のプロバイダ提供のproviderutil.jarおよびfscontext.jarがクラスパスに追加されました。

WAS(Websphere Application Server)には、これらを含むIBM MQリソースアダプタが付属しています。

外し非IBM MQは、彼らはあなたの問題を引き起こしているように、クラスパスに追加されたproviderutil.jarとfscontext.jar供給:なぜあなたは、WebSphere MQメッセージング・プロバイダーを使用することはできません

Caused by: java.lang.ClassCastException: com.ibm.mq.jms.MQConnectionFactory incompatible with javax.jms.QueueConnectionFactory 
関連する問題