`
echohfut
  • 浏览: 233115 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Transaction Attribute

阅读更多

 

 

 

 

2. Spring Framework 支持的事务属性

1) PROPAGATION_REQUIRED --支持当前的事务,如果不存在就创建一个新的。这是最常用的选择。
2) PROPAGATION_SUPPORTS --支持当前的事务,如果不存在就不使用事务。
3) PROPAGATION_MANDATORY --支持当前的事务,如果不存在就抛出异常。
4)PROPAGATION_REQUIRES_NEW --创建一个新的事务,并暂停当前的事务(如果存在)。
5) PROPAGATION_NOT_SUPPORTED --不使用事务,并暂停当前的事务(如果存在)。
6) PROPAGATION_NEVER --不使用事务,如果当前存在事务就抛出异常。
7) PROPAGATION_NESTED --如果当前存在事务就作为嵌入事务执行,否则与PROPAGATION_REQUIRED类似。

 

 

3. 注意事项

 

1)PROPAGATION_REQUIRES_NEW 与 PROPAGATION_NESTED

     PROPAGATION_REQUIRES_NEW 启动一个新的, 不依赖于环境的 "内部" 事务. 这个事务将被完全 commited 或 rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等. 当内部事务开始执行时, 外部事务将被挂起, 内务事务结束时, 外部事务将继续执行. 

    另一方面, PROPAGATION_NESTED 开始一个 "嵌套的" 事务,  它是已经存在事务的一个真正的子事务. 潜套事务开始执行时,  它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交. Savepoint需要最新的JDBC规范来支持。JDBC3?

    由此可见, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于, PROPAGATION_REQUIRES_NEW 完全是一个新的事务, 而 PROPAGATION_NESTED 则是外部事务的子事务, 如果外部事务 commit, 嵌套事务也会被 commit, 这个规则同样适用于 roll back.

 

2)Required和mandatory事务属性

一般写操作配置成这两种事务。

两种都支持transaction context. 区别在如果调用时没有transaction context, Required的会发起一个新的事务。而mandatory的会抛出异常。

 

深层次的区别基于下面的规则:

With the exception of the stateful session bean, the method that starts a transaction must be the same method that terminates the transaction.

 

因为Required不能确认事务是否是在此方法中启动的还是从外面传进来的,因此不知道是否该做rollback这种处理当出现异常时。而Mandatory确认事务都是从外面传入的,因此知道自己不需要处理这种逻辑。

 

也就是说,如果事务不是在该层发起(客户端发起传入的),那么该层写操作就配置成Mandatory属性,要求调用方必须传入Transaction context;反之事务发起的层写操作应该设成required, 因为它可以控制事务的发起,回滚,提交等。

分享到:
评论

相关推荐

    解决osgi spring 事务配置问题

    <tx:transaction attribute="REQUIRED" /> ``` - 或者,使用Declarative Services(DS)的XML配置: ```xml ``` 5. **处理类加载器问题**: - 由于OSGi的类加载机制,同一个类可能由不同的类...

    mongoid_transaction:使用TokuMx在Mongoid中进行交易

    Mongoid交易 该gem用于使用TokuMx提供的Transaction API以及mongoid。 ##请勿使用此GEM(如果您看到此行)。 工作正在进行中。 安装 将此行添加到您的应用程序的Gemfile中: ...,set,update_attribute)

    Oracle-ERP-库存管理INV-8个表结构.docx

    此部分主要围绕`MTL_TRANSACTION_TYPES`表展开,并对其结构、索引以及权限设置等方面进行全面剖析。 ### MTL_TRANSACTION_TYPES表详解 #### 表结构 `MTL_TRANSACTION_TYPES`是库存管理系统中用于记录交易类型的...

    OpenCart 1.5.6数据字典

    - `attribute_group_id`: 与`attribute_group`表关联,表示属性组的描述。 - `language_id`: 与语言表关联,表示描述的语言版本。 - `name`: 属性组的名称。 8. **Banner 表**: - `banner_id`: 广告的唯一标识...

    NTFS Documentation

    A transaction log that records changes made to the file system. This log is crucial for crash recovery and maintaining the integrity of the file system. ##### NTFS Files: $Volume (3) Contains ...

    C#自己实现AOP的事务操作

    [Transaction] public void SaveData() { // 数据库操作 } } ``` 当调用`SaveData`方法时,我们可以通过反射获取到`TransactionAttribute`,并使用`ExecuteWithTransaction`方法来包装业务逻辑,确保在事务中...

    sql高级考试试题

    这是因为在E-R图中,实体(Entity)用矩形表示,属性(Attribute)用椭圆表示,而关系(Relationship)则用菱形表示,以此区分不同概念的视觉呈现。 6. **SQL Server的登录认证机制**:SQL Server支持两种登录认证...

    Windows6.1-KB947821-v27-x86.part1

    系统更新准备工具可修复 Windows 7、Windows Vista、Windows ...0x8007371B ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 一个或多个要求的事务成员不存在。 0x80070490 ERROR_NOT_FOUND Windows 无法搜索新更新

    Windows6.1-KB947821-v27-x86.part2

    系统更新准备工具可修复 Windows 7、Windows Vista、Windows ...0x8007371B ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 一个或多个要求的事务成员不存在。 0x80070490 ERROR_NOT_FOUND Windows 无法搜索新更新。

    Nhibernate

    实体类需要标记为`NHibernate.Mapping.Attributes.ClassAttribute`,并且属性通常使用`PropertyAttribute`或`IdAttribute`标记。 3. **映射文件(Mapping Files)**:映射文件定义了实体类与数据库表之间的关系。它...

    stun_codec:用于STUN(RFC 5389)及其扩展名的解码器和编码器

    use stun_codec :: rfc5389 :: {attributes :: Software, methods :: BINDING, Attribute}; // Creates a message let mut message = Message :: new (MessageClass :: Request, BINDING, TransactionId :: new ([ 3...

    hibernate基础

    4. **属性映射(Attribute Mapping)** 使用`@Id`、`@GeneratedValue`来标识主键,其他字段可以通过`@Column`注解进行映射。还可以使用`@ManyToOne`、`@OneToOne`、`@OneToMany`、`@ManyToMany`等注解处理关联关系...

    hibernate

    - 类属性到表列的映射 (`Class attribute to table column`) - 类间关系到表间关系的映射 (`Class relationship to table relationship`) 4. **配置 hibernate.cfg.xml** - 配置信息包括: - **持久化映射** ...

    Drools Jboss Rules 5.0 Developer's Guide

    <attribute name="inputType">org.drools.decisiontable.InputType.XLS</attribute> <cell>700 <cell>High <cell>Approved <!-- 更多规则行 --> ``` ##### 4. **复杂事件处理...

    ISO8583接口的详细资料.docx

    5. **FLD07: TRANSACTION DATE AND TIME** - 类型:定长 - 长度:10字节 - 描述:交易日期和时间,格式为YYMMDDHHMM。 6. **FLD11: SYSTEM TRACE AUDIT NUMBER (STAN)** - 类型:定长 - 长度:6字节 - 描述:...

    面向对象课程设计(银行自助管理)

    3. 属性(Attribute):每个类都包含一些变量,代表对象的状态。例如,`Account`类可能有`balance`属性来记录账户余额。 4. 方法(Method):类中定义的函数称为方法,用于操作或改变对象的状态。如`deposit()`和`...

    Hibernate课件.doc

    - **映射细节**:定义 Java 类(Classname)与数据库表(table name)、主键(Id)与表的主键列(pk)、类属性(Class attribute)与表列(table columns)以及类间关系(Class relationship)与表间关系。...

    ISO8583报文协议详解

    int attribute; // 保留 } ISO8583; ``` #### 四、具体字段实例 接下来我们来看几个具体的字段实例,以便更深入地理解每个字段的含义及其在实际应用中的用法。 1. **位图(Extended Bitmap, FLD1)** - 类型:定...

Global site tag (gtag.js) - Google Analytics