2016-05-03 4 views
13

Rest EndpointJTA контейнер удалось откат транзакции не работает jaxrs конечной точки

<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 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> 

служба боб

<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> 

Сервисный метод боб псевдокод

boolean create(entity1, entity2) { 
    dao1.persist(entity1); 
    dao2.persist(entity2); 
} 

Когда dao2 не проходят не удалось, сделка не получить откат. Entity1 вставляется в БД.

Дополнительная информация

1) TransactionManager определение

<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) Моя постоянная единица имеет тип ССТ и спящий режим в качестве поставщика.

3) У меня есть ExceptionMapper, который, когда я смотрю на него, показывает, что транзакция действительно отмечена для отката.

4) Сервисные бобы не разделены на другой комплект.

5) Автосигнализация спящего режима не является истинной.

мне интересно, если:

  1. CXF OutFaultInterceptor был «съеден» исключение, которое, как предполагается, поймано контейнером для отката транзакции. В результате откат не произошел.

  2. Администратор сущностей должен быть тем же самым экземпляром, который был распространен среди всех DAO для отката.

  3. Может быть, мне нужно отделить услугу в другой комплект?

Оцените, сможет ли кто-нибудь сообщить мне правильный подход к обработке транзакций на уровне обслуживания для конечной точки cxf jaxrs.

ответ