[
https://issues.apache.org/activemq/browse/AMQ-2034?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=48698#action_48698
]
Gary Tully commented on AMQ-2034:
---------------------------------
moving the close to session breaks a few unit tests, The TopicTransacted tests.
I get 6 failures & 3 errors on a activemq-core test run.
eg: JmsTopicTransactionTest.testSendSessionClose() verifies that session.close
rollbacks the un committed local transaction, but with the change, the
transaction is never committed.
Only registering the sync on close if the transaction is XA resolved the issue.
As in, the transaction is externally controlled so the transaction completion
is out of the control of the session.
It is correct unmanaged JMS behavior so I think the unit tests are correct.
Will this break the tck?
> consumer close with active XA transaction results in
> java.lang.IllegalArgumentException: The subscription does not exist: ...
> -----------------------------------------------------------------------------------------------------------------------------
>
> Key: AMQ-2034
> URL: https://issues.apache.org/activemq/browse/AMQ-2034
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.2.0
> Environment: XA spring-jms consumer.close before XA transaction
> completion
> Reporter: Gary Tully
> Assignee: Gary Tully
> Fix For: 5.3.0
>
>
> consumer.close removes consumer from broker, later xa transaction commit
> results in exception as beforeEnd ack of messages fails with IllegalState:
> {code}
> javax.jms.JMSException: The subscription does not exist:
> ID:XXXX.dd-52108-1229084857402-0:37:13:1
> at
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
> at
> org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1692)
> at
> org.apache.activemq.ActiveMQConnection$2$1.run(ActiveMQConnection.java:1637)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: java.lang.IllegalArgumentException: The subscription does not
> exist: ID:XXXX.dd-52108-1229084857402-0:37:13:1
> at
> org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:364)
> at
> org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
> at
> org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
> at
> org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:73)
> at
> org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:84)
> at
> org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:442)
> at org.apache.activemq.command.MessageAck.visit(MessageAck.java:196)
> at
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:291)
> at
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:179)
> at
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
> at
> org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:143)
> at
> org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:206)
> at
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> at
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:196)
> at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:183)
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.