camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claus Ibsen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CAMEL-634) DeadLetterChannel default redelivery policy eclipsed expected transactional behaviour in a transacted route
Date Tue, 01 Jul 2008 04:26:00 GMT

    [ https://issues.apache.org/activemq/browse/CAMEL-634?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43813#action_43813
] 

Claus Ibsen commented on CAMEL-634:
-----------------------------------

Marat, do you mind documenting why you are looking as you do, for the active TX, in the code
below?
You are first looking into the TSM if not found then on status, and then on the casting to
DTS etc.
Is all this code really needed? You had to do it like this? I am asking because when someone
else look at this code in 1-2 years he would be a little puzzled?

So I do think we should add some code comments on the strategy below and why it needed to
do it like this.
You can just comment here and I will add it to the code.

{code}
activeTx = TransactionSynchronizationManager.isActualTransactionActive();
+                    if (!activeTx) {
+                        activeTx = status.isNewTransaction() && !status.isCompleted();
+                        if (!activeTx) {
+                            if (DefaultTransactionStatus.class.isAssignableFrom(status.getClass()))
{
+                                DefaultTransactionStatus defStatus = DefaultTransactionStatus.class.cast(status);
+                                activeTx = defStatus.hasTransaction() && !status.isCompleted();
+                            }
+                        }
+                    }
{code}

> DeadLetterChannel default redelivery policy eclipsed expected transactional behaviour
in a transacted route
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-634
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-634
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core, camel-jms
>    Affects Versions: 1.4.0
>            Reporter: Marat Bedretdinov
>            Assignee: Claus Ibsen
>             Fix For: 1.4.0
>
>         Attachments: tx.fix.2008-06-24-16-54.patch, tx.fix.2008-06-30-19-16.patch
>
>
> Camel routes get a DLC processor with a redelivery policy, which defaults to redeliverying
a message to a destination processor up to 6 times.  In case of a transacted route it is preferable
that DLC's delivery policy be reset to a single attempt, so that a fan-out transacted route
would not hold tx locks on destinations for too long. 
> The DLC's default redelivery policy has also made transactional tests not really testing
tx behavior of Camel Components backed runtimes (jms brokers, etc), rather DLC would catch
the exception and try to redeliver the message to destination processor and not letting the
components to rollback native transactions initiated by components backed runtimes (jms, db)
> The attached patch installs a property into Camel Exchange that indicates weather a route
is transacted. This is done in org.apache.camel.spring.spi.TransactionInterceptor.java
> DLC then checks if the flow is transacted and sets its redelivery policy to 1
> With this change JMS transactions are actually rolled back and messages are put back
into the queue and then consumed again, verifying that brokers support transactions and can
redeliver messages into Camel routes that were previously rolled back.

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


Mime
View raw message