Nor*_*Ren 25 transactions nested-transactions java-ee ejb-3.0
我刚刚阅读了"掌握EJB 3.0"的事务章节(10),现在我对嵌套事务感到困惑.
这本书说
"EJB定义的事务管理器不支持嵌套事务;它只需要支持平面事务." (网站278,注)
这个事实不仅在本书中有所描述,我在其他书籍/网站上发现了这一说法.
但是,如果我从a调用一个"Requires New"注释方法,让我们说"必需"注释Methode,我所拥有的是一个嵌套事务,不是吗?我可以回滚内部事务或提交它,而不会影响外部事务.如果我想要中止外部事务,我会抛出一个EJBException,整个事务将被回滚.
那么,只是EJB 3.0规范不要求这种行为,或者我误解了什么?我无法区分嵌套事务和描述的行为.
关心诺曼
Bre*_*ail 41
RequiresNew不会创建嵌套事务,因为第一个事务在第二个事务运行时被挂起.嵌套事务如下所示:
Nested transaction example
> method1 - begin tran1
> method2 - begin tran2
workA
< method2 - commit tran2
< method1 - rollback tran1 (tran2 also rolled back because it's nested)
Run Code Online (Sandbox Code Playgroud)
相反,RequiresNew看起来像这样:
EJB RequiresNew example
> method1 - begin tran1
> method2 - suspend tran1, begin tran2
workA
< method2 - commit tran2, resume tran1
< method1 - rollback tran1 (tran2 remains committed)
Run Code Online (Sandbox Code Playgroud)
简单的答案是"外部"事务在新事务开始之前被暂停.两个事务的命运没有任何联系,所以所有意图和目的都不会嵌套到另一个事务中.
如果REQUIRES_NEW方法抛出EJBException它,则它创建的新事务将被回滚,而不是"外部"事务.
| 归档时间: |
|
| 查看次数: |
16529 次 |
| 最近记录: |