zoukankan      html  css  js  c++  java
  • 【转】关于JTA,XA,ACID

    对于我们这种初学者,可能会使用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支持分布式事务的原理
  • 相关阅读:
    (笔记)Mysql命令mysqldump:备份数据库
    (笔记)Mysql命令rename:修改表名
    (笔记)Mysql命令alter add:增加表的字段
    (笔记)Mysql命令update set:修改表中的数据
    (笔记)Mysql命令delete from:删除记录
    (笔记)Mysql命令select from:查询表中的数据(记录)
    psutil库
    生成器 yield
    高阶函数map(),filter(),reduce()
    logging模块
  • 原文地址:https://www.cnblogs.com/zdd-java/p/6484115.html
Copyright © 2011-2022 走看看