首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
jfian在servie上加了Tx.class。事务不起作用。
芒果过敏
2016-11-21 18:39
你好我jfinal在service上加了一个Tx.class。事务不起作用。数据库表示InnoDB。
项目:
JFinal
1
评论区
JFinal
2016-11-21 19:10
业务层 AOP 需要使用 Enhancer.enhance(...) 或者 Duang.duang(...) 进行增强以后才能触发,注意看下手册
回复
ploolp
2016-11-21 21:36
文档频道上线是多么必要啊,否则很多重复性问题
回复
JFinal
2016-11-21 22:00
@ploolp
文档频道是极其重要的,文档频道的功能早在两个月前就做完了,只不过内容还没添加多少,还不能上线
不过这个贴子中涉及的问题在在 jfinal 手册上有详细的介绍,所以很担心即便文档频道上线,也不认真去看
回复
芒果过敏
2016-11-24 15:15
@JFinal
Enhancer.enhance(...) 也使用了。原来Enhancer的 效果只有一层,比如service调用service。
回复
JFinal
2016-11-24 15:24
@芒果过敏
假如你有两个 Service 分别叫做 A 和 B,A 和 B 里面分别有两个业务方法 fa() 和 fb(),那么你在 fa() 上使用 Tx 拦截器,并且对 A 进行 enhance(),在如果 fa() 中调用了 f(),那么 f() 仍然处于事务之中, Tx 是一种环绕型 AOP,其下所有被调用的方法都在事务之中,不必担心
回复
JFinal
2016-11-24 15:25
@芒果过敏
上一个回复讲了这么多,简单来说就是,虽然 enhance 的是 A,但 B的业务方法处于 fa() 事务之中,这个与 B 有没有被 enhance 没有关系,事务依然有效
回复
芒果过敏
2016-11-24 21:14
@JFinal
我有两个业务层 A和B ,方法分别为fa何fb。我在Controller中对A进行了enhance,在fa中又调用了fb(B是用Enhancer.enhance(B)后的一个静态对象 public static B b=new B()),fb又调用了B中的一个私有方法sfb, sfb中进行了数据库操作,先插入数据,后更新另一条数据的某个字段值,更新到超长,然后异常了。 我把Tx.class放在fb上数据会回滚,放在sfb上就不会回滚。
回复
Bay_Max
2017-08-15 14:56
@JFinal
你好 波总,我的项目采用的是dubbo,没有办法将service层的接口用enhance进行增强,这怎么使用Tx拦截器的方式啊?
回复
JFinal
2017-08-15 16:14
@Bay_Max
使用 Db.tx(...) 做事务就可以了,看一下 jfinal 手册
回复
Bay_Max
2017-08-15 18:18
@JFinal
就只能使用Db.tx(...)做事物,不能使用Tx拦截器,是吗
回复
JFinal
2017-08-15 18:40
@Bay_Max
可以用 Tx 拦截器,但你要确保拦截器可以被触发,触发方式看一下 jfinal 手册,我个人喜欢用 Db.tx(...)
回复
发送
我要反馈
热门反馈
扫码入社