It looks like you have to configure the JtaTransactionManger with some backend JTA implementaions.
On Thu, Sep 24, 2020 at 11:05 PM Reji Mathews <[email protected]> wrote: > 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> >
