TomEE中的Spring持久JMS订阅者(不允许在已使用的连接上设置clientID)



我正在将一个在TomEE 7上运行的应用程序更新到TomEE 8,在此过程中,我们开始收到有关Spring消息侦听器容器的错误。TomEE 8运行Apache Active MQ 5.16,而TomEE 7运行Apache Active MQ 5.15.13。

在Spring中,我们通过JNDI查找获得连接工厂,该查找在tomee.xml中定义,如下所示

<tomee>
<Connector id="resources/jms/ConnectionFactory" type="javax.jms.ConnectionFactory">
ResourceAdapter=ActiveMQResourceAdapter
TransactionSupport xa
PoolMaxSize 10
PoolMinSize 0
ConnectionMaxWaitMilliseconds 15000
ConnectionMaxIdleMinutes 15
MaxSessions=5
</Connector>
<Resource id="ActiveMQResourceAdapter" type="ActiveMQResourceAdapter">
BrokerXmlConfig=xbean:file:conf/activemq.xml
ServerUrl=tcp://localhost:61616
</Resource>
</tomee>

在Spring中,我们得到如下的连接工厂

<jee:jndi-lookup id="jmsFactory" jndi-name="jms/ConnectionFactory" expected-type="javax.jms.ConnectionFactory" />

DefaultMessageListenerContainers的配置如下

<jms:listener-container container-type="default" connection-factory="jmsFactory" client-id="clientId" cache="connection" destination-type="durableTopic" transaction-manager="transactionManager">
<jms:listener id="responses" destination="response" ref="msgHandler" />
</jms:listener-container>

这一切都在TomEE 7上工作,然而,现在我们已经移动到TomEE 8,我们的DefaultMessageListenerContainers抛出以下异常

[org.springframework.jms.listener.DefaultMessageListenerContainer] - Could not refresh JMS Connection for destination 'response' - retrying using FixedBackOff{interval=5000, currentAttempts=9, maxAttempts=unlimited}. Cause: Setting clientID on a used Connection is not allowed

显然,我们正在做一些不正确的更新,什么是正确的方式来配置DMLC持久主题与JTA管理的事务?

经过进一步测试后,我发现问题与tomee.xml中连接工厂上配置的最大池大小有关。提高这个数字,我就能解决这个问题了。

最新更新