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