首页 > 其他分享 >JTA(XA)原理解析

JTA(XA)原理解析

时间:2022-11-03 20:02:21浏览次数:52  
标签:transaction XAResouce1 XA Transaction import 解析 JTA javax


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)原理解析​​


标签:transaction,XAResouce1,XA,Transaction,import,解析,JTA,javax
From: https://blog.51cto.com/xichenguan/5820897

相关文章

  • ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
    目录建表数据存储主键和索引在查询中的表现主键的选择选择与排序键不同的主键索引和分区在查询中的应用部分单调主键的使用跳数索引可用的索引类型并发数据访问列和表的TT......
  • bs4解析
    下载--pipinstallbs4示例代码-爱丽丝漫游仙境html_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>T......
  • 关于java.lang.IllegalArgumentException: Unknown URL content://com.example.databa
    在学习《Android第一行代码》第八章的ProviderTest项目的时候,运行之后点击“AddToBook”按钮,出现如下问题:java.lang.IllegalArgumentException:UnknownURLcontent://......
  • 字节跳动开源数据集成引擎 BitSail 的演进历程与能力解析
    导读BitSail是字节跳动开源数据集成引擎,支持多种异构数据源间的数据同步,并提供离线、实时、全量、增量场景下全域数据集成解决方案,目前支撑了字节内部和火山引擎多个客户的......
  • TCP 首部解析与连接的建立与释放
    1.TCP首部解析源端口,目的端口:使用TCP协议传输数据时,从本机发送出去时通过的端口和目标机器用于接收的端口序号(SequenceNumber):用于标记相应的TCP报文......
  • go 常见外部包解析
    go(五)1、gorilla/mux导入:import"github.com/gorilla/mux"gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配使用示......
  • 【c&c++】 cjson使用_Keil环境下Jansson解析库的使用——基于STM32F103
    前言之前我曾经写过几个JSON解析库的使用方法:Qt平台下使用QJson解析和构建JSON字符串使用cJSON库解析JSON使用cJSON库构建JSON对于嵌入式开发,比较常用的就是cJSON解析......
  • 【c&c++】[C++]使用Jansson生成与解析json字符串
    安装配置序列化与反序列化生成Json解析JsonJansson是一个用于解码、编码、操控JSON的C库:简单直观的API和数据模型没有依赖项完整的Unicode支持(UTF-8)安装 ......
  • 设置Swagger默认值Example
    1、在实体上给定默认值publicclassInputModel{publicstringUserName{get;set;}="userName";publicstringPassWord{get;set;}="passWord";......
  • #yyds干货盘点#JS 解析 excel 文件
    JS解析excel文件分为如下几步:使用 ​​js​​ 解压缩 ​​excel​​ 文件获取到其中的 ​​sheet​​ 文件内容,然后将 ​​xml​​ 数据解析出来将数据转换成我们想......