企业级应用会在一个或多个数据库中存取数据。

这些数据必须是准确的、实时的、可靠的(accurate, current, reliable)

当多个操作同时更新同一条数据时,或者执行一个操作时出现了异常,都可能会导致数据的完整性缺失。

Transaction应运而生。

Transaction会控制多个操作同时访问的情况。

Transaction会在出现异常的时候,执行回滚操作,确保数据处于一致性状态。consistent state。

例:

从账户A转账300到账户B,事务表现为:

begin账户A减去300账户B加上300记录日志
end

三步缺一不可,因此组成一个事务。

事务以begin开始,以commitrollback结束。发生异常的时候,也rollback。

rollback时会把此事务已经完成的操作都恢复回去,因此,即使事务失败了,数据还是一致的,完整的。不会出现账户A已经减了300,而账户B却还没有加上。

两种类型:

Container-Managed Transactions

Bean-Managed Transactions

不同类型的事务,边界界定是不一样的形式。

Container-Managed Transactions

容器里的事务,由EJB容器来设定事务的边界。

代码中无需显式的界定事务。

通常,每个EJB方法都是一个事务。方法开始的时候begin,方法结束的时候commit。不允许嵌套的或多个事务。

非必需的,可以通过属性设置。

如果method-A()所处的事务为TX1,那么method-B()所处的事务是什么?

如果method-A()没处在事务中,嘛呢method-B()的事务应是如何的?

可以通过设置method-B()的属性来控制其事务,即给method-B()加上@TransactionAttribute注释。

TransactionAttribute method-A's Transaction method-B's Transaction
Required None
TX1
TX2
TX1
RequiredNew None
TX1
TX2
TX2
Mandatory None
TX1
Error
TX1
NotSupported None
TX1
None
None
Supports None
TX1
None
TX1
Never None
TX1
None
Error

TransactionAttribute共有6中属性 : Required, RequiredNew, Mandatory, NotSupported, Supports, Never。

表格中显示: method-B's Transaction

TX1时,代表B和A处于同一个事务。

TX2时,代表在执行B之前,容器会把TX1挂起,然后开启一个新的事务TX2,执行完B之后,在重启TX1。

None时,代表B不在事务中执行。

Error时,代表此时的设置,由A来调用B会报错。

属性设置示例:

@TransactionAttribute(NOT_SUPPORTED)
@Stateful
public class TransactionBean implements Transaction {
...@TransactionAttribute(REQUIRES_NEW)public void firstMethod() {...}@TransactionAttribute(REQUIRED)public void secondMethod() {...}public void thirdMethod() {...}public void fourthMethod() {...}
}

Rollback Container-Managed Transactions

(1) system exception : 容器会自动rollback。

(2) EJBContext.setRollbackOnly()。

(3) application exception : 容器不会自动rollback,可通过调用setRollbackOnly()执行rollback。

Container-Managed Transaction中不允许调用的方法:

(1) java.sql.Connection : commit(), rollback(), setAutoCommit()

(2) javax.ejb.EJBContext : getUserTransaction()

(3) javax.transaction.UserTransaction : 所有方法。

Bean-Managed Transactions

Container-Managed Transaction 可以简化代码,但是有其限制: 一个方法要么在一个事务中,要么不在事务中。不能自定义事务。

Bean-Managed Transaction 需要显示的设定事务的开始、结束或回滚,容易控制。

也可称为Application-Managed Transactions

(1) JDBC Transactions

(2) JTA Transactions

关于JDBC和JTA,会在下篇文章中说到。

Link : http://docs.oracle.com/cd/E19798-01/821-1841/6nmq2cpn2/index.html

Transactions相关推荐

  1. System.Transactions介绍

    在.Net Framework 2.0中,新增了一个名称空间:System.Transactions.从其名字就可以看出来,里面包含了Transaction相关的类.System.Transactio ...

  2. 智源唐杰主编的IEEE Transactions on Big Data期刊被SCI收录 | AI日报

    智源唐杰主编的IEEE Transactions on Big Data期刊被SCI收录 今日,IEEE Transactions on Big Data (简称:IEEE TBD)被SCI收录.IE ...

  3. System.Transactions深入了解

    System.Transactions框架包含了一个称为LTM(Lightweight Transaction Manager)的TM,它隐式的将连接登记于事务中,从内部来看,是由ITransacti ...

  4. Oracle sessions,processes 和 transactions 参数 关系 说明

    一.官网说明 1.1 processes 11gR2 的文档: Property Description Parameter type Integer Default value 100 Modifi ...

  5. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。

    "System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 参考文章: (1)"System.Tran ...

  6. System.Transactions:实现你自己的Resource Manager

    By Sahil Malik[http://www.developer.com/net/net/article.php/11087_3565196_1] .net 2.0所带来最大的变化之一也许就是S ...

  7. 谈谈分布式事务之三: System.Transactions事务详解[下篇]

    在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该方法对用于创建基于现有Transaction对 象的"依赖事务(Depende ...

  8. System.Transactions事务超时设置

    System.Transactions 有2个超时属性(timeout 与 maxTimeout),可以通过配置文件来进行设置. 1. timeout System.Transactions 默认的t ...

  9. 使用Atomikos Transactions Essentials实现多数据源JTA分布式事务--转载

    原文:http://www.ite/topic/122700 9.17 update:使用NonXADataSourceBean. Mysql在5.0版本和Connecter/J5.0版本后提供了XA ...

  10. Spring JTA multiple resource transactions in Tomcat with Atomikos example--转载

    原文地址:http://www.javacodegeeks.com/2013/07/spring-jta-multiple-resource-transactions-in-tomcat-with-a ...

最新文章

  1. 多视图立体匹配论文分享CasMVSNet
  2. memcache的分布式缓存问题
  3. 牛客题霸 NC1 大数加法
  4. jquery每次动态加载dom,绑定事件会多一次,
  5. (65)Vue-cli介绍
  6. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,2016年下半年系统架构设计师考试论文真题(论微服务架构及其应用)
  7. 路由器的地址转换功能
  8. GIMP 基本教程(1)
  9. 74ls175四人抢答器电路图_用数字电路实现四人抢答器
  10. 2019 最值得被记录的 14 条 AI 安防领袖语录丨年终盘点
  11. 如何使用plink进行二分类性状的GWAS分析并计算PRS得分
  12. PCM 与WAV相互转换代码
  13. AB01固定资产过账
  14. 安徽大学计算机专业全国大学排名,2017安徽大学优势专业排名
  15. java寻宝题目,寻宝
  16. 由经纬度计算地球上任意两点的距离
  17. 181202 逆向-2018鹏城杯
  18. 赛博朋克版特效shader
  19. ThinkSystem SR650 BMC管理口配置
  20. python识别火车票二维码_python实现的一个火车票转让信息采集器

热门文章

  1. 【解决方案】IGCCTray.exe参数错误
  2. 计算机上的程序全是应用程序,手把手教你不是有效的 win32 应用程序怎么解决...
  3. nextpolish安装_nanopore 分析流程
  4. 一根网线连接两台电脑的方法
  5. java爬取查询四六级成绩_GitHub - Frank17/cet-grade: 英语四六级成绩查询工具
  6. FreeCodeCamp学习--Falsy Bouncer
  7. 利用VMware Workstation(虚拟机系统)完成DNF双开的基本操作教程
  8. 如何理解软件测试质量,我对测试总结报告和质量分析报告的理解
  9. NCPC 2015 A Adjoin the Networks(好题)
  10. html怎么画虚线空心圆,教你用ps怎么画一个虚线的空心圆