SSI,事物是由spring AOP声明式管理的,定义在service层;
下面是我的事物属性:
[code="java"]
[/code]
在service层方法中有两个操作A,B。
B是service的另外一个方法,我自己在B方法中抛了个RuntimeException;
REQUIRES_NEW是会重新声明一个事物,所以A,B是两个不同的事物。
我现在的问题是B抛出异常后,按理说只有rollback才对啊,但是现在的情况是A,B都rollback!!
PROPAGATION_REQUIRES_NEW:二个事务没有信赖关系,不会存在A事务的成功取决于B事务的情况。有可能存在A提交B失败。A失败(比如执行到doSomeThingB的时候抛出异常)B提交,AB都提交,AB都失败的可能
PROPAGATION_REQUIRES_NEW的使用条件:JtaTransactionManager作为事务管理器
又是你吧?你service操作A/B的方法的事务传播行为是什么?如果默认的话,是required,是都会被回滚的,设置成这个试试PROPAGATION_SUPPORTS
你的addUser方法里调用了deleteUser方法,事务肯定是同一个。同一个方法有不同的事务怎么做到事务的一致?矛盾的呀。。。
不管设置都会回滚的
试一试
public void addUser(User user) {
userDaoImpl.addUser(user);
try {
this.deleteUser(1);
} catch(Excp e) {
// XXXOO
}
}
Spring的事务是通过[b]AOP[/b]来实现的,OK?
如果是动态代理的话,你在service内部 A调用B,是没有经过AOP的,怎么会有REQUIRES_NEW呢。
你可以尝试A和B在不同的类,再试试。