Hello community
I am trying to write a transacted route following the block diagram in
Camel in action book section 12.2.1
Using org.springframework.transaction.jta.JtaTransactionManager. I create a
bean of this class and add it into the application context.
Following is the error I receive :
=======================
org.springframework.transaction.CannotCreateTransactionException: No
JTA UserTransaction available - programmatic
PlatformTransactionManager.getTransaction usage not supported
at
org.springframework.transaction.jta.JtaTransactionManager.doGetTransaction(JtaTransactionManager.java:798)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:342)
at
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137)
at
org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:182)
at
org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:140)
at
org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:107)
at
org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:116)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
at
org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:220)
at
org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:79)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:876)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623)
at
org.eclipse.jetty.servlets.MultiPartFilter.doFilter(MultiPartFilter.java:150)
at
org.apache.camel.component.jetty.CamelFilterWrapper.doFilter(CamelFilterWrapper.java:43)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1347)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1249)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:505)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:781)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:917)
at java.lang.Thread.run(Thread.java:748)
My route looks as follows
=======================
<route customId="false" id="route2">
<from uri="jetty:http://0.0.0.0:8081/txn?httpMethodRestrict=GET"/>
<transacted id="transacted1">
<log id="log6" message="Received http payload : ${body}"/>
<setBody id="setBody1">
<simple>insert into mydb.transaction_test (name) values ( '${
property.name}' )</simple>
</setBody>
<log id="log2" loggingLevel="INFO" message="Executing Sql Statement
: ${body}"/>
<to id="to3"
uri="jdbc:fc9af189-1fe3-4d3b-8ac6-06a5a65dbe6a?resetAutoCommit=false"/>
<process id="process4"/>
<setBody id="setBody2">
<simple>update mydb.transaction_test set age =
'${property.age}' where name1 = '${property.name}'</simple>
</setBody>
<log id="log3" loggingLevel="INFO" message="Executing Sql Statement
: ${body}"/>
<to id="to4"
uri="jdbc:fc9af189-1fe3-4d3b-8ac6-06a5a65dbe6a?resetAutoCommit=false"/>
<setBody id="setBody3">
<expressionDefinition>language[simple:{ "status" : "ok"
}]</expressionDefinition>
</setBody>
<log id="log4" loggingLevel="INFO" message="${body}"/>
</transacted>
</route>