2017-06-21 73 views
0

方法1:第三方消息提供者不同的JMS提供

我使用WebSphere Application Server 8.5.5,我通过如link1link2提到创建
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.

+0

为什么你不能使用WebSphere MQ消息提供?这是配置WAS访问MQ的受支持方式。 – Alasdair

+0

建议在我的要求中使用way1而不要使用WebSphere MQ消息传递提供程序。任何想法,为什么它不是在工作1,请?? –

+0

那么您想使用哪种JMS提供程序?你是否在类路径上有JAR? –

回答

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