At the weekend I found some minutes to work on it. I created a few unit
tests for local JMS and JDBC transactions and for global JMS and JDBC XA
transactions. At present, you can find the samples at [1] but I plan to
move it also into the regular Camel test base for regression tests or into
a new XA transaction example project.

I tested the XA transactions with Atomikos, Aries, JOTM and Bitronix. I got
they all working. I hope it will help to solve your issue. If not, please
ping me again... ;-)

And by the way, because you only have one resource (JMS), you should
consider to only use a local JMS transaction which is much more faster than
the XA transactions (because of 2PC).

[1] https://github.com/muellerc/camel-in-transaction/

Best,
Christian

On Fri, Apr 20, 2012 at 5:59 AM, Chris Geer <ch...@cxtsoftware.com> wrote:

> Arnaud,
>
> There are two approaches I've used. The first approach is to start with a
> SMX deployment and tweak it. The way I've done that is once I've unpacked
> the deployment I'll modify the various feature/config files and update them
> to use the version I want. For example to make use of Camel 2.9.2 I would
> modify the servicemix feature to change the Camel version and update the
> org.apache.karaf.features.cfg file to point to the correct feature file for
> Camel. You can use the same approach to update to other items.
>
> The second approach, and the one I use now, is to build a custom
> deployment. I did this by taking the apache-servicemix assembly project,
> making my own copy, and changing the required properties to use the
> versions you want. This will actually rebuild the servicemix feature file,
> and org.apache.karaf.features.cfg file to use the correct versions.
>
> Hmmm...sounds like a good blog topic. Maybe someone has already written
> about it.
>
> Chris
>
> On Thu, Apr 19, 2012 at 5:36 AM, DEPREZ Arnaud AWL-IT <
> arnaud.dep...@atos.net> wrote:
>
> > Hi again Chris,
> >
> > Can you also tell me what did you do to setup ActiveMQ 5.6 SNAPSHOT ?
> > If you use ServiceMix :
> > Did you remove the previous from ServiceMix and install this one ?
> > Did you simply install the new versions of ActiveMQ and let the other
> > libraries live in parallel ?
> > Can you provide the list of dependencies you use ? Or the features ?
> >
> >
> > Arnaud Deprez
> >
> >  please don't print unless you really need to
> >
> >
> > -----Original Message-----
> > From: DEPREZ Arnaud AWL-IT
> > Sent: jeudi 19 avril 2012 14:24
> > To: users@camel.apache.org
> > Subject: RE: OSGI Transaction Propagation to Camel Route
> >
> > Hi Chris,
> >
> > Concerning your question, I don't really understand the meaning.
> > Can you give me more details ?
> >
> > By the way, does anybody have an idea about when the 5.6 official release
> > comes out ?
> > Actually, I get exactly the same problem with the XA transactionManager
> > from Aries and ActiveMQ and I don't want to use the snapshot version.
> >
> > Here is my log for more details :
> >
> > 14:23:04,801 | WARN  | tenerContainer-1 | PooledSession
> >  | 47 - org.apache.activemq.activemq-pool - 5.4.2.fuse-04-05 | Caught
> > exception trying rollback() when putting session back into the pool:
> > javax.jms.TransactionInProgressException: Cannot rollback() inside an
> > XASession
> > javax.jms.TransactionInProgressException: Cannot rollback() inside an
> > XASession
> >        at
> >
> org.apache.activemq.ActiveMQXASession.rollback(ActiveMQXASession.java:76)[43:org.apache.activemq.activemq-core:5.4.2.fuse-04-05]
> >        at
> >
> org.apache.activemq.pool.PooledSession.close(PooledSession.java:111)[47:org.apache.activemq.activemq-pool:5.4.2.fuse-04-05]
> >        at
> >
> org.springframework.jms.support.JmsUtils.closeSession(JmsUtils.java:108)[77:org.springframework.jms:3.0.5.RELEASE]
> >        at
> >
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:366)[77:org.springframework.jms:3.0.5.RELEASE]
> >        at
> >
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)[77:org.springframework.jms:3.0.5.RELEASE]
> >        at
> >
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)[77:org.springframework.jms:3.0.5.RELEASE]
> >        at
> >
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)[77:org.springframework.jms:3.0.5.RELEASE]
> >        at
> >
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)[77:org.springframework.jms:3.0.5.RELEASE]
> >        at java.lang.Thread.run(Thread.java:619)[:1.6.0_14]
> >
> >
> > Arnaud Deprez
> >
> >  please don't print unless you really need to
> >
> > -----Original Message-----
> > From: Chris Geer [mailto:ch...@cxtsoftware.com]
> > Sent: mercredi 18 avril 2012 18:43
> > To: users@camel.apache.org
> > Subject: Re: OSGI Transaction Propagation to Camel Route
> >
> > After an upgrade to 5.6-SNAPSHOT everything works as expected. I'm still
> > curious about my last question though :)
> >
> > Thank you all for your help.
> >
> > Chris
> >
> > On Tue, Apr 17, 2012 at 6:28 PM, Chris Geer <ch...@cxtsoftware.com>
> wrote:
> >
> > > Thanks Raul, that issue does look like the problem I'm seeing on the
> > > success case. I'll try and upgrade to 5.6-SNAPSHOT tomorrow and see if
> > that
> > > resolves the issue.
> > >
> > > I now see that I need to have a XA Connection Factory and XA Connection
> > > Pool for Camel to be able to integrate with a XA transaction. What I
> > don't
> > > understand is why I'm able to, in code, take a connection from a normal
> > > connection factory/pool, that is configured with a transaction manager
> > and
> > > has a ResourceManager associated with it, and enlist it in a XA
> > transaction
> > > but that same setup won't work with Camel. I'm sure there is a good
> > reason,
> > > I just don't understand why. Any thoughts?
> > >
> > > Here is my normal ActiveMQ setup that works with XA transactions from
> > code.
> > >
> > >     <bean id="activemqConnectionFactory"
> > > class="org.apache.activemq.ActiveMQConnectionFactory">
> > >         <property name="brokerURL"
> > > value="vm://default?create=false&amp;waitForStart=10000" />
> > >     </bean>
> > >
> > >     <bean id="pooledConnectionFactory"
> > > class="org.apache.activemq.pool.PooledConnectionFactory">
> > >         <property name="maxConnections" value="8" />
> > >         <property name="connectionFactory"
> > ref="activemqConnectionFactory"
> > > />
> > >     </bean>
> > >
> > >     <bean id="resourceManager"
> > > class="org.apache.activemq.pool.ActiveMQResourceManager"
> > > init-method="recoverResource">
> > >           <property name="transactionManager" ref="transactionManager"
> />
> > >           <property name="connectionFactory"
> > > ref="activemqConnectionFactory" />
> > >           <property name="resourceName" value="activemq.default" />
> > >     </bean>
> > >
> > >     <reference id="transactionManager"
> > > interface="javax.transaction.TransactionManager" />
> > >
> > >     <service ref="pooledConnectionFactory"
> > > interface="javax.jms.ConnectionFactory">
> > >         <service-properties>
> > >             <entry key="name" value="localhost"/>
> > >         </service-properties>
> > >     </service>
> > >
> > > Thanks again for helping me out, I appreciate it,
> > > Chris
> > >
> > >
> > > On Tue, Apr 17, 2012 at 4:36 PM, Raul Kripalani <r...@fusesource.com
> > >wrote:
> > >
> > >> Also, see https://issues.apache.org/jira/browse/AMQ-3251.
> > >>
> > >> I think the fix was backported to a release of Fuse ESB 4.4.1, that's
> > >> why we don't experience it in the example.
> > >>
> > >> You may want to try with a Fuse ESB release if using an AMQ snapshot
> > >> is not an option for you.
> > >>
> > >> Regards,
> > >> Raul.
> > >>
> > >> On 18 Apr 2012, at 00:28, Raul Kripalani <r...@fusesource.com> wrote:
> > >>
> > >> > I noticed you are using PROPAGATION_MANDATORY, which will throw an
> > >> > exception if a transaction doesn't already exist. Could that justify
> > >> > the exception you see when isolating only Camel? Can you try with
> > >> > PROPAGATION_REQUIRED instead?
> > >> >
> > >> > The sample I pointed you to works with no changes. In fact, you may
> > >> > want to try it out locally substituting the DB interactions with
> > >> > another JMS send...
> > >> >
> > >> > Thanks.
> > >> >
> > >> > On 17 Apr 2012, at 22:21, Chris Geer <ch...@cxtsoftware.com> wrote:
> > >> >
> > >> >> The only place I'm not using an already XA aware connection factory
> > is
> > >> in
> > >> >> the API side, which is working perfectly because I'm manually
> > >> enlisting the
> > >> >> Session.
> > >> >>
> > >> >> On the camel side, I used your example exactly as you can see in my
> > >> >> blueprint file and everything depends on XA aware activemq objects.
> > >> Just to
> > >> >> make sure the API side of things wasn't interfering with the camel
> > part
> > >> >> (which would be odd), I commented out all the code except for the
> > camel
> > >> >> send and commented out the reference to the standard JMS Connection
> > >> >> Factory. Even with those drastic measures, I still got all the same
> > >> errors
> > >> >> even though the camel route was the only participant in the
> > transaction
> > >> >> along with the OSGI component itself.
> > >> >>
> > >> >> What was the change you made to get it working without errors?
> > >> >>
> > >> >> Chris
> > >> >>
> > >> >> On Tue, Apr 17, 2012 at 1:48 PM, Raul Kripalani <
> r...@fusesource.com
> > >
> > >> wrote:
> > >> >>
> > >> >>> It looks like you may not be using an XA-aware Pooled Connection
> > >> Factory :D
> > >> >>>
> > >> >>> See
> > >> >>>
> > >>
> >
> http://activemq.apache.org/maven/5.5.0/activemq-pool/apidocs/org/apache/activemq/pool/XaPooledConnectionFactory.html
> > >> >>>
> > >> >>> It may look catchy, but all the layers of the stack need to be
> > >> >>> XA-aware, as XA requires a different behaviour when handling
> > borrowing
> > >> >>> and returning to the pool.
> > >> >>>
> > >> >>> Let me know if it works for you.
> > >> >>>
> > >> >>> Regards,
> > >> >>> Raul.
> > >> >>>
> > >> >>> On 17 Apr 2012, at 18:31, Chris Geer <ch...@cxtsoftware.com>
> wrote:
> > >> >>>
> > >> >>>> Raul,
> > >> >>>>
> > >> >>>> Thanks for the information. I tried what you said and I think it
> > did
> > >> have
> > >> >>>> some success with rolling back the transaction but it causes
> > >> significant
> > >> >>>> errors to be thrown during a success case. As I've written a
> sample
> > >> to
> > >> >>>> debug this issue I wanted you to have my latest code so we can be
> > >> >>>> referencing the same thing if you're willing to take another
> look.
> > >> >>>>
> > >> >>>> README: http://pastebin.com/UWq3yk4c
> > >> >>>> OSGI Implementation: http://pastebin.com/ifQTybn3
> > >> >>>> OSGI Interface: http://pastebin.com/zEUP8jJJ
> > >> >>>> Blueprint File: http://pastebin.com/sxBtxNCq
> > >> >>>> Test Driver/Logger: http://pastebin.com/SDVFvjGm
> > >> >>>> pom.xml: http://pastebin.com/kTXXaebV
> > >> >>>>
> > >> >>>> Part of the error I'm seeing is this (commit -> rollback)
> > >> >>>>
> > >> >>>> 10:12:52,624 | WARN  | 52 - timer://foo | PooledSession
> > >> >>>> | 57 - org.apache.activemq.activemq-pool - 5.5.1 | Caught
> exception
> > >> >>> trying
> > >> >>>> rollback() when putting session back into the pool:
> > >> >>>> javax.jms.TransactionInProgressException: Cannot rollback()
> inside
> > an
> > >> >>>> XASession
> > >> >>>> javax.jms.TransactionInProgressException: Cannot rollback()
> inside
> > an
> > >> >>>> XASession
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.activemq.ActiveMQXASession.rollback(ActiveMQXASession.java:76)[60:org.apache.activemq.activemq-core:5.5.1]
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.activemq.pool.PooledSession.close(PooledSession.java:111)[57:org.apache.activemq.activemq-pool:5.5.1]
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.activemq.pool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:90)[57:org.apache.activemq.activemq-pool:5.5.1]
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:540)[45:org.apache.aries.transaction.manager:0.3.0]
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:533)[45:org.apache.aries.transaction.manager:0.3.0]
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:329)[45:org.apache.aries.transaction.manager:0.3.0]
> > >> >>>> at
> > >> >>>>
> > >> >>>
> > >>
> >
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)[45:org.apache.aries.transaction.manager:0.3.0]
> > >> >>>>
> > >> >>>>
> > >> >>>> Chris
> > >> >>>>
> > >> >>>> On Tue, Apr 17, 2012 at 9:44 AM, Raul Kripalani <
> > r...@fusesource.com
> > >> >
> > >> >>> wrote:
> > >> >>>>
> > >> >>>>> I noticed several things in your config.
> > >> >>>>>
> > >> >>>>> 1) the JMS config should be inside the 'configuration' property
> of
> > >> the
> > >> >>>>> ActiveMQComponent:
> > >> >>>>>
> > >> >>>>> <!-- ActiveMQ JMS Configuration is defined as Transacted and
> > >> leverages
> > >> >>> XA
> > >> >>>>> Transactions -->
> > >> >>>>> <bean id="activemq"
> > >> >>>>> class="org.apache.activemq.camel.component.ActiveMQComponent">
> > >> >>>>>  <property name="configuration">
> > >> >>>>>   <bean class="org.apache.camel.component.jms.JmsConfiguration">
> > >> >>>>>      <property name="connectionFactory"
> > >> >>>>> ref="pooledConnectionFactoryXa"/>
> > >> >>>>>      <property name="transactionManager" ref="platformTxManager"
> > />
> > >> >>>>>      <property name="transacted" value="false"/>
> > >> >>>>>      <property name="cacheLevelName" value="CACHE_NONE"/>
> > >> >>>>>   </bean>
> > >> >>>>> </property>
> > >> >>>>> </bean>
> > >> >>>>>
> > >> >>>>> 2) the 'transacted' property should be false as above, because
> you
> > >> don't
> > >> >>>>> want the component to manage the transactions locally. The
> > >> enrolment of
> > >> >>>>> resources and coordination of transaction will happen on the XA
> > >> level.
> > >> >>>>>
> > >> >>>>> 3) you are missing the ActiveMQResourceManager, which needs an
> > >> >>> injection of
> > >> >>>>> a javax.transaction.TransactionManager, which in reality is the
> > >> same as
> > >> >>> the
> > >> >>>>> PlatformTransactionManager, but you under a different interface
> > >> >>>>>
> > >> >>>>> See the following link for how your config should look like:
> > >> >>>>>
> > >> >>>>>
> > >> >>>
> > >>
> >
> https://github.com/FuseByExample/camel-persistence-part2/blob/master/route-one-tx-manager/src/main/resources/META-INF/spring/springConfig.xml
> > >> >>>>> .
> > >> >>>>>
> > >> >>>>> And of course, the route must be invoked from the same thread
> > where
> > >> the
> > >> >>>>> transaction is being started, and you cannot use the SEDA
> > component
> > >> for
> > >> >>>>> that. You must invoke it via a direct endpoint and I think
> > >> >>>>> requestBodyAndHeader(), but I'm not sure about this last point.
> > >> >>>>>
> > >> >>>>> Regards,
> > >> >>>>>
> > >> >>>>> *Raúl Kripalani*
> > >> >>>>> Principal Consultant | FuseSource Corp.
> > >> >>>>> r...@fusesource.com | fusesource.com <
> http://www.fusesource.com/>
> > >> >>> skype:
> > >> >>>>> raul.fuse | twitter: @raulvk <http://twitter.com/raulvk>,
> > >> >>>>> @fusenews<http://twitter.com/fusenews>
> > >> >>>>>
> > >> >>>>> <http://twitter.com/fusenews>
> > >> >>>>>
> > >> >>>>> On 17 April 2012 16:53, Chris Geer <ch...@cxtsoftware.com>
> wrote:
> > >> >>>>>
> > >> >>>>>> Raul,
> > >> >>>>>>
> > >> >>>>>> I gave that a shot but it actually made the problem worse.
> > >> >>>>>> ProducerTemplate.requestBodyAndHeader uses an InOut exchange
> > >> pattern
> > >> >>> but
> > >> >>>>>> since I'm not sending responses it always fails (regardless of
> > >> >>>>> transaction)
> > >> >>>>>> with a timeout saying it didn't get a response. It also send
> the
> > >> >>> message
> > >> >>>>> to
> > >> >>>>>> the topic even without the transaction being committed so it
> > >> wouldn't
> > >> >>>>> solve
> > >> >>>>>> the transaction problem anyway.
> > >> >>>>>>
> > >> >>>>>> Chris
> > >> >>>>>>
> > >> >>>>>> On Tue, Apr 17, 2012 at 1:47 AM, Raul Kripalani <
> > >> r...@fusesource.com>
> > >> >>>>>> wrote:
> > >> >>>>>>
> > >> >>>>>>> Hi Chris!
> > >> >>>>>>>
> > >> >>>>>>> Transaction Managers bind transactions to threads, and a
> > possible
> > >> >>> cause
> > >> >>>>>> for
> > >> >>>>>>> your transaction getting lost is that your route is being
> called
> > >> >>>>>>> asynchronously from another thread.
> > >> >>>>>>>
> > >> >>>>>>> This is because you are using ProducerTemplate.send...().
> > >> >>>>>>>
> > >> >>>>>>> Can you replace this with
> > >> ProducerTemplate.requestBodyAndHeader(...),
> > >> >>>>>> which
> > >> >>>>>>> in theory should call the route synchronously in the same
> > thread?
> > >> >>>>>>>
> > >> >>>>>>> Regards,
> > >> >>>>>>>
> > >> >>>>>>> *Raúl Kripalani*
> > >> >>>>>>> Principal Consultant | FuseSource Corp.
> > >> >>>>>>> r...@fusesource.com | fusesource.com <
> > http://www.fusesource.com/>
> > >> >>>>> skype:
> > >> >>>>>>> raul.fuse | twitter: @raulvk <http://twitter.com/raulvk>,
> > >> >>>>>>> @fusenews<http://twitter.com/fusenews>
> > >> >>>>>>>
> > >> >>>>>>> <http://twitter.com/fusenews>
> > >> >>>>>>>
> > >> >>>>>>> On 16 April 2012 23:09, Chris Geer <ch...@cxtsoftware.com>
> > wrote:
> > >> >>>>>>>
> > >> >>>>>>>> Claus,
> > >> >>>>>>>>
> > >> >>>>>>>> I'm still struggling with this so I've put together a quick
> > >> sample
> > >> >>>>>>> project
> > >> >>>>>>>> that shows the problem. It consists of an OSGI component that
> > >> runs
> > >> >>>>>> under
> > >> >>>>>>> a
> > >> >>>>>>>> transaction and posts two JMS messages (one with Camel and
> one
> > >> with
> > >> >>>>> JMS
> > >> >>>>>>>> APIs) then rolls back the transactions. I would hope to see
> > both
> > >> >>>>>> messages
> > >> >>>>>>>> not be delivered but instead what I see if the one sent via
> > camel
> > >> >>>>> being
> > >> >>>>>>>> delivered while the other one is rolled back. I'm sure I'm
> > >> probably
> > >> >>>>>> doing
> > >> >>>>>>>> something wrong but I can't figure it out.
> > >> >>>>>>>>
> > >> >>>>>>>> Is there a place I can post my sample project where someone
> > >> might be
> > >> >>>>>> able
> > >> >>>>>>>> to give it a quick look?
> > >> >>>>>>>>
> > >> >>>>>>>> Thanks,
> > >> >>>>>>>> Chris
> > >> >>>>>>>>
> > >> >>>>>>>> On Sat, Apr 7, 2012 at 3:19 AM, Claus Ibsen <
> > >> claus.ib...@gmail.com>
> > >> >>>>>>> wrote:
> > >> >>>>>>>>
> > >> >>>>>>>>> On Thu, Apr 5, 2012 at 5:57 PM, Chris Geer <
> > >> ch...@cxtsoftware.com>
> > >> >>>>>>>> wrote:
> > >> >>>>>>>>>> Claus,
> > >> >>>>>>>>>>
> > >> >>>>>>>>>> I realize that but I can't explain what I'm seeing. Here is
> > an
> > >> >>>>>>>> additional
> > >> >>>>>>>>>> piece of info, here is debug log for the sending of the
> > >> message.
> > >> >>>>> As
> > >> >>>>>>> you
> > >> >>>>>>>>> can
> > >> >>>>>>>>>> see, the transaction fields are all null but I don't know
> if
> > >> that
> > >> >>>>>> is
> > >> >>>>>>>>> normal
> > >> >>>>>>>>>> or a symptom of the problem.
> > >> >>>>>>>>>>
> > >> >>>>>>>>>> 08:51:22,906 | DEBUG | erations/address | JmsConfiguration
> > >> >>>>>>>>>> | 169 - org.apache.camel.camel-jms - 2.9.2.SNAPSHOT |
> Sending
> > >> JMS
> > >> >>>>>>>> message
> > >> >>>>>>>>>> to: topic://event-notifications with message:
> > >> >>>>> ActiveMQBytesMessage
> > >> >>>>>>>>>> {commandId = 0, responseRequired = false, messageId = null,
> > >> >>>>>>>>>> originalDestination = null, originalTransactionId = null,
> > >> >>>>>> producerId
> > >> >>>>>>> =
> > >> >>>>>>>>>> null, destination = null, transactionId = null, expiration
> =
> > 0,
> > >> >>>>>>>>> timestamp =
> > >> >>>>>>>>>> 0, arrival = 0, brokerInTime = 0, brokerOutTime = 0,
> > >> >>>>> correlationId
> > >> >>>>>> =
> > >> >>>>>>>>> null,
> > >> >>>>>>>>>> replyTo = null, persistent = true, type = null, priority =
> 0,
> > >> >>>>>>> groupID =
> > >> >>>>>>>>>> null, groupSequence = 0, targetConsumerId = null,
> compressed
> > =
> > >> >>>>>> false,
> > >> >>>>>>>>>> userID = null, content = null, marshalledProperties = null,
> > >> >>>>>>>>> dataStructure =
> > >> >>>>>>>>>> null, redeliveryCounter = 0, size = 0, properties =
> > >> >>>>>>>> {EntityType=Address,
> > >> >>>>>>>>>>
> breadcrumbId=ID-CXTMBP-Chris-local-62052-1333577461603-22-3,
> > >> >>>>>>>>>> EventType=EntityCreated, ClientID=0}, readOnlyProperties =
> > >> false,
> > >> >>>>>>>>>> readOnlyBody = false, droppable = false}
> > ActiveMQBytesMessage{
> > >> >>>>>>>> bytesOut =
> > >> >>>>>>>>>> org.apache.activemq.util.ByteArrayOutputStream@51762faf,
> > >> >>>>> dataOut =
> > >> >>>>>>>>>> java.io.DataOutputStream@2634b3f1, dataIn = null }
> > >> >>>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>> I would only suspect transaction ids being populated in the
> > AMQ
> > >> >>>>>>>>> message if the message originated from the AMQ broker.
> > Creating
> > >> a
> > >> >>>>> new
> > >> >>>>>>>>> message to be send would most likely not populate TX ids and
> > >> >>>>> whatnot.
> > >> >>>>>>>>> But the work is still carried out under the TX manager. (if
> TX
> > >> is
> > >> >>>>>>>>> properly configured and working - yeah thats the hard part).
> > >> >>>>>>>>>
> > >> >>>>>>>>>> Here is more of the stack trace that shows the transaction
> > >> being
> > >> >>>>>>>>> committed
> > >> >>>>>>>>>> for some reason.
> > >> >>>>>>>>>>
> > >> >>>>>>>>>> 08:51:22,888 | DEBUG | erations/address |
> > >> TransactionErrorHandler
> > >> >>>>>>>>>> | 166 - org.apache.camel.camel-core - 2.9.2.SNAPSHOT |
> > >> >>>>> Transaction
> > >> >>>>>>>> begin
> > >> >>>>>>>>>> (0x1f2198ab) redelivered(unknown) for (MessageId:
> > >> >>>>>>>>>> ID-CXTMBP-Chris-local-62052-1333577461603-22-3 on
> ExchangeId:
> > >> >>>>>>>>>> ID-CXTMBP-Chris-local-62052-1333577461603-22-4))
> > >> >>>>>>>>>> 08:51:22,888 | DEBUG | erations/address |
> > JtaTransactionManager
> > >> >>>>>>>>>> | 139 - org.springframework.transaction - 3.0.6.RELEASE |
> > >> >>>>>>>> Participating
> > >> >>>>>>>>> in
> > >> >>>>>>>>>> existing transaction
> > >> >>>>>>>>>> 08:51:22,906 | DEBUG | erations/address | JmsConfiguration
> > >> >>>>>>>>>> | 169 - org.apache.camel.camel-jms - 2.9.2.SNAPSHOT |
> Sending
> > >> JMS
> > >> >>>>>>>> message
> > >> >>>>>>>>>> to: topic://event-notifications with message:
> > >> >>>>> ActiveMQBytesMessage
> > >> >>>>>>>>>> {commandId = 0, responseRequired = false, messageId = null,
> > >> >>>>>>>>>> originalDestination = null, originalTransactionId = null,
> > >> >>>>>> producerId
> > >> >>>>>>> =
> > >> >>>>>>>>>> null, destination = null, transactionId = null, expiration
> =
> > 0,
> > >> >>>>>>>>> timestamp =
> > >> >>>>>>>>>> 0, arrival = 0, brokerInTime = 0, brokerOutTime = 0,
> > >> >>>>> correlationId
> > >> >>>>>> =
> > >> >>>>>>>>> null,
> > >> >>>>>>>>>> replyTo = null, persistent = true, type = null, priority =
> 0,
> > >> >>>>>>> groupID =
> > >> >>>>>>>>>> null, groupSequence = 0, targetConsumerId = null,
> compressed
> > =
> > >> >>>>>> false,
> > >> >>>>>>>>>> userID = null, content = null, marshalledProperties = null,
> > >> >>>>>>>>> dataStructure =
> > >> >>>>>>>>>> null, redeliveryCounter = 0, size = 0, properties =
> > >> >>>>>>>> {EntityType=Address,
> > >> >>>>>>>>>>
> breadcrumbId=ID-CXTMBP-Chris-local-62052-1333577461603-22-3,
> > >> >>>>>>>>>> EventType=EntityCreated, ClientID=0}, readOnlyProperties =
> > >> false,
> > >> >>>>>>>>>> readOnlyBody = false, droppable = false}
> > ActiveMQBytesMessage{
> > >> >>>>>>>> bytesOut =
> > >> >>>>>>>>>> org.apache.activemq.util.ByteArrayOutputStream@51762faf,
> > >> >>>>> dataOut =
> > >> >>>>>>>>>> java.io.DataOutputStream@2634b3f1, dataIn = null }
> > >> >>>>>>>>>> 08:51:22,907 | DEBUG | erations/address |
> > JtaTransactionManager
> > >> >>>>>>>>>> | 139 - org.springframework.transaction - 3.0.6.RELEASE |
> > >> >>>>>>> Registering
> > >> >>>>>>>>>> after-completion synchronization with existing JTA
> > transaction
> > >> >>>>>>>>>> 08:51:22,907 | DEBUG | erations/address |
> > >> TransactionErrorHandler
> > >> >>>>>>>>>> | 166 - org.apache.camel.camel-core - 2.9.2.SNAPSHOT |
> > >> >>>>> Transaction
> > >> >>>>>>>>> commit
> > >> >>>>>>>>>> (0x1f2198ab) redelivered(unknown) for (MessageId:
> > >> >>>>>>>>>> ID-CXTMBP-Chris-local-62052-1333577461603-22-3 on
> ExchangeId:
> > >> >>>>>>>>>> ID-CXTMBP-Chris-local-62052-1333577461603-22-4))
> > >> >>>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>> That last debug logging is just Camel saying that the TX
> > >> completed
> > >> >>>>>>>>> successfully (in that leg). Its up to the TX manager when
> > >> actually
> > >> >>>>> to
> > >> >>>>>>>>> commit the TX. If a TX was started outside, then the commit
> is
> > >> >>>>>>>>> executed at that point.
> > >> >>>>>>>>>
> > >> >>>>>>>>> So this is normal.
> > >> >>>>>>>>>
> > >> >>>>>>>>>> On Thu, Apr 5, 2012 at 8:19 AM, Claus Ibsen <
> > >> >>>>> claus.ib...@gmail.com
> > >> >>>>>>>
> > >> >>>>>>>>> wrote:
> > >> >>>>>>>>>>
> > >> >>>>>>>>>>> On Thu, Apr 5, 2012 at 4:59 PM, Chris Geer <
> > >> >>>>> ch...@cxtsoftware.com
> > >> >>>>>>>
> > >> >>>>>>>>> wrote:
> > >> >>>>>>>>>>>> Christian,
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>> I have that book and that is what I used for a lot of my
> > >> >>>>>>> reference.
> > >> >>>>>>>> In
> > >> >>>>>>>>>>>> fact, they only major difference between his source and
> > mine
> > >> >>>>> is
> > >> >>>>>> he
> > >> >>>>>>>> is
> > >> >>>>>>>>>>> using
> > >> >>>>>>>>>>>> Atomikos as the transaction manager and I'm using aries.
> I
> > am
> > >> >>>>>>>>> referencing
> > >> >>>>>>>>>>>> an existing PlatformTransactionManager instead of
> creating
> > a
> > >> >>>>>>>>>>>> JtaTransactionManager but PlatformTransactionManager
> > >> >>>>> implements
> > >> >>>>>>>>>>>> JtaTransactionManager so it should be ok.
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>> As for the datasource, I'm actually publishing it from
> > >> another
> > >> >>>>>>> OSGI
> > >> >>>>>>>>>>>> component as a service so it can be reused. I'm creating
> it
> > >> in
> > >> >>>>>>> code
> > >> >>>>>>>>> right
> > >> >>>>>>>>>>>> now as defined below.
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>>     BasicManagedDataSource ds = new
> > >> >>>>> BasicManagedDataSource();
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>>     if(xaDataSourceClass != null &&
> > >> >>>>>>>> !xaDataSourceClass.isEmpty()) {
> > >> >>>>>>>>>>>>         try {
> > >> >>>>>>>>>>>>             XADataSource dsi =
> > >> >>>>>>>>>>>>
> > (XADataSource)Class.forName(xaDataSourceClass).newInstance();
> > >> >>>>>>>>>>>>             Method setUrl =
> > >> >>>>>> dsi.getClass().getMethod("setUrl",
> > >> >>>>>>>> new
> > >> >>>>>>>>>>>> Class[] {String.class});
> > >> >>>>>>>>>>>>             setUrl.invoke(dsi, (String)
> > >> >>>>>>> config.get(CONNSTR_KEY));
> > >> >>>>>>>>>>>>             ds.setXADataSource(xaDataSourceClass);
> > >> >>>>>>>>>>>>             ds.setXaDataSourceInstance(dsi);
> > >> >>>>>>>>>>>>         } catch (IllegalArgumentException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Couldn't create instance", ex);
> > >> >>>>>>>>>>>>         } catch (InvocationTargetException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Couldn't create instance", ex);
> > >> >>>>>>>>>>>>         } catch (NoSuchMethodException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Couldn't create instance", ex);
> > >> >>>>>>>>>>>>         } catch (SecurityException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Couldn't create instance", ex);
> > >> >>>>>>>>>>>>         } catch (InstantiationException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Couldn't create instance", ex);
> > >> >>>>>>>>>>>>         } catch (IllegalAccessException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Couldn't create instance", ex);
> > >> >>>>>>>>>>>>         } catch (ClassNotFoundException ex) {
> > >> >>>>>>>>>>>>             throw new
> > >> >>>>>>> ConfigurationException("xaDataSourceClass",
> > >> >>>>>>>>>>>> "Class not found", ex);
> > >> >>>>>>>>>>>>         }
> > >> >>>>>>>>>>>>     } else {
> > >> >>>>>>>>>>>>         ds.setDriverClassName((String)
> > >> >>>>>> config.get(DRIVER_KEY));
> > >> >>>>>>>>>>>>         ds.setUrl((String) config.get(CONNSTR_KEY));
> > >> >>>>>>>>>>>>     }
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>>     BundleContext context =
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>
> > >> >>>>>>>
> > >> >>>>>>
> > >> >>>>>
> > >> >>>
> > >>
> >
> FrameworkUtil.getBundle(BedrockConnectionPoolFactory.class).getBundleContext();
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>>     ds.setTransactionManager(transMgr);
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>>     Hashtable<String, String> sp = new Hashtable<String,
> > >> >>>>>>>> String>();
> > >> >>>>>>>>>>>>     sp.put(DSNAME_KEY, (String) config.get(DSNAME_KEY));
> > >> >>>>>>>>>>>>     ServiceRegistration reg =
> > >> >>>>>>>>>>>> context.registerService("javax.sql.XADataSource",
> > >> >>>>>>>>>>>> ds.getXaDataSourceInstance(), sp);
> > >> >>>>>>>>>>>>     regMap.put(id, reg);
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>> The transMgr variable above is looking up the Aries
> > >> >>>>> transaction
> > >> >>>>>>>>> manager
> > >> >>>>>>>>>>>> deployed in SMX (same one my JMS code is getting through
> > the
> > >> >>>>>>>>>>>> PlatformTransactionManager interface).
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>> The biggest challenge I've had is that every single camel
> > >> >>>>>>>> transaction
> > >> >>>>>>>>>>>> example I've seen starts the transaction INSIDE camel.
> They
> > >> >>>>> all
> > >> >>>>>>>>> resemble
> > >> >>>>>>>>>>>> the diagram on page 300 of Claus' book. I haven't seen
> any
> > >> >>>>>> example
> > >> >>>>>>>>> where
> > >> >>>>>>>>>>>> camel is enlisted in an already existing transaction. I
> was
> > >> >>>>>> hoping
> > >> >>>>>>>>> that
> > >> >>>>>>>>>>> was
> > >> >>>>>>>>>>>> just because examples are traditionally simple but maybe
> it
> > >> >>>>>> wasn't
> > >> >>>>>>>>>>> designed
> > >> >>>>>>>>>>>> to do that?
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>>> Camel does not have its own TX manager etc. All we do is
> to
> > >> hook
> > >> >>>>>>> into
> > >> >>>>>>>>>>> the Spring TX manager.
> > >> >>>>>>>>>>> So if there is already a TX in progress, then Camel should
> > >> just
> > >> >>>>>> play
> > >> >>>>>>>>>>> along, and run in that same TX.
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>>> The Camel processing occurs in a Spring TX template in
> its -
> > >> >>>>>>>>>>> doInTransaction method. That happens when you use the
> > >> >>>>> <transacted>
> > >> >>>>>>> in
> > >> >>>>>>>>>>> the Route.
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>>>> Chris
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>> On Thu, Apr 5, 2012 at 1:11 AM, Christian Müller <
> > >> >>>>>>>>>>>> christian.muel...@gmail.com> wrote:
> > >> >>>>>>>>>>>>
> > >> >>>>>>>>>>>>> Chris,
> > >> >>>>>>>>>>>>> may be the source code of Claus book "Camel in Action"
> is
> > >> >>>>>> helpful
> > >> >>>>>>>> for
> > >> >>>>>>>>>>> you
> > >> >>>>>>>>>>>>> [1].
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>>> Could you als share your datasource configuration with
> us?
> > >> It
> > >> >>>>>> was
> > >> >>>>>>>>> not in
> > >> >>>>>>>>>>>>> your post...
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>>> [1]
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>
> > >> >>>>>>>
> > >> >>>>>>
> > >> >>>>>
> > >> >>>
> > >>
> >
> http://code.google.com/p/camelinaction/source/browse/trunk/chapter9/xa/src/test/resources/spring-context.xml
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>>> Best,
> > >> >>>>>>>>>>>>> Christian
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>>> On Thu, Apr 5, 2012 at 7:13 AM, Chris Geer <
> > >> >>>>>>> ch...@cxtsoftware.com>
> > >> >>>>>>>>>>> wrote:
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> We are building an application using ServiceMix (CXF,
> > >> >>>>> Camel,
> > >> >>>>>>>>> Karaf...)
> > >> >>>>>>>>>>>>> and
> > >> >>>>>>>>>>>>>> we've run into an issue with transactions not
> propagating
> > >> >>>>> to
> > >> >>>>>>>> camel
> > >> >>>>>>>>>>> routes
> > >> >>>>>>>>>>>>>> as we'd like them to. We have several OSGI components
> > that
> > >> >>>>>> run
> > >> >>>>>>>>> under
> > >> >>>>>>>>>>>>>> transactions using the Aries transaction management
> like
> > >> >>>>> the
> > >> >>>>>>>>>>> following:
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>  <bean id="serviceBean" class="<class>">
> > >> >>>>>>>>>>>>>>     <property name="dataSource" ref="ds"/>
> > >> >>>>>>>>>>>>>>     <property name="camelContext" ref="camelCtx"/>
> > >> >>>>>>>>>>>>>>     <tx:transaction method="updateAddress,
> > >> >>>>> createAddress,
> > >> >>>>>>>>>>>>>> deleteAddress" value="Required" />
> > >> >>>>>>>>>>>>>>     <tx:transaction method="getAddress, findAddresses"
> > >> >>>>>>>>>>>>> value="Supports"
> > >> >>>>>>>>>>>>>> />
> > >> >>>>>>>>>>>>>> </bean>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> We have published a DataSource which is transaction
> aware
> > >> >>>>> for
> > >> >>>>>>> our
> > >> >>>>>>>>>>>>>> components to use. It shows up in SMX as the following:
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> aries.xa.aware = true
> > >> >>>>>>>>>>>>>> dsName = ds
> > >> >>>>>>>>>>>>>> objectClass = javax.sql.DataSource
> > >> >>>>>>>>>>>>>> service.id = 298
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> In our components we are able to perform database
> > >> >>>>>> transactions
> > >> >>>>>>>> that
> > >> >>>>>>>>>>>>>> successfully get committed/rolled back as expected
> > without
> > >> >>>>>>> having
> > >> >>>>>>>>> to
> > >> >>>>>>>>>>>>>> manually enlist the JDBC connection. It works great.
> > Those
> > >> >>>>>> same
> > >> >>>>>>>>>>>>> components
> > >> >>>>>>>>>>>>>> also will send various JMS messages as they
> succeed/fail.
> > >> >>>>> Our
> > >> >>>>>>>> goal
> > >> >>>>>>>>> is
> > >> >>>>>>>>>>>>> that
> > >> >>>>>>>>>>>>>> if a component sends a JMS message on success and later
> > >> >>>>> rolls
> > >> >>>>>>>> back
> > >> >>>>>>>>> the
> > >> >>>>>>>>>>>>> JMS
> > >> >>>>>>>>>>>>>> message would be retracted. If we lookup a JMS
> > >> >>>>>>> ConnectionFactory,
> > >> >>>>>>>>>>> create
> > >> >>>>>>>>>>>>> a
> > >> >>>>>>>>>>>>>> connection, session, manually enlist the session into
> the
> > >> >>>>>>> current
> > >> >>>>>>>>>>>>>> transaction and send the message all in code it
> actually
> > >> >>>>>> works
> > >> >>>>>>> as
> > >> >>>>>>>>>>>>> desired.
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> What we hope to be able to do however is to remove the
> > code
> > >> >>>>>> and
> > >> >>>>>>>> use
> > >> >>>>>>>>>>> camel
> > >> >>>>>>>>>>>>>> instead to process the message and pass it along to the
> > JMS
> > >> >>>>>>>> topic,
> > >> >>>>>>>>> in
> > >> >>>>>>>>>>> the
> > >> >>>>>>>>>>>>>> same transaction that the OSGI component is running in
> > but
> > >> >>>>> we
> > >> >>>>>>>> can't
> > >> >>>>>>>>>>> quite
> > >> >>>>>>>>>>>>>> get it to work. Below is our latest configuration and
> > code
> > >> >>>>>> and
> > >> >>>>>>> at
> > >> >>>>>>>>> this
> > >> >>>>>>>>>>>>>> point the message posts to the topic but never rolls
> > back.
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> Blueprint File
> > >> >>>>>>>>>>>>>> <bean id="activemq"
> > >> >>>>>>>>>>>>>>
> > >> >>>>>> class="org.apache.activemq.camel.component.ActiveMQComponent">
> > >> >>>>>>>>>>>>>>     <property name="connectionFactory"
> > >> >>>>>>>>>>> ref="jmsXaConnectionFactory"/>
> > >> >>>>>>>>>>>>>>     <property name="transacted" value="true"/>
> > >> >>>>>>>>>>>>>>     <property name="transactionManager"
> > >> >>>>>>>>>>> ref="jmsTransactionManager"/>
> > >> >>>>>>>>>>>>>> </bean>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> <bean id="mandatory"
> > >> >>>>>>>>>>>>>>
> > >> >>>>> class="org.apache.camel.spring.spi.SpringTransactionPolicy">
> > >> >>>>>>>>>>>>>>     <property name="transactionManager"
> > >> >>>>>>>>>>> ref="jmsTransactionManager"/>
> > >> >>>>>>>>>>>>>>     <property name="propagationBehaviorName"
> > >> >>>>>>>>>>>>>> value="PROPAGATION_MANDATORY"/>
> > >> >>>>>>>>>>>>>> </bean>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> <bean id="jmsXaConnectionFactory"
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>> class="org.apache.activemq.ActiveMQXAConnectionFactory">
> > >> >>>>>>>>>>>>>>     <property name="brokerURL"
> > >> >>>>>>> value="tcp://localhost:61616"/>
> > >> >>>>>>>>>>>>>> </bean>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> <reference id="jmsTransactionManager"
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>
> > >> >>>>>>
> > >> >>>
> > >>
> interface="org.springframework.transaction.PlatformTransactionManager"/>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> <camel:camelContext id="camelCtx" trace="true">
> > >> >>>>>>>>>>>>>>     <camel:route>
> > >> >>>>>>>>>>>>>>         <camel:from uri="direct:genEvent"/>
> > >> >>>>>>>>>>>>>>         <camel:wireTap uri="direct:wireTap"/>
> > >> >>>>>>>>>>>>>>         <camel:transacted ref="mandatory"/>
> > >> >>>>>>>>>>>>>>         <camel:to
> > >> >>>>>> uri="activemq:topic:event-notifications"/>
> > >> >>>>>>>>>>>>>>     </camel:route>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>     <camel:route>
> > >> >>>>>>>>>>>>>>         <camel:from uri="direct:wireTap"/>
> > >> >>>>>>>>>>>>>>         <camel:to uri="log:logger?showAll=true"/>
> > >> >>>>>>>>>>>>>>     </camel:route>
> > >> >>>>>>>>>>>>>> </camel:camelContext>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> Code:
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>     ProducerTemplate pt =
> > >> >>>>>> camelCtx.createProducerTemplate();
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>     Map<String, Object> headers = new HashMap<String,
> > >> >>>>>>>> Object>();
> > >> >>>>>>>>>>>>>>     headers.put("EventType", eventType);
> > >> >>>>>>>>>>>>>>     headers.put("ClientID", 0);
> > >> >>>>>>>>>>>>>>     headers.put("EntityType", "Address");
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>     pt.sendBodyAndHeaders("direct:genEvent",
> > >> >>>>>>>>> getAddress(addressID),
> > >> >>>>>>>>>>>>>> headers);
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> Like I mentioned, the code all works in the success
> case
> > >> >>>>> but
> > >> >>>>>>>>> doesn't
> > >> >>>>>>>>>>>>>> rollback the JMS message in the failure case.
> Apparently
> > >> >>>>> the
> > >> >>>>>>>>>>> transaction
> > >> >>>>>>>>>>>>>> context isn't being passed on to the camel route even
> > >> >>>>> though
> > >> >>>>>>> it's
> > >> >>>>>>>>>>> using
> > >> >>>>>>>>>>>>> the
> > >> >>>>>>>>>>>>>> same transaction manager under the covers. Is that by
> > >> >>>>> design
> > >> >>>>>> or
> > >> >>>>>>>> is
> > >> >>>>>>>>>>> there
> > >> >>>>>>>>>>>>> a
> > >> >>>>>>>>>>>>>> way to make this scenario work? We'd really like to be
> > able
> > >> >>>>>> use
> > >> >>>>>>>> the
> > >> >>>>>>>>>>> camel
> > >> >>>>>>>>>>>>>> route approach so we can do more complex things than
> > what I
> > >> >>>>>>> show
> > >> >>>>>>>>> here.
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>> Thanks,
> > >> >>>>>>>>>>>>>> Chris
> > >> >>>>>>>>>>>>>>
> > >> >>>>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>>> --
> > >> >>>>>>>>>>> Claus Ibsen
> > >> >>>>>>>>>>> -----------------
> > >> >>>>>>>>>>> CamelOne 2012 Conference, May 15-16, 2012:
> > >> http://camelone.com
> > >> >>>>>>>>>>> FuseSource
> > >> >>>>>>>>>>> Email: cib...@fusesource.com
> > >> >>>>>>>>>>> Web: http://fusesource.com
> > >> >>>>>>>>>>> Twitter: davsclaus, fusenews
> > >> >>>>>>>>>>> Blog: http://davsclaus.blogspot.com/
> > >> >>>>>>>>>>> Author of Camel in Action: http://www.manning.com/ibsen/
> > >> >>>>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>>
> > >> >>>>>>>>> --
> > >> >>>>>>>>> Claus Ibsen
> > >> >>>>>>>>> -----------------
> > >> >>>>>>>>> CamelOne 2012 Conference, May 15-16, 2012:
> > http://camelone.com
> > >> >>>>>>>>> FuseSource
> > >> >>>>>>>>> Email: cib...@fusesource.com
> > >> >>>>>>>>> Web: http://fusesource.com
> > >> >>>>>>>>> Twitter: davsclaus, fusenews
> > >> >>>>>>>>> Blog: http://davsclaus.blogspot.com/
> > >> >>>>>>>>> Author of Camel in Action: http://www.manning.com/ibsen/
> > >> >>>>>>>>>
> > >> >>>>>>>>
> > >> >>>>>>>
> > >> >>>>>>
> > >> >>>>>
> > >> >>>
> > >>
> > >
> > >
> >
> >
> > Atos Worldline SA/NV - Chaussee de Haecht 1442 Haachtsesteenweg
> > - 1130 Brussels - Belgium
> > RPM-RPR Bruxelles-Brussel - TVA-BTW BE 0418.547.872
> > Bankrekening-Compte Bancaire-Bank Account 310-0269424-44
> > BIC BBRUBEBB - IBAN BE55 3100 2694 2444
> >
> > "The information contained in this e-mail and any attachment thereto is
> > confidential and may contain information which is protected by
> intellectual
> > property rights.
> > This information is intended for the exclusive use of the recipient(s)
> > named above.
> > This e-mail does not constitute any binding relationship or offer toward
> > any of the addressees.
> > If you are not one of the addressees , one of their employees or a proxy
> > holder entitled to hand over this message to the addressee(s), any use of
> > the information contained herein (e.g. reproduction, divulgation,
> > communication or distribution,...) is prohibited.
> > If you have received this message in error, please notify the sender and
> > destroy it immediately after.
> > The integrity and security of this message cannot be guaranteed and it
> may
> > be subject to data corruption, interception and unauthorized amendment,
> for
> > which we accept no liability."
> >
>

Reply via email to