使用jdbc模板,Spring声明式事务管理失败

时间:2014-11-05 07:36:29

标签: java spring jdbc spring-transactions

我使用的是Spring 3.2.2版本,

当我使用@Transactional和jdbc模板

时,我遇到了问题

我的XML配置如下:

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"
    p:sessionFactory-ref="sessionFactory" />

<bean id="reportTransactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="reportDataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" order="0"/>
<tx:annotation-driven transaction-manager="reportTransactionManager" order="1"/>

代码:

@Transactional(value = "reportTransactionManager", rollbackFor = Exception.class)
public ReportResponse deleteAndSave(input) throws ReportServiceException {

        service1.saveData(input);
        service2.saveData(input);
        service3.saveData(input);
        service4.saveData(input);
        service5.saveData(input);
        service6.saveData(input);
        service7.saveData(input);



    } catch (Exception exception) {
        _LOGGER.debug("Caught exception all KPI changes should be reverted back for scenario id {}", scenarioId);
        _LOGGER.error(ExceptionUtils.getFullStackTrace(exception));
        throw new ReportServiceException(exception.getMessage(), exception);
    }
    return reportResponse;
}

所以问题是任何服务失败都应该回滚,但在我的情况下,如果假设service7失败,除了一个服务,只有service4之外,所有服务都被回滚,

我认为可能是事务没有传播到service4 api,然后我测试了

   TransactionSynchronizationManager.getCurrentTransactionName();
   TransactionSynchronizationManager.isSynchronizationActive();
   TransactionSynchronizationManager.isCurrentTransactionReadOnly();
   TransactionSynchronizationManager.isActualTransactionActive();

它正确地返回了我的事务及其详细信息,但仍然没有回滚

我很惊讶为什么只有那个服务api无法回滚,任何人都可以就此建议我。

注意:除了root方法中的deleteAndSave api之外,没有任何其他服务/存储库类没有任何@transaction becoz默认情况下spring将传播。 我没有任何问题与hibernate transactionManager bcoz这些服务只涉及reportTransactionManager管理器。

0 个答案:

没有答案