redeliveryCounter not updated correctly when using XA transactions and Spring
-----------------------------------------------------------------------------
Key: AMQ-1593
URL: https://issues.apache.org/activemq/browse/AMQ-1593
Project: ActiveMQ
Issue Type: Bug
Affects Versions: 5.0.0
Environment: Mac OS X 10.4, Java 1.6 DP1
Reporter: Sven Panko
Attachments: activemq-redeliverytest.zip
When using ActiveMQ 5 in combination with XA, I noticed that redelivery of
messages is not correctly performed. I am using XA in combination with Spring's
DefaultMessageListenerContainer (DMLC) and have a simple test case in which the
MessageListener throws an IllegalStateException which triggers a transaction
rollback. After that, the message is redelivered, but unfortunately not as many
times as my redelivery policy specifies. I am using the following settings:
- maximumRedeliveries=3
- initialRedeliveryDelay=10
If I am not mistaken this means I should receive the message 4 times (once
initially and then three times redelivered), but I only get it three times.
When I log the messages I receive prior to throwing an ISE, I see the following
"inconsistency" with the redeliveryCounter: the initial message has a counter
value of 0, the first redelivery message has a counter value of 2 and the
second redelivery message has a counter value of 4. After that, I do not
receive an additional message.
I created a simple test case attached to this issue (a Maven 2 project) which
is configured with the above settings and shows the described behavior. In
order to run the test case, however, you need the Bitronix Transaction Manager
(v 1.2) in your local repository (since it is currently not listed in one of
the public repositories, you have to download it and put it manually into the
local repo). The download url is
http://dist.codehaus.org/btm/1.2/btm-dist-1.2.zip and installation is done by
unzipping the archive and using
mvn -Dfile=btm-1.2.jar -DgroupId=btm -DartifactId=btm -Dversion=1.2
-DgeneratePom=true -Dpackaging=jar install:install-file
to copy it to the repo.
Spring's DMLC is set to a cacheLevel of 0 (CACHE_NONE) if an external
transaction manager is used. If I change the cacheLevel to 2 (CACHE_SESSION)
then the correct number of messages is delivered and the counter is correctly
updated, so I am not sure whether this is an issue with ActiveMQ or Spring.
Anyways, I think I should not loose any messages if I use XA, regardless of the
cacheLevel setting...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.