2012-03-16 236 views
0

今天我讀了JTA api,我看到了名爲UserTransactionManager的類。我們必須在執行SQL查詢之前開始我們的事務,以便如果發生任何異常,我們可以回滾這些更改。UserTransactionManager究竟做了什麼

這裏我的問題是UserTransactionManager究竟在做什麼?它提供任何堆棧來執行SQL查詢?它如何回滾SQL查詢更改?

回答

1

UserTransactionManager是一個接口。您的容器在運行時提供了實現。

它使用了一個名爲2階段提交的進程,其中發生了「軟提交」,並且行被保留在緩存中,然後在稍後進行硬提交。以下是基本概述:

當您使用XA協議打開事務時,容器與數據庫進行通信,並說「嘿,給我一個連接,但實際上直到磁盤('提交')才寫任何東西,直到我告訴你如此。」

接下來,您運行一些查詢,並將其清除到數據庫。當你刷新你的容器詢問數據庫時,「嘿,運行這些查詢,但是直到我告訴你之前不要寫任何東西,如果你不能保證它們立即成功拋出錯誤,如果它們成功,鎖定行和表,直到你再次聽到我的聲音,我給你確定承諾「。

最後,程序關閉UserTransaction。然後容器對數據庫說:「確定你鎖定的所有行,將所有內容刷新到磁盤(提交)並解除鎖定。」

這實際上更復雜一點,特別是當你協調全球交易......但基本上如果所有的參與者都同意他們可以保證提交,那麼他們都承諾,或者沒有人提交。

延伸閱讀:

+0

謝謝你的快速回復。根據您的回答,集裝箱充當交易協調員。那麼編程式事務呢,那麼UserTransactionManager就像一個協調器? – 2012-03-16 06:50:22

+0

它實際上仍然是管理交易的容器。 UserTransactionManager允許您的應用程序告訴容器何時/在何處/結束交易。 – 2012-03-16 06:59:52

+0

謝謝你的回答。 – 2012-03-16 10:17:46