何为分布式事务

 

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

和普通事务的区别

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

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

为什么:

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

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-构成

面向TM、RM提供商的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
spring的JtaTransactionManager(注入TM、UserTransaction)
准备两个数据源

最新文章

  1. monkeyrunner之测试结果判断(八)
  2. jquery_选择器
  3. ios学习之UIViewControl生命周期
  4. 【Spring】Spring系列1之Spring概述
  5. 统计机器学习(statistical machine learning)
  6. JavaScript 弹出窗体点击按钮返回选择数据的实现
  7. 【python】运算优先级
  8. libev事件库学习笔记
  9. $.each()方法,其实挺不错的
  10. 《JS权威指南学习总结--8.8.4 记忆函数》
  11. mybatis 详解(四)------properties以及别名定义
  12. MapReduce-实践1
  13. C语言博客作业—字符数组
  14. openflow流表分析(草稿)
  15. Vue.js文档
  16. 菜鸟入门【ASP.NET Core】2:部署到IIS
  17. Loadrunder场景设计篇——添加windows Resource计数器和指标说明
  18. 成为Java顶尖程序员 ,看这11本书就够了
  19. 高手写的“iOS 的多核编程和内存管理”
  20. 【LeetCode】164. Maximum Gap (2 solutions)

热门文章

  1. [Leetcode easy]存些水题34、20、700
  2. Vue语法学习第四课(1)——组件简单示例
  3. nginx配置支持http2
  4. Spring源码学习(8)——SpringMVC
  5. [RESTful] RESTful是什么,为什么要使用它
  6. foreach 使用 引用& $value . 使用 unset($value)
  7. <FAT文件系统> -- DBR
  8. CSS效果:焦点图片
  9. Java学习笔记(4)
  10. django channle的使用