1. 程式人生 > >XA,兩階段提交和X/Open協議

XA,兩階段提交和X/Open協議

XA和兩階段提交

        分散式事務處理是指一個事務可能涉及多個數據庫操作,分散式事務處理的關鍵是必須有一種方法可以知道事務在任何地方所做的所有動作,提交或回滾事務的決定必須產生統一的結果(全部提交或全部回滾)。
    
      X/Open組織(即現在的Open Group)定義了分散式事務處理模型。X/Open DTP模型(1994)包括應用程式(AP)、事務管理器(TM)、資源管理器(RM)、通訊資源管理器(CRM)四部分。一般,常見的事務管理器(TM)是交易中介軟體,常見的資源管理器(RM)是資料庫,常見的通訊資源管理器(CRM)是訊息中介軟體。為表述方便起見,在本文中直接以其常見表現形式進行描述。

      一般情況下,某一資料庫無法知道其它資料庫在做什麼,因此,在一個DTP環境中,交易中介軟體是必需的,由它通知和協調相關資料庫的提交或回滾。而一個數據庫只將其自己所做的操作(可恢復)影射到全域性事務中。 
      
      XA就是X/Open DTP定義的交易中介軟體與資料庫之間的介面規範(即介面函式),交易中介軟體用它來通知資料庫事務的開始、結束以及提交、回滾等。XA介面函式由資料庫廠商提供。

       通常情況下,交易中介軟體與資料庫通過XA 介面規範,使用兩階段提交來完成一個全域性事務,XA規範的基礎是兩階段提交協議。 

      在第一階段,交易中介軟體請求所有相關資料庫準備提交(預提交)各自的事務分支,以確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,並給交易中介軟體一個同意提交的應答,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放(處於上鎖狀態)。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,釋放對共享資源上的鎖,並返回給交易中介軟體失敗應答。

  在第二階段,交易中介軟體審查所有資料庫返回的預提交結果,如所有資料庫都可以提交,交易中介軟體將要求所有資料庫做正式提交,這樣該全域性事務被提交。而如果有任一資料庫預提交返回失敗,交易中介軟體將要求所有其它資料庫回滾其操作,這樣該全域性事務被回滾。


 WEBLOGIC
 我不明白用XA Driver建連線池目的是什麼?為了用JTA嗎?
是不是要用為了用JTA,就必須用XA 型驅動。

XA driver就是遵循X/Open協議的兩階段提交驅動
在J2ee裡JTA可以用JTS協作XA的資料來源實現兩階段提交,如果驅動不支援XA,JTS就不能協調工作了(可以模擬,但一般不推薦使用).
今天我又查了一下,好像就是 X/Open CAE 的縮寫。反正就是遵循的協議。
特點是支援分散式事務的兩階段提交。應該對吧。
追問一句,所謂TxDataSource,是不是也就是對應於XA型驅動的連線池的DataSource.