关闭

事务的传播

497人阅读 评论(1) 收藏 举报

Transacation Propagation
如果方法抛出了一个系统异常或需要回滚的应用异常,则事务将会被自动回滚。

在容器对事务采取隐式管理的情况下,EJB服务器transaction manager会自动对事务进行管理。

它对事务进行协调,并将事务范围从一个EJB传播至下一个EJB,从而保证同一事务所涉及的所有

EJB都会被包含在事务的工作单元之内。这样transaction manager就可以监控每个enterprise

bean所作的更新,并根据这些更新的执行情况,决定是将所有由enterprise bean所做的更新全

部提交至数据库,还是将其全部回滚。

EJB服务器除了在其自己的环境中对事务进行管理外,还可以与其他的事务型系统协同工作。

事务和persistence context的传播

当我们在同一事务中调用多个使用entity manager的不同EJB时,有一些事务传播的规则是需要

考虑的。以下是详细的persistence context传播规则。

1.如果在事务范围之外调用transaction-scoped的entity manager,它就会创建一个与方法调用

时间等长的persistence context。当方法调用完成之后,任何由本次调用所产生的托管对象都

会随即变成游离对象。

2.如果在事务范围之内调用transaction-scoped的entity manager,并且也没有现成的

persistence context与事务关联,则容器将会创建一个新的persistence context。

3.如果在事务范围之内调用entity manager,且事务已经关联了某个persistence context,则

entity manager将会使用改persistence context。Persistence context会在同一事务中的不同

EJB调用之间进行传播。亦即,如果一个EJB在某一个事务中与注入的entity manager进行交互,

随后又在同一事务中调用了其他EJB,则改EJB调用将会使用同样的persistence context。(本人在项目中较多的使用了这种。)

4.如果使用transaction-scoped persistence context 的EJB调用了使用extended persistence

context的stateful session bean,则会导致错误发生。

5.如果使用extended persistence context的stateful session bean调用了另一个注入

transaction-scoped persistence context的EJB,则extended persistence context会被传播


6.如果一个EJB调用了具有不同事务范围的另一个EJB,则无论 persistence context是否是

extended的,它都不会被传播。

7.如果使用extended persistence context的stateful session bean 调用了另一个不是通过注

入方式获得的stateful session bean,且该session bean也具备extended persistence

context,则会导致错误发生。如果你将一个stateful session bean注入到另一stateful

session bean中,两个bean会共享同一个extended persistence context。不过,如果你是
手工创建的stateful session bean,则persistence context是不会被共享的。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:176170次
    • 积分:2905
    • 等级:
    • 排名:第12234名
    • 原创:99篇
    • 转载:34篇
    • 译文:0篇
    • 评论:72条
    JavaEye
    在线书籍