【发布时间】:2014-06-25 06:18:59
【问题描述】:
这很奇怪,但我可能在这里遗漏了一些东西
我正在使用quartz 来初始化spring config xml。当我第一次触发石英作业时,发生异常时事务会回滚。但是当再次触发相同的作业时,事务不会因相同的异常而回滚。
我可以从日志中看到,当第一次触发作业时,数据源(从 Websphere 数据源对 Sybase Jconnect 7 的 jndi 查找)被初始化(不是第二次)。
服务层
@Transactional(value="transactionManager", propagation=Propagation.REQUIRES_NEW, rollbackFor=Exception.class)
public void saveInfo(
List<Foo> saveData) throws Exception {
try{
myDAO.saveInfo(saveData); //data to rollback on exception. Works First time only :(
}
catch(Exception ex){
logBO.createActivityLog("Error Saving Data");
throw ex;
}
}
Spring-config.xml
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
我已经使用了所有 REQUIRED/REQUIRES_NEW/没有传播的传播设置。
DAO 方法进行批量更新 (jdbcTemplate)
编辑
在第一次时,此行被记录
J2CA0086W: 可共享连接 MCWrapper id 4c384c38 托管 连接 WSRdbManagedConnectionImpl@6f5a6f5a 状态:使用了资源 mydatasource 中的STATE_TRAN_WRAPPER_INUSE 在本地事务包含边界内。
【问题讨论】:
标签: java spring transactions quartz-scheduler