I have had a context happily set up using XA transactions for several days.

As long as I am triggering it from a "direct:start" producer, then
everything is fine - my XA transactions work.

As soon as I change it to trigger from the jetty http endpoint
producer, I get an error when I do my first queue write:  Session's
XAResource has not been enlisted in a distributed transaction.  If I
switch it back to "direct:start", then no problem.

I have tried playing about with this every which way to no avail.  Can
anyone help?

        <camelContext id="cargo-publish-new-polices-context"
xmlns="http://camel.apache.org/schema/spring";>

                <errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="vm:frameError"
                        useOriginalMessage="true">
                        <redeliveryPolicy maximumRedeliveries="5"
retryAttemptedLogLevel="WARN" redeliveryDelay="500" />
                </errorHandler>

                <dataFormats>
                        <jaxb id="jaxb" 
contextPath="com.catlincargo.cargopolicy._1" />
                </dataFormats>

                <route id="getNewPolicies">
                        <!--
                        <from uri="direct:start" />
                        -->
                        <from 
uri="jetty:http://localhost:11000/cargoFrameIntegration"/>
                        <to uri="vm:cargoNewPoliciesIn" />
                </route>

                <route id="publishNewPolicies">
                        <from uri="vm:cargoNewPoliciesIn" />
                        <transacted />
                        <bean ref="policyProducer" />
                        <split>
                                <simple>${body}</simple>
                                <process ref="preMarshalingProcessor" />
                                <marshal ref="jaxb" />
                                <to uri="activemq:queue:cargoNewPolicies" />
                        </split>
                        <process ref="processedModVersionUpdateProcessor" />
                </route>

                <route id="invokeFrame" errorHandlerRef="deadLetterChannel">
                        <from uri="activemq:queue:cargoNewPolicies" />
                        <transacted />
                        <unmarshal ref="jaxb" />
                        <process ref="frameInvocationProcessor" />
                </route>

                <route id="handleFrameError">
                        <from uri="vm:frameError" />
                        <transacted />
                        <unmarshal ref="jaxb" />
                        <process ref="errorLogProcessor" />
                        <process ref="preMarshalingProcessor" />
                        <marshal ref="jaxb" />
                        <to uri="activemq:queue:cargoNewPoliciesError" />
                </route>

        </camelContext>


--
Simon Godden

Reply via email to