You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Gary Tully (JIRA)" <ji...@apache.org> on 2008/12/11 14:09:05 UTC

[jira] Updated: (AMQ-2032) Redelivered messages to consumer skiped due to false duplicate detection on message rollback with Spring and cacheLevel=CACHE_NONE

     [ https://issues.apache.org/activemq/browse/AMQ-2032?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Tully updated AMQ-2032:
----------------------------

    Description: 
The failover default brokerUrl in 5.2 activates the message audit facility to catch possible duplicate message delivery in the event of failover. This mechanism can get in the way of message redelivery, particularly when sessions are closed and an automatic rollback kicks in.

Original user comment:
----
Redelivery of message fails after a rollback with Spring DMLC with cacheLevel=CACHE_NONE due to a bug in class : 'org.apache.activemq.ActiveMQMessageConsumer'. Redelivered messages are wrongly detected as duplicates. It fails to call 'rollbackDuplicates' on messages processed by consumer on rollback call on the consumer.

Sequence: ( See: http://fisheye1.atlassian.com/browse/springframework/spring/src/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java?r=1.14 )

    * Spring creates a transaction
    * Spring creates a JMS consumer
    * Spring give message to Application MessageListener class
    * Spring closes the consumer
    * Spring try to commit
    * Commit fails due to a RuntimeException thrown in Application MessageListener class
    * Spring marks the message as RollbackOnly
    * Spring rollbacks message


When ActiveMQ closes the consumer ( org.apache.activemq.ActiveMQMessageConsumer ), it clears 'deliveredMessages' list. But this list is needed in rollback method of ActiveMQMessageConsumer to rollback duplicates ! Then consumer cannot rollback duplicates on rollback if consumer is closed before rollback action. The only way I found, is to not clear 'deliveredMessages' list on close. It seems, there is no side effect, since after a call to 'close' method, the consumer is not used anymore.


  was:
The failover default brokerUrl in 5.2 activates the message audit facility to catch possible duplicate message delivery in the event of failover. This mechanism can get in the way of message redelivery, particularly when sessions are closed and an automatic rollback kicks in.

Original user comment:
----
Redelivery of message fails after a rollback with Spring DMLC with cacheLevel=CACHE_NONE due to a bug in class : 'org.apache.activemq.ActiveMQMessageConsumer'. Redelivered messages are wrongly detected as duplicates. It fails to call 'rollbackDuplicates' on messages processed by consumer on rollback call on the consumer.

Sequence: ( See: http://fisheye1.atlassian.com/browse/springframework/spring/src/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java?r=1.14 )

    * Spring creates a transaction
    * Spring creates a JMS consumer
    * Spring give message to Application MessageListener class
    * Spring closes the consumer
    * Spring try to commit
    * Commit fails due to a RuntimeException thrown in Application MessageListener class
    * Spring marks the message as RollbackOnly
    * Spring rollbacks message


Redelivery of message fails after a rollback with Spring DMLC with cacheLevel=CACHE_NONE due to a bug in class : 'org.apache.activemq.ActiveMQMessageConsumer'. Redelivered messages are wrongly detected as duplicates. It fails to call 'rollbackDuplicates' on messages processed by consumer on rollback call on the consumer. Sequence: ( See: http://fisheye1.atlassian.com/browse/springframework/spring/src/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java?r=1.14 )

    * Spring creates a transaction
    * Spring creates a JMS consumer
    * Spring give message to Application MessageListener class
    * Spring closes the consumer
    * Spring try to commit
    * Commit fails due to a RuntimeException thrown in Application MessageListener class
    * Spring marks the message as RollbackOnly
    * Spring rollbacks message

When ActiveMQ closes the consumer ( org.apache.activemq.ActiveMQMessageConsumer ), it clears 'deliveredMessages' list. But this list is needed in rollback method of ActiveMQMessageConsumer to rollback duplicates ! Then consumer cannot rollback duplicates on rollback if consumer is closed before rollback action. The only way I found, is to not clear 'deliveredMessages' list on close. It seems, there is no side effect, since after a call to 'close' method, the consumer is not used anymore.



> Redelivered messages to consumer skiped due to false duplicate detection on message rollback with Spring and cacheLevel=CACHE_NONE
> ----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2032
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2032
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.2.0
>         Environment: Spring DMLC, cacheLevel=CACHE_NONE
>            Reporter: Gary Tully
>            Assignee: Gary Tully
>             Fix For: 5.3.0
>
>
> The failover default brokerUrl in 5.2 activates the message audit facility to catch possible duplicate message delivery in the event of failover. This mechanism can get in the way of message redelivery, particularly when sessions are closed and an automatic rollback kicks in.
> Original user comment:
> ----
> Redelivery of message fails after a rollback with Spring DMLC with cacheLevel=CACHE_NONE due to a bug in class : 'org.apache.activemq.ActiveMQMessageConsumer'. Redelivered messages are wrongly detected as duplicates. It fails to call 'rollbackDuplicates' on messages processed by consumer on rollback call on the consumer.
> Sequence: ( See: http://fisheye1.atlassian.com/browse/springframework/spring/src/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java?r=1.14 )
>     * Spring creates a transaction
>     * Spring creates a JMS consumer
>     * Spring give message to Application MessageListener class
>     * Spring closes the consumer
>     * Spring try to commit
>     * Commit fails due to a RuntimeException thrown in Application MessageListener class
>     * Spring marks the message as RollbackOnly
>     * Spring rollbacks message
> When ActiveMQ closes the consumer ( org.apache.activemq.ActiveMQMessageConsumer ), it clears 'deliveredMessages' list. But this list is needed in rollback method of ActiveMQMessageConsumer to rollback duplicates ! Then consumer cannot rollback duplicates on rollback if consumer is closed before rollback action. The only way I found, is to not clear 'deliveredMessages' list on close. It seems, there is no side effect, since after a call to 'close' method, the consumer is not used anymore.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.