对于我们这种初学者,可能会使用spring带给我们的@Transactional,可能了解JTA,可能会使用jotm、atomikos,又会遇到一些名词XA,支持XA的数据库驱动等等诸多问题,然后就会愈加混乱,自然形成一个疑问,庞大的事务体系的全貌到底是什么样?

XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。XA之所以需要引入事务管理器是因为,在分布式系统中,从理论上讲(参考Fischer等的论文),两台机器理论上无法达到一致的状态,需要引入一个单点进行协调。事务管理器控制着全局事务,管理事务生命周期,并协调资源。资源管理器负责控制和管理实际资源(如数据库或JMS队列)

2 需要解决的疑惑

下面就要具体列出一系列需要解决的问题

2.1 对于事务模型

  • 三种事务模型是什么?各自的特点是什么?各自的缺陷是什么?

2.2 spring对于事务模型的支持

  • spring自己的一系列接口设计:

    • PlatformTransactionManager 事务管理器
    • TransactionDefinition 事务定义
    • TransactionStatus 事务状态

    等等

  • 上述一系列接口的实现是如何对非分布式和分布式事务的支持的呢?

2.3 针对分布式事务的规范

  • X/Open DTP模型是什么?几个重要的概念是什么?

  • XA规范是什么?

  • 2PC是什么?

2.4 针对JTA

  • JTA是什么?JTS又是什么?

  • JTA与上述的规范又是什么关系?

  • JTA的接口都有哪些?分别是什么作用

  • JTA接口中有一个javax.transaction.TransactionManager,如何理解它与上述的PlatformTransactionManager呢?即它们各自的职责是什么?

2.5 对于JTA实现

  • 分布式事务需要数据库和驱动程序支持的吗?还是使用一般的数据库和驱动程序也可以实现分布式事务?

  • XADataSource与DataSource、XAConnection与Connection等等接口

  • 某些应用服务器没有实现JTA,如tomcat,某些应用服务器实现了JTA,如JBoss,具体是怎么实现的呢?

  • jotm、atomikos又是怎么来实现JTA的呢?需不需要数据库和驱动程序对XA的支持?

  • 2PC对于初学者经常沦为一种概念,在代码中是如何体现的呢?如何模拟2PC呢?

3 研究过程

先从非分布式事务开始,趁机理解Spring对于事务的支持原理,然后过渡到分布式事务,理解分布式事务的概念,源码分析分布式事务框架jotm、atomikos,理解它们实现分布式事务的原理。

3.1 非分布式事务

  • 1 jdbc事务开发的缺点
  • 2 spring实现的编程式事务原理
  • 3 spring利用AOP实现的声明式事务的接口设计与实现原理,为后面与jotm、atomikos的集成做铺垫
  • 4 深刻理解了上面的例子后,再来看事务的三种模型,各自的特点、各自的缺陷

3.2 分布式事务的一系列概念

  • 1 X/Open DTP模型、XA规范、2PC
  • 2 JTA、JTS概念
  • 3 JTA接口定义的理解

3.3 JTA的实现

  • 1 jotm的例子,以及源码分析实现分布式事务的原理(如何体现2PC的过程)
  • 2 atomikos对非XADataSource和XADataSource的支持的例子,以及源码分析实现分布式事务的原理(如何体现2PC的过程)
  • 3 JBoss支持分布式事务的原理

【转】关于JTA,XA,ACID的更多相关文章

  1. Spring+iBatis+Atomikos实现JTA事务

    Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品. 产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransacti ...

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

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

  3. spring+mybatis+Atomikos JTA事务配置说明

    一.概览 Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品.产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTrans ...

  4. 解决分布式事务基本思想Base和CPA理论、最终一致性|刚性事务、柔性事务

    在学习解决分布式事务基本思路之前,大家要熟悉一些基本解决分布式事务概念名词比如:CAP与Base理论.柔性事务与刚性事务.理解最终一致性思想,JTA+XA.两阶段与三阶段提交等. 如何保证强一致性呢? ...

  5. 几款开源ESB总线的比较

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  6. 几款开源ESB总线的比较(转)

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  7. dubbo基本信息

    1.Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目. 面试官问你如果这个都不清楚,那下面的就没必要问了. 官网: ...

  8. Dubbo 分布式事务一致性实现

    我觉得事务的管理不应该属于Dubbo框架, Dubbo只需实现可被事务管理即可, 像JDBC和JMS都是可被事务管理的分布式资源, Dubbo只要实现相同的可被事务管理的行为,比如可以回滚, 其它事务 ...

  9. (转)史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

    背景:因为自己的简历写了dubbo,面试时候经常被问到.实际自己对dubbo的认识只停留在使用阶段,所以有必要好好补充下基础的理论知识. https://zhuanlan.zhihu.com/p/45 ...

随机推荐

  1. 【cocos2d-x 手游研发----研发思路及感想】

          我半年前进入了目前的这家做教育行业的公司(在此之前一直从事原生态开发手游的迷茫之路),学习是一件很快乐的事情,来到这家公司我有了很多时间去学习,不管是公司业务,还是其他技术相关的.于是开始 ...

  2. RabbitMQ之消息持久化(转)

    原文地址 https://blog.csdn.net/u013256816/article/details/60875666/ 消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证 ...

  3. JS获取开始、结束时间

    /** * 获取本周.本季度.本月.上月的开始日期.结束日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天 ...

  4. iOS-CocoaPods安装及使用

    1. 安装 Ruby 对于iOS开发者,CocoaPods是最方便的第三方管理工具了,但是怎么安装CocoaPods呢,安装CocoaPods之前,要确保mac已经安装上Ruby,但在安装Ruby时, ...

  5. 2019CVPR《Mask Scoring R-CNN》

    题目:<Mask Scoring R-CNN> CVPR 2019 Oral Paper(2017年783篇论文,获得口头报道的有215篇,oral paper很有含金量) 华中科技大学h ...

  6. 在操作Centos系统时经常出现You have new mail in /var/spool/mail/root提示怎么回事?

    例如,在命令窗口中输入date查看时间,下面会出现一行提示 实际上,该功能为Linux操作系统核对系统资源状态并汇总,默认发送到root用户的/var/spool/mail/root目录,并在标准输出 ...

  7. Elasticsearch四种常见的相关度分数优化方法

    **1.boost方式 ** 简单粗暴,最常用. 需求:查询出title和content中包含java spark的document 方式1: GET /forum/article/_search { ...

  8. android动态权限获取

    android动态权限获取 Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候 ...

  9. SQL Function 自定义函数

    目录 产生背景(已经有了存储过程,为什么还要使用自定义函数) 发展历史 构成 使用方法 适用范围 注意事项 疑问   内容 产生背景(已经有了存储过程,为什么还要使用自定义函数) 与存储过程的区别(存 ...

  10. JPA主键生成策略

    @GeneratedValue: 为一个实体类生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键).它有两个属性,分别是strategy和generator. genera ...