JTA事务管理

何为分布式事务

 

 

一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务

和普通事务的区别

 

单一数据源,事务管理可以借助数据源本地事务完成,实现简单

 

分布式事务之困难:不可简单的借助数据源本地事务完成

 

为什么:

 

但是这样的事务有保障吗?

1、提交时,db1提交成功,db2网络不通

2、提交时con1提交完成,此时应用重启了或者应用及其断电了

 

分布式事务管理需要什么?

分布式事务管理需要:

1协调各数据源提交、回滚、以及应对通信异常的管理机制

2数据源需要支持这种机制

3应对应用恢复的机制

 

从上面可以得出,做分布式事务管理需要的参与者

 

 

 如果是这样,那么

1 事务管理器协调数据源,两者之间需要通信,并需要一套协议规范

2为应对网络,主机故障等,事务管理器,数据源需要记录相关的事务日志

何为XA规范

X/Open(The open group)提出的分布式事务处理规范,分布式事务处理的工业标准

XA-DTP

X/Open Distributed Transaction Processing(DTP)model分布式事务处理模型

 

XA-流程

 

XA-两阶段提交

 

JTA是什么?

JTA: Java Transaction Api

Java 根据XA规范提出的事务处理规范

目的:同意API,简化程序员的学习,简化编程

 

JTA-API-构成

面向TMRM提供商的API:

 

面向编程者的API

 

UserTransaction

Jta-tm实现提供商

JavaEE应用服务器内建JTA事务管理(TM),提供商:

Weblogic,websphere

开源、独立的JTA事务管理器(TM)组件:

Java Open Transaction Manager(JOTM)

JBoss TS

Bitronix Transaction Manager(BTM)

Atomikos

Narayana

Jta-rm实现提供商

 

在连接池组件中一般也会提供包装实现:

 

Spring中应用JTA

Spring 自身并未提供jta TM实现,但提供了很好的集成

根据TM的提供者不通,分为两种应用方式

方式一:使用JavaEE服务器内建的TM,用法做如下配置即可

 

 

说明:JtaTransactionManager通过JNDI找到服务器提供的java:comp/UserTransaction,
java:comp/TransactionManager

应用使用的数据源需是支持xa的数据源

方式二:在没有实现TM的应用服务器上(Tomcat,jetty),将独立的TM组件集成到

我们的应用中

一:使用轻量级服务器+集成TM组件

 

二:使用轻量级服务器+集成TM组件

1、引入TM组件的jar(以Atomikos为例)

2、配置数据源,一定要是XA数据源

3、配置事务管理器TM
TransactionManager的实现bean
UserTransaction的实现bean
springJtaTransactionManager(注入TMUserTransaction
准备两个数据源

 

原文地址:https://www.cnblogs.com/yjjyves/p/10689751.html