分布式事务:2PC,XA协议与Java事务当中JTA,JTS的关系

 分布式事务章节

事务:分布式事务与本地事务的区别-CSDN博客

分布式事务:CAP理论详细介绍及发展历史-CSDN博客

分布式事务:BASE理论详细介绍及发展历史(Eric Brewer,Dan Pritchet)-CSDN博客 

分布式事务:2PC与3PC的区别-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,JOTMAtomikos


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当中的映射。

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值