Done.

On Mon, Sep 17, 2012 at 1:49 PM, Christian Müller
<christian.muel...@gmail.com> wrote:
> Add an additional test where the SQLExceptions happens after the second
> update.
>
> Best,
> Christian
>
> On Mon, Sep 17, 2012 at 4:29 AM, James Carman 
> <ja...@carmanconsulting.com>wrote:
>
>> Something like this:
>>
>>
>> https://github.com/jwcarman/camel-in-transaction/blob/master/src/test/java/org/apache/cmueller/camel/samples/camelone/quasi/JmsAndJdbcQuasiTransactionSampleTest.java
>>
>>
>>
>> On Sun, Sep 16, 2012 at 12:53 PM, Raul Kripalani <r...@evosent.com> wrote:
>> > Hi James,
>> >
>> > By using singular transactions rather than distributed transactions (XA),
>> > each resource involved is responsible for managing its own transaction,
>> i.e.
>> > the JMS session and the JDBC DataSource will run separate transactions.
>> >
>> > Camel has a concept called "Unit of Work" that is used to synchronise
>> > transactions, or quasi-transactional behaviour, across several endpoints
>> in
>> > a route. An example of a "quasi-transactional" action is found in the
>> File
>> > consumer endpoint, where the file only will be moved to the "done"
>> directory
>> > if the route hasn't failed. Otherwise it will be moved to the "failed"
>> > directory.
>> >
>> > In the scenario that Christian proposes, the JMS consumer will begin a
>> > transaction and will wait till the Exchange is done. At that point, it
>> will
>> > decide whether to commit or rollback the transaction depending on if
>> there's
>> > an Exception set or not in the Exchange. This way, you don't get full XA
>> > behaviour, but you get something pretty close. There's still a risk of
>> JMS
>> > and JDBC becoming falling out of sync if Camel crashes after JDBC commits
>> > but before the JMS endpoint is notified of the DONE exchange and commits
>> the
>> > local transaction there.
>> >
>> > To use this approach, you want to set transacted=true at the JMS
>> consumer,
>> > so that the JMS endpoint will manage its transaction.
>> >
>> > On the other hand, XA is a different story. With XA, you don't want
>> Camel to
>> > manage the transaction (you set transacted=false on the endpoint),
>> because
>> > the XAResource will enlist itself in the transaction automatically. If
>> you
>> > set transacted=true with XA, you'll begin to see exceptions due to the
>> JMS
>> > XAResouce being enlisted twice.
>> >
>> > While I worked at FuseSource, Charles Moulliard and I created examples
>> > showing both:
>> > a) XA Transactions involving JMS and JDBC
>> > b) JMS + JDBC local transactions
>> >
>> > You can find the source code here: [1] and [2]. Here is a video with the
>> > demo: [3], and the full webinar is split in two parts: [4] and [5].
>> >
>> > Hope that helps!
>> > Raúl.
>> >
>> > ---
>> > Raúl Kripalani
>> > Enterprise Architect, Program Manager, Open Source Integration specialist
>> > http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
>> > http://blog.raulkr.net | twitter: @raulvk
>> >
>> > [1] https://github.com/FuseByExample/camel-persistence-part1
>> > [2] https://github.com/FuseByExample/camel-persistence-part2
>> > [3] http://www.youtube.com/watch?v=Fj9ECUW9nxc
>> > [4]
>> >
>> http://fusesource.com/require_registration_for?url=http://streaming.progress.com/fusesource/102711_FUSE_part_1_CM/index.htm
>> > [5]
>> >
>> http://fusesource.com/require_registration_for?url=http://streaming.progress.com/fusesource/112211_FUSE_Part_2_CM/index.htm
>> >
>> >
>> >
>> > --
>> > View this message in context:
>> http://camel.465427.n5.nabble.com/Distributed-transaction-in-camel-route-tp5719279p5719433.html
>> > Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>
>
>
> --

Reply via email to