方式1:第三方消息提供商
我使用Websphere application Server 8.5.5并通过创建
来配置队列
我在link1和link2
JMS provider
(在类路径中:我使用了fscontext jar和必需的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");
}
}
我在connFactory.createQueueConnection()行获得了以下异常。我看到最后一个块中的sysout被打印为“Queue connection is null”。
例外:
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 :(得分:1)
根据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