Transactions
企业级应用会在一个或多个数据库中存取数据。
这些数据必须是准确的、实时的、可靠的(accurate, current, reliable)
当多个操作同时更新同一条数据时,或者执行一个操作时出现了异常,都可能会导致数据的完整性缺失。
Transaction应运而生。
Transaction会控制多个操作同时访问的情况。
Transaction会在出现异常的时候,执行回滚操作,确保数据处于一致性状态。consistent state。
例:
从账户A转账300到账户B,事务表现为:
begin账户A减去300账户B加上300记录日志
end
三步缺一不可,因此组成一个事务。
事务以begin开始,以commit或rollback结束。发生异常的时候,也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相关推荐
- System.Transactions介绍
在.Net Framework 2.0中,新增了一个名称空间:System.Transactions.从其名字就可以看出来,里面包含了Transaction相关的类.System.Transactio ...
- 智源唐杰主编的IEEE Transactions on Big Data期刊被SCI收录 | AI日报
智源唐杰主编的IEEE Transactions on Big Data期刊被SCI收录 今日,IEEE Transactions on Big Data (简称:IEEE TBD)被SCI收录.IE ...
- System.Transactions深入了解
System.Transactions框架包含了一个称为LTM(Lightweight Transaction Manager)的TM,它隐式的将连接登记于事务中,从内部来看,是由ITransacti ...
- Oracle sessions,processes 和 transactions 参数 关系 说明
一.官网说明 1.1 processes 11gR2 的文档: Property Description Parameter type Integer Default value 100 Modifi ...
- “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。
"System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 参考文章: (1)"System.Tran ...
- System.Transactions:实现你自己的Resource Manager
By Sahil Malik[http://www.developer.com/net/net/article.php/11087_3565196_1] .net 2.0所带来最大的变化之一也许就是S ...
- 谈谈分布式事务之三: System.Transactions事务详解[下篇]
在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该方法对用于创建基于现有Transaction对 象的"依赖事务(Depende ...
- System.Transactions事务超时设置
System.Transactions 有2个超时属性(timeout 与 maxTimeout),可以通过配置文件来进行设置. 1. timeout System.Transactions 默认的t ...
- 使用Atomikos Transactions Essentials实现多数据源JTA分布式事务--转载
原文:http://www.ite/topic/122700 9.17 update:使用NonXADataSourceBean. Mysql在5.0版本和Connecter/J5.0版本后提供了XA ...
- 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 ...
最新文章
- 多视图立体匹配论文分享CasMVSNet
- memcache的分布式缓存问题
- 牛客题霸 NC1 大数加法
- jquery每次动态加载dom,绑定事件会多一次,
- (65)Vue-cli介绍
- 【系统架构设计师】软考高级职称,一次通过,倾尽所有,2016年下半年系统架构设计师考试论文真题(论微服务架构及其应用)
- 路由器的地址转换功能
- GIMP 基本教程(1)
- 74ls175四人抢答器电路图_用数字电路实现四人抢答器
- 2019 最值得被记录的 14 条 AI 安防领袖语录丨年终盘点
- 如何使用plink进行二分类性状的GWAS分析并计算PRS得分
- PCM 与WAV相互转换代码
- AB01固定资产过账
- 安徽大学计算机专业全国大学排名,2017安徽大学优势专业排名
- java寻宝题目,寻宝
- 由经纬度计算地球上任意两点的距离
- 181202 逆向-2018鹏城杯
- 赛博朋克版特效shader
- ThinkSystem SR650 BMC管理口配置
- python识别火车票二维码_python实现的一个火车票转让信息采集器
热门文章
- 【解决方案】IGCCTray.exe参数错误
- 计算机上的程序全是应用程序,手把手教你不是有效的 win32 应用程序怎么解决...
- nextpolish安装_nanopore 分析流程
- 一根网线连接两台电脑的方法
- java爬取查询四六级成绩_GitHub - Frank17/cet-grade: 英语四六级成绩查询工具
- FreeCodeCamp学习--Falsy Bouncer
- 利用VMware Workstation(虚拟机系统)完成DNF双开的基本操作教程
- 如何理解软件测试质量,我对测试总结报告和质量分析报告的理解
- NCPC 2015 A Adjoin the Networks(好题)
- html怎么画虚线空心圆,教你用ps怎么画一个虚线的空心圆