分布式事务(二)JTA规范

一、引子

  既然出现了分布式场景,大java自然制定出一套规范来给各大应用服务器、数据库/mq等厂商使用,以方便管理互通---》JTA闪亮登场。

JTA:Java Transaction API,即Java事务API规范。JTA规范指定了事务管理器(TM)与分布式事务系统中涉及的各方(应用程序AP、资源管理器RM、应用服务器AS)之间的高级接口。

oracle官方JTA规范:http://download.oracle.com/otn-pub/jcp/jta-1.1-spec-oth-JSpec/jta-1_1-spec.pdf。 

二、JTA模型

规范中定义了JTA模型图如下:

包括五个参与者:

TM(transaction manager): 事务管理器提供支持事务界定、事务资源管理、同步和事务上下文传播所需的服务和管理功能。

AS(application server): 应用服务器提供了支持应用程序运行时环境所需的基础设施,其中包括事务状态管理。此类应用程序服务器的一个例子就是EJB服务器。jboss、weblogic、websphere等都是支持JTA规范的。注意:tomcat并没有实现JTA规范,因此并不能提供事务管理器的功能。

RS(resource manager):资源管理器为应用程序提供对资源的访问。RS通过实现事务资源接口来参与分布式事务。这个事务资源接口是给TM用于沟通事务关联、事务完成和恢复工作的。例如关系数据库服务器。

AP(application program):一个基于组件的事务型应用程序,通过声明性事务属性设置提供事务管理支持。tomcat不支持JTAg规范,所以只能使用第三方的TM库,如JOTM和Atomikos。将TM直接整合进应用中,不再依赖于AS。

CRM(communication resource manager):通信资源管理器支持事务上下文传播和对传入和传出请求的事务服务的访问。JTA规范没有指定与通信相关的要求。有关TM之间互操作性的更多细节,请参阅JTS规范。

分析

  • 1.核心模块就是TM,分别与AP、AS、RM制定3个协议群---》上图桃红色的半圆。
  • 2.TM的底层是JTS--》位于中间,桃红色半圆下边的支撑方块。
  • 3.多个TM之间依靠CRM沟通--》最下部的事务传播、进出协议。

另一种视图:

三、JTA接口

Java事务API由三个元素组成:高级应用程序事务界定接口、用于应用程序服务器的高级事务管理器接口和用于事务资源管理器的X/Open XA协议的标准Java映射。

咱们以jta基础包1.1版本为准,引入maven pom.xml中引入依赖 :(jta这个artifactId是被引用多的,spring也直接引用了。)

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>1.1</version>
</dependency>

maven导入包后,包结构如下:

一共8个接口:

  1. XAResource:XA资源管理器接口,RM提供给TM调用。
  2. Xid:标记事务ID
  3. Status:定义事务状态。
  4. Synchronization:同步接口。
  5. Transaction:事务定义接口。
  6. TransactionManager:事务管理器。
  7. TransactionSynchronizationRegistry:事务同步注册器。
  8. UserTransaction:事务客户端,封装了用户可直接操作的接口。

注意:

这些接口都不需要开发者去实现:

  • XAResource由数据库厂商实现,
  • TransactionManager、UserTransaction等操作事务相关的接口由Application Server实现(例如web服务就是jboss、weblogic,或者第三方事务类库jotm、Atomikos)。

用户只需要使用UserTransaction的实现类()来操控事务的创建、提交、回滚即可。

猜你喜欢

转载自www.cnblogs.com/dennyzhangdd/p/10638201.html