ウェイ1:サードパーティ製のメッセージング・プロバイダー異なるJMSプロバイダ
私はのWebSphere Application Server 8.5.5を使用してlink1とlink2で述べたように、私は
私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で作業する必要があります。
を?それがMQへのWASアクセスを構成するためのサポートされた方法です。 – Alasdair
way1を使用し、WebSphere MQメッセージング・プロバイダーを使用しないことが必要です。なぜそれがway1で動作していないすべてのアイデア、してください? –
どのJMSプロバイダを使用しますか?あなたはクラスパス上のJARを持っていますか? –