对于我们这种初学者,可能会使用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. 网易郑栋:数据采集与分析的那些事——从数据埋点到AB测试

    本文由  网易云发布. 4月8日晚,DTalk邀请到了网易互联网分析产品.可视化 BI 产品的负责人—郑栋老师,进行了一次关于<网易郑栋:数据采集与分析的那些事第一弹: 数据篇>的主题分享 ...

  2. 内核格式化(C++)

    参考<C++ Primer Plus>P788 iostream族支持 程序 与 终端 之间的I/O fstream族支持 程序 与 文件 之间的I/O sstream族支持 程序 与 s ...

  3. 设置jade高亮

    来自:https://segmentfault.com/a/1190000002896247 打开sublime3,再打开 view > show console,把下列代码复制到console ...

  4. Zookeeper原理分析之存储结构TxnLog

    Zookeeper事物日志文件用于记录事物操作,如添加,删除节点等等,都会在事务日志中记录一条记录.下面我们就详细分析一下txnLog事务日志文件. txnLog事务日志文件文件由三部分组成: 日志文 ...

  5. 编写 ES6 的 7 个实用技巧

    无脑翻译走一波~ Hack #1 - 变量交换 使用数组解构交换变量的值 let a = 'world', b = 'hello' [a, b] = [b, a] console.log(a) // ...

  6. vue复选框选中值获取

    <div id="d5"> <p>{{box5.toString()}}</p> <input type="checkbox&q ...

  7. rabbitmq系列三 之发布/订阅

    1.发布/订阅 在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker).在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers).这种模 ...

  8. 给button添加UAC的小盾牌图标

    Sample Code: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private v ...

  9. 【java排序】冒泡排序、快速排序

    冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成.这 ...

  10. Go url编码和字符转码

    类似php中的urlencode 和htmlspecialchars: package main import ( "fmt" "html" "net ...