方法1:第三方消息提供者不同的JMS提供
我使用WebSphere Application Server 8.5.5,我通過如link1和link2提到創建
我JMS provider
配置的隊列
(在classpath中:我使用了fscontext jar和require所需的ibm jms jars和)。 QueueConnectionFactory
與我的jms提供商。
在應用程序中,我使用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");
}
}
我在line 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.
爲什麼你不能使用WebSphere MQ消息提供?這是配置WAS訪問MQ的受支持方式。 – Alasdair
建議在我的要求中使用way1而不要使用WebSphere MQ消息傳遞提供程序。任何想法,爲什麼它不是在工作1,請?? –
那麼您想使用哪種JMS提供程序?你是否在類路徑上有JAR? –