JTA(Java Transaction API)允許應用程序執行分布式事務處理--在兩個或多個網絡計算機資源上訪問並且更新數據。JDBC驅動程序的JTA支持極大地增強了數據訪問能力。
本文的目的是要提供一個關於的Java事務處理API(JTA)的高級的概述,以及與分布式事務相關的內容。一個事務處理定義了一個工作邏輯單元,要麼徹底成功要麼不產生任何結果。 一個分布式事務處理只是一個在兩個或更多網絡資源上訪問和更新數據的事務處理,因此它在那些資源之間必然是等價的。在本文中,我們主要關心的是如何處理關系數據庫系統。
我們要討論的分布式事務處理(DTP)模型中包含的組件是:
應用程序
應用程序服務器
事務管理程序
資源適配器
資源管理程序
在以後的內容中,我們將描述這些組件以及它們與JTA和數據庫訪問的關系。
訪問數據庫
最好把分布式事務處理中包含的組件看作是獨立的過程,而不是考慮它們在一個特定的電腦中的位置。這些組件中的一些可以保存在單機中,或者也可在好幾台機器之間分布。 下面例子中的圖表可以顯示在一台特定的電腦上的組件,但是這些操作之間的關系是必須首要考慮的。
最簡單的例子:用於本地數據庫事務處理的應用程序
關系數據庫訪問的最簡單的形式僅僅包括應用程序、資源管理程序和資源適配器。應用程序只不過是發送請求到數據庫並且從數據庫中獲取數據的最終用戶訪問點
我們討論的資源管理程序是一個關系數據庫管理系統(RDBMS),比如Oracle或者SQL Server。所有的實際數據庫管理都是由這個組件處理的。
資源適配器是外部空間之間的通信管道組件,或者是請求翻譯器,在本例中,是應用程序和資源管理程序。在我們的討論中,這是一個JDBC驅動程序。
下面的描述是資源管理程序本地事務處理的一個描述,也就是說,一個事務處理被被限制在一個特定的企業數據庫。
應用程序發送一個用於JDBC驅動程序數據的請求,然後翻譯這個請求並把它通過網絡發送到數據庫中。 數據庫把數據發送回驅動程序,然後把翻譯的結果發送回應用程序,如下圖所示:
這個例子說明了在一個簡化的系統中的基本的信息流;然而,今天的企業使用的應用程序服務器都添加了其他的組件到這個過程處理中。
應用程序服務器
應用程序服務器是事務處理操作的另一個組件。應用程序服務器處理大部分的應用程序操作並且獲得最終用戶應用程序的一些負載。基於前面的例子,我們可以看出應用程序服務器在事務處理上添加了另一個操作層:
到目前為止,我們的例子說明了單個的本地事務處理,並且描述了分布式事務處理模型的五個組件中的四個。第五個組件,事務管理程序只有當事務將要被分配的時候才會開始被考慮。
分布式事務處理和事務管理程序
像我們前面所提到的,一個分布式事務處理是一個在兩個或更多網絡資源上訪問和更新數據的事務處理。
這些資源可以由好幾個位於一個單獨服務器上的不同的關系型數據庫管理系統組成,比如說Oracle、SQL Server和Sybase;它們也可以包含存在於若干不同的服務器上的同一種數據庫的若干個實例。在任何情況下,一個分布式事務處理包括各種的資源管理程序之間的協同作用。這個協同作用是事務管理函數。
事務管理程序負責作出要麼提交(commit)要麼退回(rollback)任何分布式事務處理的決定。一個提交決定應該導致一個成功的事務處理;而退回操作則是保持數據庫中的數據不變。 JTA指定一個分布式事務處理中的事務管理程序和另一個組件之間的標准Java接口:應用程序,應用程序服務器和資源管理程序。 這個關系被顯示在下面的圖表中:
在事務管理程序周圍的數字框框相應於JTA的三個接口部分:
1?UserTransaction?javax.transaction.UserTransaction接口提供能夠編程地控制事務處理范圍的應用程序。 javax.transaction.UserTransaction方法開啟一個全局事務並且使用調用線程與事務處理關聯。