事务的传播

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

深入浅出事务之传播属性

本文参考《java Transaction design strategies》 大部分时候,我们都习惯了spring容器默认的配置,但有时候,我们需要知道更多…… 当使用声明式事...
  • caomiao2006
  • caomiao2006
  • 2014年08月25日 22:49
  • 2076

spring事务传播机制实例讲解

对于SQL事务的概念以及ACID性质,可以参见我的另一篇博文 http://kingj.iteye.com/admin/blogs/1675011spring的管理的事务可以分为如下2类: 逻辑...
  • seelye
  • seelye
  • 2014年10月15日 21:10
  • 22128

spring学习笔记(一)事务的管理和传播特性

spring事务管理    以前没有Spring帮助我们完成事务的时候我们必须自己手动的控制事务,例如当我们项目中仅仅使用hibernate,而没有集成进spring的时候,我们在一个servic...
  • oh_Mourinho
  • oh_Mourinho
  • 2016年05月17日 10:55
  • 1569

浅析Spring 事务(二十一) spring事务的传播行为

经过我们上面一个章节的初步了解,我们已经知道了Spring事务的基本配置,今天我们一起接着讨论一下spring事务的传播...
  • linuu
  • linuu
  • 2016年03月29日 16:07
  • 1958

spring事务的传播特性

Spring 事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务。结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷。 其实这种是不认识 Spring ...
  • loadhai
  • loadhai
  • 2014年01月03日 21:28
  • 20282

深入理解事务--Spring事务的传播机制

事务的嵌套概念 所谓事务的嵌套就是两个事务方法之间相互调用。spring事务开启 ,或者是基于接口的或者是基于类的代理被创建(注意一定要是代理,不能手动new 一个对象,并且此类(有无接口都行)一定...
  • yuanlaishini2010
  • yuanlaishini2010
  • 2015年05月17日 19:56
  • 6841

Spring事务传播特性实例解析

背景介绍         目前系统正在进行代码重构前期预研工作,目标采用spring控制事务以减少开发代码量,提高开发效率。同时避免开发人员编码控制事务所带来的链接没有释放,事务没有提交,出现异常事务...
  • lb85858585
  • lb85858585
  • 2013年11月05日 01:08
  • 24035

Spring的7种事务传播行为类型

1、PROPAGATION_REQUIRED :如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。 2、PROPAGATION_SUPPORTS:支持当前事务,...
  • hsgao_water
  • hsgao_water
  • 2016年10月19日 16:50
  • 3917

SSH(三)---Hibernate事务传播行为种类

注:本文是答5.hibernate事务传播行为种类 的,仅为了自己学习,向原博主致敬。原博文网址: http://www.cnblogs.com/sunniest/p/4646515.html ...
  • u014656992
  • u014656992
  • 2016年03月06日 21:00
  • 1590

事务的传播行为(讲得比较好)

文章一: 我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档)  在我们用SSH开发项目的时候,我们一...
  • wwh578867817
  • wwh578867817
  • 2016年06月22日 20:15
  • 5591
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 事务的传播
举报原因:
原因补充:

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