You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Christian Schneider (JIRA)" <ji...@apache.org> on 2016/05/07 07:06:12 UTC

[jira] [Commented] (ARIES-1548) JTA container managed transaction rollback not working for jaxrs endpoint

    [ https://issues.apache.org/jira/browse/ARIES-1548?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15275133#comment-15275133 ] 

Christian Schneider commented on ARIES-1548:
--------------------------------------------

Of what relevance is the camel route? Can you reproduce the problem with just the jaxrs endpoint?

If you can reproduce with just jaxrs then I think your DataSource is not enlisting in the JTA transaction. That means that the jta transaction rolls back but the DataSource is never notified of it. 
How did you setup your JTA DataSource?

You should use pax-jdbc with the XA support:
https://ops4j1.jira.com/wiki/display/PAXJDBC/Pooling+and+XA+support+for+DataSourceFactory


> JTA container managed transaction rollback not working for jaxrs endpoint
> -------------------------------------------------------------------------
>
>                 Key: ARIES-1548
>                 URL: https://issues.apache.org/jira/browse/ARIES-1548
>             Project: Aries
>          Issue Type: Bug
>          Components: Transaction
>         Environment: JBoss Fuse 6.2.1, JDK7
> Testing environment Windows 7 x64
>            Reporter: Allan Cheong Tyng Huei
>
> Rest Endpoint
> <jaxrs:server id="jaxrs" address="http://127.0.0.1:8080/jaxrs">
>     <jaxrs:serviceBeans>
>         <ref component-id="service1" />
>         ...
>         ...
>         <ref component-id="serviceX" />
>     </jaxrs:serviceBeans>
>     <jaxrs:providers>
>         <ref component-id="runtimeExceptionMapper" />
>     </jaxrs:providers>
> </jaxrs:server>
> Route
> <route id="secureBridgeRoute">
>     <from uri="jetty:https://0.0.0.0:443/jaxrs?sslContextParametersRef=sslContextParameters&amp;matchOnUriPrefix=true&amp;minThreads=8&amp;maxThreads=16" />
>     <transacted ref="JTA_TRANSACTION" />
>     <to uri="jetty:http://127.0.0.1:8080/jaxrs?bridgeEndpoint=true&amp;throwExceptionOnFailure=true" />
> </route>
> DAO
> <bean id="dao1" class="com.example.Dao1" activation="eager">
>     <jpa:context unitname="PU" property="entityManager" type="TRANSACTION" />
> </bean>
> Service bean
> <bean id="service1" class="com.example.Service1" activation="eager">
>     <property name="dao1" ref="dao1" />
>     <property name="dao2" ref="dao2" />
>     <tx:transaction method="*" value="Required" />
> </bean>
> Service bean method pseudocode
> public void create(entity1, entity2) {
>     dao1.persist(entity1);
>     dao2.persist(entity2);
> }
> When dao2 persist failed, the transaction did not get rolled back. Entity1 is inserted into the DB.
> Additional information
> 1) TransactionManager definition
> <reference id="platformTransactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
> <bean id="JTA_TRANSACTION" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
>     <property name="transactionManager" ref="platformTransactionManager" />
>     <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" />
> </bean>
> 2) My persistent unit is of type JTA and hibernate as the provider.
> 3) I have an ExceptionMapper, which when I look into it, the stacktrace shows the transaction indeed is marked for rollback.
> 4) The service beans are not separated to another bundle.
> 5) Hibernate autocommit is NOT true.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)