【发布时间】:2017-11-24 19:30:03
【问题描述】:
方式 1:第三方消息传递提供商
我使用 Websphere 应用程序服务器 8.5.5,并通过创建配置队列
我在link1 和link2 中提到的JMS provider
(在类路径中:我使用 fscontext jar 并需要所需的 ibm jms jar 和)。
QueueConnectionFactory 与我的 jms 提供商。
在应用程序中,我使用 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),并使用该提供者和队列管理器、主机名、端口和我在@987654328 中添加的所有详细信息创建了队列连接工厂@。
在这种情况下,我看不到任何错误,并且我能够成功写入队列。
问题:
为什么它不能以方式 1 工作?我需要以方式 1 而非方式 2 工作。
【问题讨论】:
-
为什么不能使用 WebSphere MQ 消息传递提供程序?这是配置 WAS 访问 MQ 的受支持方式。
-
建议在我的要求中使用 way1 而不是使用 WebSphere MQ 消息传递提供程序。知道为什么它不能以方式 1 工作吗??
-
那么您想使用哪个 JMS 提供程序?你在类路径上有相应的 JAR 吗?
-
我想使用方式1中描述的那个,我还在类路径中添加了所有的jar
-
我知道您想使用方式 1,但是如果您正在与 IBM MQ 交谈,为什么您需要使用不受支持的机制而不是完全受支持的机制?
标签: jakarta-ee jms ibm-mq websphere-8