阿寶 Keep Walking......


          JUST DO IT, DO YOUR BEST ! -- 勿在浮沙筑高臺

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            49 Posts :: 6 Stories :: 26 Comments :: 0 Trackbacks
          1. Transaction 分兩種,Local Transaction 和 Global Transaction。
          涉及到一個Connection的Commit,稱為Local Transaction。
          涉及到多個Connection的Commit,稱為Global Transaction。
          樓主提到的是,Global Transaction.

          2. 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接口的實現(xiàn),需要數(shù)據(jù)庫的JDBC提供。
          數(shù)據(jù)庫本身要支持XA。數(shù)據(jù)庫的JDBC也要提供XA的實現(xiàn)。

          Oracle, Sybase, DB2, SQL Server等大型數(shù)據(jù)庫才支持XA, 支持Global Transaction。
          My SQL 連Local Transaction都支持不好,更別說Global Transation了。

          3. XA需要兩階段提交 -- prepare 和 commit.
          假設(shè)有兩個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()失敗了。
          這時候,會拋出一個 “啟發(fā)式異常”。程序可以處理這個異常。比如,XAResouce.recover()之類。
          但一般情況下,還真沒別的辦法,需要數(shù)據(jù)管理員根據(jù)數(shù)據(jù)操作日志 undo所有的操作,或者恢復(fù)數(shù)據(jù)備份。
          有的數(shù)據(jù)庫在進(jìn)行數(shù)據(jù)操作的時候,會生成一個“反操作”日志。比如,insert 對 delete, 等。

          4. TransactionManager的實現(xiàn)能夠處理多個XAResouce(一個XAResouce list)的情況。
          比如Tyrex。或JBoss等EJB Server的Transaction實現(xiàn)代碼。
          posted on 2006-06-01 11:56 阿寶 閱讀(1869) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 武川县| 韩城市| 大同县| 政和县| 五莲县| 呼和浩特市| 深州市| 松江区| 拜城县| 太仆寺旗| 尼玛县| 舟曲县| 河北区| 金寨县| 宁波市| 中江县| 建水县| 平果县| 夏邑县| 淅川县| 思茅市| 青龙| 荃湾区| 浦北县| 南汇区| 金堂县| 东台市| 泽州县| 罗江县| 三河市| 安阳市| 盘山县| 易门县| 航空| 海盐县| 扬州市| 神农架林区| 容城县| 盘锦市| 桂阳县| 沁阳市|