Camel应用程序在关闭会话后尝试使用JMS会话

时间:2017-02-05 23:08:29

标签: jboss apache-camel activemq ibm-mq

我是骆驼的新手,我正在尝试在JBoss EAP 7上编写一个桥接Websphere MQ和Active MQ的应用程序。应用程序部署成功,我可以在Websphere队列中删除消息,并且它会被Active接收MQ。但是,我在日志中看到错误消息,表明它在打开后尝试使用连接。

15:48:57,814 ERROR [org.jboss.jca.core.connectionmanager.listener.TxConnectionListener] (Camel (camel) thread #1 - JmsConsumer[I0_TEST]) IJ000315: Pool IbmMQQueueFactory has 1 active handles
15:48:57,819 INFO  [org.jboss.as.connector.deployers.RaXmlDeployer] (Camel (camel) thread #1 - JmsConsumer[I0_TEST]) wmq.jmsra.rar: MQJCA4016:Unregistered connection handle being closed: 'com.ibm.mq.connector.outbound.ConnectionWrapper@214da401'.
15:49:02,819 WARN  [org.apache.camel.component.jms.DefaultJmsMessageListenerContainer] (Camel (camel) thread #1 - JmsConsumer[I0_TEST]) Setup of JMS message listener invoker failed for destination 'I0_TEST' - trying to recover. Cause: Local JMS transaction failed to commit; nested exception is com.ibm.msg.client.jms.DetailedIllegalStateException: MQJCA1020: The session is closed.
The application attempted to use a JMS session after it had closed the session.
Modify the application so that it closes the JMS session only after it has finished using the session.

这是我的applicationContext.xml

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/ConnectionFactory" />
    <property name="lookupOnStartup" value="false" />
    <property name="cache" value="true" />
    <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>

<bean id="jmsTransactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="java:/TransactionManager" />
</bean>

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="jmsConnectionFactory" />
    <property name="transacted" value="true" />
    <property name="transactionManager" ref="jmsTransactionManager" />
</bean>

<bean id="wmqConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/jms/IbmMQMsgQCF" />
    <property name="lookupOnStartup" value="false" />
    <property name="cache" value="true" />
    <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>

<bean id="wmqTransactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="java:/TransactionManager" />
</bean>

<bean id="wmq" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="wmqConnectionFactory" />
    <property name="transacted" value="true" />
    <property name="transactionManager" ref="wmqTransactionManager" />
</bean>


<bean id="routerlogger" class="org.jboss.as.quickstarts.mdb.RoutLogger" />

<camelContext trace="true" id="camel"
    xmlns="http://camel.apache.org/schema/spring">

    <route>
        <from uri="wmq:websphereQueue"/>
        <setExchangePattern pattern="InOnly"/>
        <to uri="jms:activeQueue" pattern="InOnly" />
    </route>
</camelContext>

它是一个简单的应用程序,试图确定我缺少的东西。

1 个答案:

答案 0 :(得分:1)

我发现了这个JBossDeveloper错误&#34; JBEAP-2344: UserTransaction commit(), rollback() closes connection in Websphere MQ 7.5&#34;看起来它描述了您的问题,并有评论指向文档更新&#34; JBEAP-3535: Documentation: Add note about connection close on commit() and rollback() to Deploy the WebSphere MQ Resource Adapter subchapter&#34;。

  

请你添加一个注释,设置tracking="false",解决   WebSphere MQ 7.5和8的问题,其中方法为commit()或   UserTransaction上的rollback()关闭所有的JMS连接   这笔交易的一部分。这部分与已知的记录有关   WebSphere MQ的限制   JBEAP-3142