Java的分布式事务(JTA和XA)

Java的分布式事务(JTA和XA)

关于JTA事务和XA事务的介绍

何为分布式事务

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

案例

java 下届 java xa_java 下届

为什么不能简单的借助数据源的本地事务

用数据源本地事务代码案例

Con1 = db1.getConn..;
Con2 = db2.getConn..;
Try{
con1.insert….
con2.update….
con1.commit;
con2.commit;
}catche(Exception e){
con1.rollback;
con2.rollback;
}

现在会出现一个问题,就是会有第一个事务提交了但是第二个事务失败了,就保证不了一致性了。所以引入了事务管理器

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

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

数据源本身需要支持这种机制(Innodb引擎是支持的)

应对应用的故障恢复机制

java 下届 java xa_Java_02

事务管理器是协调数据源的,所以需要一套规范的协议

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

就产生了2套规范 :XA 规范和JTA

何为XA 规范

java 下届 java xa_Java jta 原理_03

是一套跨语言的标准

XA事务的处理模型

java 下届 java xa_Java jta 原理_04

XA的流程

java 下届 java xa_Java_05

3.XA的2阶段提交 2PC

java 下届 java xa_Java jta 原理_06

JTA 是什么

Java Transaction API

java根据XA规范提供的事务处理标准

目的:统一一个API 简化学习

javax.transaction
javax.transaction-api

1.3

定义了一套的接口

java 下届 java xa_Java_07

java 下届 java xa_java 下届_08

开源的实现 TM 提供商

Java Open Transaction Manager (JOTM)
JBoss TS
Bitronix Transaction Manager (BTM)
Atomikos
Narayana

RM的提供商

java 下届 java xa_java_09

Spring集成JTA(Atomikos案例)

maven依赖

单纯使用Spring

javax.transaction
javax.transaction-api
1.3
com.atomikos
transactions-jdbc
4.0.6
com.atomikos
transactions-jms
4.0.6
Spring boot
org.springframework.boot
spring-boot-starter-jta-atomikos
2.1.1.RELEASE
bean的配置
init-method="init" destroy-method="close">
value="com.alibaba.druid.pool.xa.DruidXADataSource" />
${db1.jdbc.url}
${jdbc.username}
${jdbc.password}
1
1
10
init-method="init" destroy-method="close">
value="com.alibaba.druid.pool.xa.DruidXADataSource" />
${db2.jdbc.url}
${jdbc.username}
${jdbc.password}
1
1
10
class="com.atomikos.icatch.config.UserTransactionServiceImp"
init-method="init" destroy-method="shutdownForce">
com.atomikos.icatch.standalone.UserTransactionServiceFactory
jtalog
f:/test
class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close"
depends-on="userTransactionService">
class="com.atomikos.icatch.jta.UserTransactionImp"
depends-on="userTransactionService">
class="org.springframework.transaction.jta.JtaTransactionManager"
depends-on="userTransactionService">

Java的分布式事务(JTA和XA)相关教程

UEditor 1.2.5 for java 自定义配置

UEditor 1.2.5 for java 自定义配置 1、自定义工具栏 在editor_config.js文件中,找到,toolbars:…并修改,例: ,toolbars:[[source,preview,fullscreen,print,searchreplace, |, undo,redo, |,removeformat,formatmatch,autotypeset,blockquote,pasteplain,|,

[适合初中级Java程序员修炼手册从0搭建整个Web项目](三)

[适合初中级Java程序员修炼手册从0搭建整个Web项目](三) 前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206 种一棵树最好的时间是十年前,其次是现在 six-finger-web 一个Web后端框架的轮子从处理Http请求【基于Netty的请求级We

安排新版Java15新特性视频教程

安排,新版Java15新特性视频教程 来源:来自网络,如侵权请告知博主删除,感谢????。 仅学习使用,请勿用于其他~ 不得不说,更新的太快了,虽然你发任你发,但是作为程序员,有些东西还是要知道的。虽然现在不用,但是毕竟是后面的版本。所以,看一下也是情

Java安全通信:HTTPS与SSL

Java安全通信:HTTPS与SSL 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。这个系

阿里大佬总结,Java高并发必读!

阿里大佬总结,Java高并发必读! 作者:wxdoop 原文: 来源:前程有光 进程是计算机中程序关于某几何数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。是操作系统结构的基础 线程可以说是轻量级的进程,是程

HTML5 + Javascript 写出一个钢琴

HTML5 + Javascript 写出一个钢琴 首发:GitHubClub原文:juejin.im/post/6879708939190009869 学生时代的我们如果有像郎朗一样的琴技,想必追起女生会非常的容易,但在以前,一架钢琴对普通家庭来说,消费还蛮高的,所以我们不如自己写一架属于自己的钢琴,

数据结构与算法(Java)——稀疏数组

数据结构与算法(Java)——稀疏数组 文章目录 一、五子棋案例 二、稀疏数组 1.基本介绍 2.代码实现 总结 一、五子棋案例 假如我们要开发一款五子棋程序,使用一个二维数组对棋盘数据进行维护是常见的思路。下面以常见的15x15五子棋盘举例,左图是棋盘,右图则

分布式事件调度框架tiger

分布式事件调度框架tiger 一、背景 在后台,有很多业务场景需要定时处理一个任务,或在某件事情发生后处理一个任务。 比如,dw团队后台数据同步时,一般会每天凌晨某个时间点跑一次数据同步任务。这样的业务场景1(定时处理任务),很适合quartz来处理。 有另外