事务的传播

原创 2007年09月22日 14:24:00

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是不会被共享的。

相关文章推荐

Spring事务的传播特性和隔离级别

  • 2017年10月31日 16:14
  • 16KB
  • 下载

spring事务几种传播方式

  • 2017年07月31日 18:05
  • 30KB
  • 下载

PROPAGATION_REQUIRED及其他6种事务传播行为种类

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 表1事务传播行为类型 ...

spring 事务传播

  • 2014年02月27日 10:49
  • 149KB
  • 下载

Spring事务传播特性解析

  • 2013年11月05日 01:00
  • 8.2MB
  • 下载

spring的事务的传播方式

事务传播行为:是指添加事物时的策略  1 PROPAGATION_REQUIRED   如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 2  P...

Spring事务的传播特性

Spring中通过Propagation来设置事务的传播属性的,在这个属性中提供了我们其中关于事务传播的特性:        1.     PROPAGATION_REQUIRED:支持当前事务,如果...
  • lfsf802
  • lfsf802
  • 2013年07月23日 08:32
  • 5703

SpringHibernate事务及传播特性

  • 2012年10月31日 23:26
  • 31KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 事务的传播
举报原因:
原因补充:

(最多只允许输入30个字)