新聞中心
本節(jié)主要介紹如何使用 Oracle XA 功能實(shí)現(xiàn)分布式事務(wù)的示例。

創(chuàng)新互聯(lián)專注于長壽企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),購物商城網(wǎng)站建設(shè)。長壽網(wǎng)站建設(shè)公司,為長壽等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
Oracle XA 導(dǎo)入
使用 Oracle XA 功能必須導(dǎo)入以下內(nèi)容:
import oracle.jdbc.xa.OracleXid;
import oracle.jdbc.xa.OracleXAException;
import oracle.jdbc.pool.*;
import oracle.jdbc.xa.client.*;
import javax.transaction.xa.*;oracle.jdbc.pool 軟件包具有用于連接池功能的類,并將與 XA 相關(guān)的類作為子類。
或者,如果代碼將在數(shù)據(jù)庫內(nèi)部運(yùn)行并訪問該數(shù)據(jù)庫以進(jìn)行 SQL 操作,則必須導(dǎo)入 oracle.jdbc.xa.server 而不是 oracle.jdbc.xa.client。語法如下:
import oracle.jdbc.xa.server.*;客戶端和服務(wù)器軟件包分別具有 OracleXADataSource、OracleXAConnection 和 OracleXAResource 類的版本。 這三個類的抽象版本位于頂級 oracle.jdbc.xa 包中。
Oracle XA 代碼示例
如下為 XA 事務(wù)的處理過程示例:
-
使用
XA START啟動 XA 事務(wù),并將其置于ACTIVE狀態(tài)。 -
對于處于
ACTIVE狀態(tài)的 XA 事務(wù),執(zhí)行構(gòu)成該事務(wù)的 SQL 語句,然后執(zhí)行XA END語句。XA END使事務(wù)置于IDLE狀態(tài)。 -
對于處于
IDLE狀態(tài)的 XA 事務(wù),可以執(zhí)行XA PREPARE語句或XA COMMIT ... ONE PHASE語句:-
XA PREPARE將事務(wù)置于PREPARED狀態(tài)。此時的XA RECOVER語句在其輸出中包括事務(wù)的xid值,因?yàn)?nbsp;XA RECOVER會列出所有處于PREPARED狀態(tài)的 XA 事務(wù)。 -
XA COMMIT ... ONE PHASE用于預(yù)備和提交事務(wù)。由于事務(wù)終止,xid值未由XA RECOVER列出。
-
-
對于處于
PREPARED狀態(tài)的 XA 事務(wù),可以執(zhí)行XA COMMIT語句來提交和終止事務(wù),或者執(zhí)行XA ROLLBACK來回滾和終止事務(wù)。
public static void initClass() throws SQLException {
createTable(tableName1, "c1 int,c2 int");
createTable(tableName2, "c1 int,c2 int");
createTable(tableName3, "c1 varchar(200)");
}
public void obOracleXAOne() throws Exception {
Assume.assumeTrue(sharedUsePrepare());
Connection conn = setConnection();
conn.createStatement().execute(" insert into " + tableName1 + " values(1,2)");
JDBC4MysqlXAConnection mysqlXAConnection = new JDBC4MysqlXAConnection(
(OceanBaseConnection) conn);
String gtridStr = "gtrid_test_wgs_ob_oracle_xa_one";
String bqualStr = "bqual_test_wgs_ob_oracle_xa_one";
Xid xid = new MysqlXid(gtridStr.getBytes(), bqualStr.getBytes(), 123);
try {
mysqlXAConnection.start(xid, XAResource.TMNOFLAGS);
PreparedStatement pstmt = null;
ResultSet rs = null;
pstmt = conn.prepareStatement("select c1 from " + tableName1);
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
pstmt.close();
pstmt = conn.prepareStatement("insert into " + tableName1 + " (c1, c2) values(?, ?)");
pstmt.setInt(1, 12);
pstmt.setInt(2, 12);
pstmt.executeUpdate();
mysqlXAConnection.end(xid, XAResource.TMSUCCESS);
mysqlXAConnection.prepare(xid);
mysqlXAConnection.commit(xid, false);
} catch (Exception e) {
e.printStackTrace();
mysqlXAConnection.rollback(xid);
throw e;
}
}
public void obOracleXAOnePhase() throws Exception {
Assume.assumeTrue(sharedUsePrepare());
Connection conn = null;
conn = setConnection();
conn.createStatement().execute(" insert into " + tableName2 + " values(1,2)");
JDBC4MysqlXAConnection mysqlXAConnection = new JDBC4MysqlXAConnection(
(OceanBaseConnection) conn);
String gtridStr = "gtrid_test_wgs_ob_oracle_xa_one_phase";
String bqualStr = "bqual_test_wgs_ob_oracle_xa_one_phase";
Xid xid = new MysqlXid(gtridStr.getBytes(), bqualStr.getBytes(), 123);
try {
mysqlXAConnection.start(xid, XAResource.TMNOFLAGS);
// ps test
PreparedStatement pstmt = null;
ResultSet rs = null;
pstmt = conn.prepareStatement("select c1 from " + tableName2 + "");
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
pstmt.close();
pstmt = conn.prepareStatement("insert into " + tableName2 + " (c1, c2) values(?, ?)");
pstmt.setInt(1, 12);
pstmt.setInt(2, 12);
pstmt.executeUpdate();
mysqlXAConnection.end(xid, XAResource.TMSUCCESS);
mysqlXAConnection.commit(xid, true);
} catch (Exception e) {
mysqlXAConnection.rollback(xid);
throw e;
}
} 當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)OceanBase教程:OceanBase分布式事務(wù)示例
URL分享:http://m.fisionsoft.com.cn/article/dhijiig.html


咨詢
建站咨詢
