Spring事务,假如A调用B(对B进行了事务配置),为什么不起作用,假如对A配置事务就起作用,

J2EE 码拜 9年前 (2016-01-29) 1574次浏览
public class MyEntry implements IBaseService{
/**
* 对外唯一入口
*/
public String A(String jsonStr) throws Exception{
}
//此处需要事务
private String B(UserInfo user, UserDetail detail) throws DBException{
baseDao.saveObject(user);
baseDao.saveObject(detail);
}
}
问题描述
假如本人在配置事务的时候,如下
<tx:method name=”A” propagation=”REQUIRED” />
那么假如baseDao.saveObject(detail)异常,整个B方法全部回滚。没问题
但是
假如本人在配置事务的时候仅仅对 name=”B”,并且不对A进行配置事务,如下:
<tx:method name=”B” propagation=”REQUIRED” />
那么假如baseDao.saveObject(detail)异常,方法B不能全部回滚(也就是说虽然baseDao.saveObject(detail)没有保存成功,但是baseDao.saveObject(user)保存成功了)
问一下这个问题到底怎么回事呢。
根据 PROPAGATION_REQUIRED:支持当前事务,假如当前没有事务,就新建一个事务。莫非SPRING的这个没有起到作用吗?
解决方案:5分
不知道是不是事务嵌套啊?假如是的话,下面仅供参考。
http://www.iteye.com/topic/35907/
解决方案:5分
1L是对的  自问自答啊
解决方案:5分
你知道配置事务的原理是什么?实际上就是一个 AOP,AOP 绝对不可能在方法中插入增强处理的!
解决方案:5分
而且还是一个 private 方法,private 根本不可能进行 AOP 处理,原因是 AOP 的代理子类无法对 private 的方法进行增强。
解决方案:5分
1 # 说的有理貌似。
解决方案:5分
4楼给的那个文档应该说的很明白吧
解决方案:4分
<tx:method name=”B” propagation=”REQUIRED” />
多配置一个节点就能解决的事情。
解决方案:4分
A是业务操作?
解决方案:4分
你要弄清楚这个问题,你必须要对 AOP 有一定地了解才做得到!Spring 的 AOP 在有接口的情况下将使用 JDK 的 Proxy,有兴趣的话去看一下 java.lang.reflect.Proxy 这个类和java.lang.reflect.InvocationHandler 接口。
解决方案:4分
A方法处理额外的逻辑,而这些逻辑中除了调用B方法外,不需要其他事务的啊。这就说明问题了,A方法才是关键啊。
解决方案:4分
莫非是抛出的异常没有捕获?DBException–》Exception

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Spring事务,假如A调用B(对B进行了事务配置),为什么不起作用,假如对A配置事务就起作用,
喜欢 (0)
[1034331897@qq.com]
分享 (0)