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.