JTA(XA)原理解析
来源:互联网 发布:金融网络销售聊天套路 编辑:程序博客网 时间:2024/06/01 17:50
Transaction(事务) 分两种
Local Transaction 和 Global Transaction
涉及到一个Connection的Commit,称为Local Transaction
涉及到多个Connection的Commit,称为Global Transaction
Local Transaction用JDBC事务实现是没有问题,然而Global Transaction的实现就无法保证了,所以不得不了解下JTA的神奇,但其实这样的事务也是存在问题的,下面将指出
XA需要两阶段提交 – prepare 和 commit.
假设有两个Connection, con1, con2, 大体的过程如下
con1 = XAResouce1.getConnection... con2 = XAResouce2.getConnection... con1 do some thing. con2 do some thing. after they finish. pre1 = XAResouce1.prepare(); pre2 = XAResouce2.prepare(); if( both pre1 and pre2 are OK){ XAResouce1 and 2 commit }else { XAResouce1 and 2 rollback }
在XAResouce1 and 2 commit的时候,
可能XAResouce1 commit() 成功了,XAResouce2 commit()失败了。
这时候,会抛出一个 “启发式异常”。程序可以处理这个异常。比如,XAResouce.recover()之类。
但一般情况下,还真没别的办法,需要数据管理员根据数据操作日志 undo所有的操作,或者恢复数据备份。
有的数据库在进行数据操作的时候,会生成一个“反操作”日志。比如,insert 对 delete, 等。
Global Transaction 需要XA接口(包括在JTA里面)的支持。
import javax.sql.XAConnection; import javax.transaction.xa.Xid; import javax.transaction.xa.XAResource; import javax.transaction.xa.XAException; import javax.transaction.Transaction; import javax.transaction.TransactionManager;
其中的
javax.sql.XAConnection; javax.transaction.xa.Xid; javax.transaction.xa.XAResource;
这些XA接口的实现,需要数据库的JDBC提供。
数据库本身要支持XA。数据库的JDBC也要提供XA的实现。
Oracle, Sybase, DB2, SQL Server等大型数据库支持XA
免费的postreSQL也支持XA
My SQL 连Local Transaction都支持不好,更别说Global Transation了。
TransactionManager的实现能够处理多个XAResouce(一个XAResouce list)的情况。
比如Tyrex。或JBoss等EJB Server的Transaction实现代码
下面转载一篇讲解XA的详细原理解析 http://jroller.com/pyrasun/category/XA 共分3部分,讲的很不错,找个机会我将翻译下
转自:JTA(XA)原理解析
- JTA(XA)原理解析
- JTA(XA)原理解析
- 【转】Oracle XA JTA事务报错 不支持XA事务
- JTA (XA)事务和JDBC事务
- JDBC事务和JTA (XA)事务
- JDBC事务和JTA (XA)事务
- JDBC事务和JTA (XA)事务
- JTA/XA: Atomikos + Spring + Hibernate 配置 注意事项
- JTA/XA: Atomikos + Spring + Hibernate 配置 注意事项
- Java JTA XA transaction(经典)
- tomee 创建 xa 数据源 并 支持 JTA 事务
- JDBC事务和JTA (XA)事务区别
- JTA - 原理与实现
- Java事务--JTA原理
- XA
- XA
- XA
- XA
- hbase 源代码分析 (19) HMaster 启动负载均衡过程分析
- c++ winpcap开发(9)
- leetcode3-Longest Substring Without Repeating Characters
- SCA 、SOA 、SDO基本感念
- 简单LinuxC程序关于简单计算器(函数指针与回调函数)
- JTA(XA)原理解析
- Java集合--CopyOnWriteArraySet
- 环信心得
- 在mybatis中设置uuid
- c++继承(单继承,多继承,菱形继承和虚继承)详解
- Linux基础命令
- sqoop数据迁移
- css基础进阶
- textarea根据内容自动增加高度