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

Fintan Bolton commented on CAMEL-2001:
--------------------------------------

I am out of the office from 11th August until 18th August, 2010. I will respond 
to your mail when I return on August 19th.



> Transactions do not work properly with JMS producer endpoint when processing 
> InOut exchanges
> --------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-2001
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-2001
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-jms
>    Affects Versions: 2.0.0
>            Reporter: Fintan Bolton
>             Fix For: 2.5.0
>
>
> You cannot really use transactions with a JMS producer endpoint when 
> processing _InOut_ exchanges. Depending on the scenario, the route either 
> hangs or the implemented behavior is not very useful.
> Here is a summary of the current (not very useful) behavior:
> After experimenting with JMS transacted endpoints for a bit and looking at 
> the source, here is what I found the behavior to be for JMS producer 
> endpoints:
> # On the request leg (sending the JMS message), if there is no existing 
> transaction context, the producer will either create a transaction for 
> sending the message (if {{transactedInOut=true}} or not (if 
> {{transactedInOut=false}}). In any case, since the transaction only lasts as 
> long as it takes to push the message onto the outoing queue, it is not 
> particularly interesting. Meaningful transactions are generally used to 
> bracket multiple (i.e. >1) updates of a persistent resource.
> # On the request leg, if there *is* an existing transaction context, the 
> producer joins the current transaction (irrespective of the value of 
> {{transactedInOut}}), provisionally writes the message to the outgoing queue, 
> and then starts waiting for the reply. In this case, the route hangs, because 
> the send is never committed.
> # On the reply leg, the message is received in a separate thread. This step 
> is transactional, but the transaction ends as soon as the message has been 
> pulled off the queue, so it is also not very interesting.
> Here is what I think would be useful behavior for a JMS producer endpoint:
> # On the request leg, if there is an existing transaction context, the 
> producer joins the current transaction, provisionally writes the message to 
> the outgoing queue, and then *commits* the current transaction directly 
> afterwards. This prevents the route from hanging. *Note:* There is some code 
> in the {{CamelJmsTemplate}} class looks like it was intended to do this, but 
> it currently does not work. See child issue for more details.
> # On the reply leg, create a new transaction in the main thread that includes 
> the action of pulling the reply off the incoming queue. This would require 
> that the reply be received in the main thread, not a sub-thread (as 
> currently). Subsequent nodes in the route could then participate in this 
> transaction. Admittedly, this would be a tricky feature to implement, because 
> it would involve making a big change to the producer's threading model.
> I'm shortly going to add a couple of child JIRAs here to explain some related 
> issues.

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

Reply via email to