You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Reji Mathews <co...@gmail.com> on 2020/09/24 14:53:53 UTC
Transacted routes with camel // JtaTransactionManager exception
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>
Re: Transacted routes with camel // JtaTransactionManager exception
Posted by Zheng Feng <zf...@redhat.com>.
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 <co...@gmail.com> 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>
>