分布式事务章节
分布式事务:BASE理论详细介绍及发展历史(Eric Brewer,Dan Pritchet)-CSDN博客
分布式事务:X/Open DTP分布式事务处理模型与分布式事务处理XA规范-CSDN博客
分布式事务:2PC,XA协议与Java事务当中JTA,JTS的关系-CSDN博客
简介
2PC
2PC是Two Phase Commitment Protocol的缩写,也就是二阶段提交,是Jim Gray在1979年发表的论文中提到的。第一个阶段为准备阶段(Prepare Phase),第二个阶段是提交阶段(Commit Phase)
二阶段提交,详见分布式事务:2PC与3PC的区别-CSDN博客
XA协议
XA协议是分布式DTP模型当中对于2PC二阶段提交的接口规范
详见分布式事务:X/Open DTP分布式事务处理模型与分布式事务处理XA规范-CSDN博客
JTA
Java事务API(Java Transaction API)是一个Java企业版的应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务。
有兴趣的可以看英文官方文档:Java Transaction API (JTA)
JTS
Java事务服务(JTS)是用于构建事务管理器的规范。它支持高层的JTA接口和的标准Java映射底层的CORBA对象事务服务1.1规范。JTS提供使用CORBA标准IIOP协议的事务互操作性在服务器之间进行传播。JTS适用于提供交易的供应商企业中间件的系统基础设施。(JTA官方文档描述)
JTS规定支持JTA规范的事务管理器的高级实现,并实现了OMG对象事务的Java映射
服务(OTS)1.1底层规范。JTS使用CORBA OTS接口实现互操作性和可移植性,定义一个"关于任何使用IIOP(Internet InterORB协议),在JTS事务之间生成和传播事务上下文管理"的标准。(JTS官方文档描述)
有兴趣的可以看英文官方文档:jts-spec095-1508547.pdf (oracle.com)
OMG
OMG是对象管理组织Object Management Group的缩写
OTS
Object Transaction Service对象事务服务(OTS)是公共对象请求代理体系结构(CORBA)的一部分,这是由OMG维护的一组标准,旨在帮助实现跨平台过程。通常,OTS有助于标准化各种网络组件之间的日常通信。
详细说明
2PC与XA
2PC二阶段提交流程Jim Gray1979年发表的论文正式提出来的,后来被X/Open 组织 用到DTP模型当成规范来使用,并且后来Jim Gray也出版了一本书《事务处理:概念和技术》,其中也用到了DTP模型来说明二阶段提交。
JTA与JTS
JTA(Java Transaction API)定义了对XA事务的支持,基于XA架构上建模的,也是作为java平台上事务接口规范。在JTA 中,事务管理器抽象为javax.transaction.TransactionManager接口,并通过底层事务服务(JTS)实现。JTA定义了一套接口,并约定了规范。TransactionManager、UserTransaction、Transaction、XAResource都是在这当中的主要角色。
以下是DTP分布式事务模型
可以看出来,JTA约定的角色实际是根据DTP分布式事务模型来的。JTA就是XA接口在Java当中的映射。
JTS也是一组规范,JTS就是约定了交互细节的规范。
JTA与JTS的具体的区别
对于JTS来说,因为JTA是XA接口对应的java映射,更高层一些。
JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)根据JTS规范实现事务并提供JTA接口。
JTA更多的是从框架的角度来约定程序角色的接口,而JTS是CORBA OTS事务监控的基本实现,是从具体实现的角度来约定程序角色之间的接口。
目前JTA的实现主要有JBoss,JOTM,Atomikos
JTA事务
官方结构图
Java EE 的分布式事务服务包括5个层次:事务管理器、应用服务器、资源管理器、应用程序、通信资源管理器。
JTA(Java Transaction API)提供了跨数据库连接(或其他JTA资源)的事务管理能力。JTA事务管理则由JTA容器实现,J2ee框架中事务管理器与应用程序,资源管理器,以及应用服务器之间的事务通讯。
JTS(Java Transaction Service)是服务OTS的JTA的实现。简单的说JTS实现了JTA接口,并且符合OTS的规范。
官方提供的图例,有以下几点内容
a、高层应用事务界定接口,供事务客户界定事务边界
b、JTA来自于X/Open XA协议(资源之间的一种标准化的接口)的标准Java映射,它可以使事务性的资源管理器参与由外部事务管理器控制的事务中
c、高层事务管理器接口,允许应用程序服务器为其管理的应用程序界定事务的边界
JTA的接口功能
主要接口位于javax.transaction包中
1.UserTransaction接口:让应用程序得以控制事务的开始、挂起、提交、回滚等。由Java客户端程序或EJB调用。
2.TransactionManager 接口:应用服务器管理事务状态
3.Transaction接口:执行相关事务操作
4.XAResource接口:在分布式事务环境下,协调事务管理器和资源管理器的工作
5.Xid接口:为事务标识符的Java映射,用来启动或者恢复分支
1,2,3三个接口位于Java EE版的类库 javaee.jar 中,Java SE中没有提供
XA当中的接口功能
XA规范下的XA接口大致有以下接口功能:
1.在事务管理器TM中注册资源管理器RM
2.在事务管理器TM中解除注册资源管理器RM
3.终止应用程序AP对资源管理器RM的使用
4.告诉资源管理器RM去提交事务分支
5.测试异步xa_操作的完成
6.将线程与事务分支解除关联
7.允许资源管理器RM对完成的事务分支进行放弃。
8.初始化资源管理器RM以供应用程序AP使用
9.请求资源管理器RM准备分支事务的提交
10.获取资源管理器RM准备好或者启发式完成的的XID列表
11.告诉资源管理器RM回滚分支事务
12.利用XID,进行启动或恢复事务分支
其实就是JTA就是依据XA协议在java当中进行映射后扩展。
官方图例小编改造图
然后我们来看下完整的DTP分布式事务模型
我们可以明显看到JTA与JTS是来自于DTP模型。
事务流程与通信
JTA编程对应的流程为以下步骤:
上面的事务流程,可横跨多个JDBC Connection生命周期,利用通信管理器(CRM)进行调度,实现分布式事务。
我们平常项目当中的JDBC连接,数据库,JMS等等都有实现XA的接口规范,所以JTA可以直接进行处理
总结
简单来讲,JTA与JTS是接口与实现关系,JTA与JTS这两者是2PC,XA,OTS这些协议规范的java当中的映射。