jta mysql_JTA 使用 MySQL 分布式事务
假定在MySQL實(shí)例1上有表
create table person(
id int,
name varchar(32)
)
MySQL實(shí)例2上也有一張同樣的表,現(xiàn)在從實(shí)例1中的 person 表中刪除一條數(shù)據(jù),并把這條數(shù)據(jù)插入到實(shí)例2的表中,這兩個操作在同一個事務(wù)中,因?yàn)榭缭搅藬?shù)據(jù)庫實(shí)例,涉及到了分布式事務(wù)。
MySQL實(shí)現(xiàn)了分布式事務(wù),查看數(shù)據(jù)庫是否啟用了 XA 事務(wù):
show variables like 'innodb_support_xa';
MySQL 關(guān)于xa的命令:
xa start 'a';
sql 語句;
xa end 'a';
xa prepare 'a';
xa commit 'a';
與正常事務(wù)相比,XA 命令多了 prepare,詢問是否準(zhǔn)備好,事務(wù)管理器根據(jù) prepare 返回的結(jié)果進(jìn)行操作。
以上命令是分布式事務(wù)的操作方法,在一個命令行中輸入上述命令,并不是真實(shí)的分布式事務(wù)。可以使用 JTA 來控制MySQL的 XA:
public class JTA_MySQL {
public static void main(String[] args) {
XADataSource xaDs1 = JTA_MySQL.getDataSource(
"jdbc:mysql://172.30.60.126:3306/db_zhang", "root",
"root");
XAConnection xaCon1 = null;
XAResource xaRes1 = null;
Connection conn1 = null;
Statement stmt1 = null;
XADataSource xaDs2 = JTA_MySQL.getDataSource(
"jdbc:mysql://172.30.60.124:3306/db_zhang", "root",
"root");
XAConnection xaCon2 = null;
XAResource xaRes2 = null;
Connection conn2 = null;
Statement stmt2 = null;
int ret1 = 0;
int ret2 = 0;
Xid xid1 = new MyXid(100, new byte[] { 0x01 }, new byte[] { 0x02 });
Xid xid2 = new MyXid(100, new byte[] { 0x01 }, new byte[] { 0x03 });
try {
xaCon1 = getXAConnetion(xaDs1);
conn1 = getConnection(xaCon1);
stmt1 = conn1.createStatement();
xaRes1 = xaCon1.getXAResource();
xaCon2 = getXAConnetion(xaDs2);
conn2 = getConnection(xaCon2);
stmt2 = conn2.createStatement();
xaRes2 = xaCon2.getXAResource();
xaRes1.start(xid1, XAResource.TMNOFLAGS);
stmt1.execute("delete from person where id=1");
xaRes1.end(xid1, XAResource.TMSUCCESS);
xaRes2.start(xid2, XAResource.TMNOFLAGS);
stmt2.execute("insert into person select 1, 'zhang'");
xaRes2.end(xid2, XAResource.TMSUCCESS);
ret1 = xaRes1.prepare(xid1);
ret2 = xaRes2.prepare(xid2);
if (XAResource.XA_OK == ret1 && XAResource.XA_OK == ret2) {
xaRes1.commit(xid1, false);
xaRes2.commit(xid2, false);
System.out.println("提交分布式事務(wù)");
} else {
xaRes1.rollback(xid1);
xaRes2.rollback(xid2);
System.out.println("回退分布式事務(wù)");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (XAException e) {
e.printStackTrace();
}
}
private static XADataSource getDataSource(String url, String user,
String password) {
MysqlXADataSource dataSource = new MysqlXADataSource();
dataSource.setUrl(url);
dataSource.setUser(user);
dataSource.setPassword(password);
return dataSource;
}
public static XAConnection getXAConnetion(XADataSource dataSource) {
XAConnection XAConn = null;
try {
XAConn = dataSource.getXAConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return XAConn;
}
public static Connection getConnection(XAConnection XAConn) {
Connection conn = null;
try {
conn = XAConn.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConnection(Connection conn) {
try {
conn.close();
} catch (SQLException e) {
System.out.println("連接關(guān)閉失敗");
}
}
}
MyXid 類:
public class MyXid implements Xid {
private int formatId;
private byte[] globalTid;
private byte[] branchQ;
public MyXid(int formatId, byte[] globalTid, byte[] branchQ) {
this.formatId = formatId;
this.globalTid = globalTid;
this.branchQ = branchQ;
}
public byte[] getBranchQualifier() {
return this.branchQ;
}
public int getFormatId() {
return formatId;
}
public byte[] getGlobalTransactionId() {
return this.globalTid;
}
}
Mysql分布式事務(wù)
關(guān)于Mysql分布式事務(wù)介紹,可參考:http://blog.csdn.net/luckyjiuyi/article/details/46955337 分為兩個階段:準(zhǔn)備和執(zhí)行階段.有兩個角色:事務(wù)的 ...
mysql 分布式事務(wù)
php + mysql 分布式事務(wù) 事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個程序執(zhí)行單元: 事務(wù)應(yīng)該具有4個屬性:原子性.一致性.隔離性.持續(xù)性 原子性(atomicit ...
詳解Mysql分布式事務(wù)XA(跨數(shù)據(jù)庫事務(wù))
詳解Mysql分布式事務(wù)XA(跨數(shù)據(jù)庫事務(wù)) 學(xué)習(xí)了:http://blog.csdn.net/soonfly/article/details/70677138 mysql執(zhí)行XA事物的時候,mysq ...
Spring+JTA+Atomikos+mybatis分布式事務(wù)管理
我們平時的工作中用到的Spring事務(wù)管理是管理一個數(shù)據(jù)源的.但是如果對多個數(shù)據(jù)源進(jìn)行事務(wù)管理該怎么辦呢?我們可以用JTA和Atomikos結(jié)合Spring來實(shí)現(xiàn)一個分布式事務(wù)管理的功能.了解JTA可 ...
php + mysql 分布式事務(wù)(轉(zhuǎn))
事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個程序執(zhí)行單元: 事務(wù)應(yīng)該具有4個屬性:原子性.一致性.隔離性.持續(xù)性 原子性(atomicity).一個事務(wù)是一個不可分割的工作單 ...
php + mysql 分布式事務(wù)
事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個程序執(zhí)行單元: 事務(wù)應(yīng)該具有4個屬性:原子性.一致性.隔離性.持續(xù)性 原子性(atomicity).一個事務(wù)是一個不可分割的工作單 ...
了解一下Mysql分布式事務(wù)及優(yōu)缺點(diǎn)、使用案例(php+mysql)
在開發(fā)中,為了降低單點(diǎn)壓力,通常會根據(jù)業(yè)務(wù)情況進(jìn)行分表分庫,將表分布在不同的庫中(庫可能分布在不同的機(jī)器上),但是一個業(yè)務(wù)場景可能會同時處理兩個表的操作.在這種場景下,事務(wù)的提交會變得相對復(fù)雜,因?yàn)槎?...
分布式事務(wù)(三)mysql對XA協(xié)議的支持
系列目錄 分布式事務(wù)(一)原理概覽 分布式事務(wù)(二)JTA規(guī)范 分布式事務(wù)(三)mysql對XA協(xié)議的支持 分布式事務(wù)(四)簡單樣例 分布式事務(wù)(五)源碼詳解 分布式事務(wù)(六)總結(jié)提高 引子 從Mys ...
【分布式事務(wù)】使用atomikos+jta解決分布式事務(wù)問題
一.前言 分布式事務(wù),這個問題困惑了小編很久,在3個月之前,就間斷性的研究分布式事務(wù).從MQ方面,數(shù)據(jù)庫事務(wù)方面,jta方面.近期終于成功了,使用JTA解決了分布式事務(wù)問題.先寫一下心得,后面的二級提 ...
隨機(jī)推薦
Javascript的自執(zhí)行函數(shù)
自執(zhí)行函數(shù)其實(shí)也就是"立即執(zhí)行的函數(shù)",它有四個特點(diǎn):提高性能.利于壓縮.避免沖突.依賴加載: 1.減少作用域查找 JS代碼: // Anonymous function that ...
轉(zhuǎn)載~kxcfzyk:Linux C語言多線程庫Pthread中條件變量的的正確用法逐步詳解
Linux C語言多線程庫Pthread中條件變量的的正確用法逐步詳解 ? 多線程c語言linuxsemaphore條件變量 (本文的讀者定位是了解Pthread常用多線程API和Pthread互斥鎖 ...
RPM 包下載 GCC 4.8安裝
http://ftp.scientificlinux.org/linux/scientific/ http://www.rpmfind.net/linux/rpm2html/search.php?qu ...
【MVC】ASP.NET MVC中實(shí)現(xiàn)多個按鈕提交的幾種方法
有時候會遇到這種情況:在一個表單上需要多個按鈕來完成不同的功能,比如一個簡單的審批功能. 如果是用webform那不需要討論,但asp.net mvc中一個表單只能提交到一個Action處理,相對比較 ...
S3C2440 TFTLCD驅(qū)動詳解
S3C2440自帶有LCD控制器,該控制器主要有以下接口 僅僅說TFT顯示器,TFT顯示器的時序如下 TFT顯示器的驅(qū)動是以行列的形式逐點(diǎn)掃描過來的,驅(qū)動時鐘有三種,一種是行時鐘,一種是列時鐘,還有一 ...
C# IE瀏覽器
引用Microsoft HTML Object Library 引用 -> com ->?Microsoft HTML Object Library 引用后,顯示如圖 1.判斷ie瀏覽器是 ...
win8.1 AMD 屏幕亮度無法調(diào)整
lenovo z465 ?AMD處理器. win8.1 pro系統(tǒng) ? 屏幕亮度無法調(diào)整解決辦法: ? 1:當(dāng)然是先去本地服務(wù)里禁用"Sensor Monitoring Service&qu ...
Java筆記(三)異常
異常 一.概念 一)為什么會有Java異常機(jī)制 在沒有Java異常機(jī)制的情況下,唯一的退出機(jī)制就是返回值,判斷是否異常的方法就是 返回值.方法根據(jù)是否異常返回不同的返回值,調(diào)用者根據(jù)不同的返回值進(jìn)行判 ...
SQLite在Android程序中的使用方法,SQLite的增刪查改方法
Sqlite: 1.一款用來實(shí)現(xiàn)本地?cái)?shù)據(jù)存儲的輕量級數(shù)據(jù)管理工具,是眾多用來實(shí)現(xiàn)數(shù)據(jù)庫管理的工具之一. 2.Android已經(jīng)將SQLite的代碼功能吸收在它的系統(tǒng)中,我們可以直接在Android程序 ...
總結(jié)
以上是生活随笔為你收集整理的jta mysql_JTA 使用 MySQL 分布式事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP逻辑运算符如何写,PHP 逻辑运算
- 下一篇: mysql大量数据合并_mysql中将多