鷹翔宇空

          學(xué)習(xí)和生活

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          引自:http://act.it.sohu.com/book/chapter.php?id=387&volume=4&chapter=2

          應(yīng)用程序服務(wù)器

            應(yīng)用程序服務(wù)器是事務(wù)處理操作的另一個組件。應(yīng)用程序服務(wù)器處理大部分的應(yīng)用程序操作并且獲得最終用戶應(yīng)用程序的一些負載?;谇懊娴睦樱覀兛梢钥闯鰬?yīng)用程序服務(wù)器在事務(wù)處理上添加了另一個操作層:


            到目前為止,我們的例子說明了單個的本地事務(wù)處理,并且描述了分布式事務(wù)處理模型的五個組件中的四個。第五個組件,事務(wù)管理程序只有當事務(wù)將要被分配的時候才會開始被考慮。

            分布式事務(wù)處理和事務(wù)管理程序

            像我們前面所提到的,一個分布式事務(wù)處理是一個在兩個或更多網(wǎng)絡(luò)資源上訪問和更新數(shù)據(jù)的事務(wù)處理。

            這些資源可以由好幾個位于一個單獨服務(wù)器上的不同的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)組成,比如說Oracle、SQL Server和Sybase;它們也可以包含存在于若干不同的服務(wù)器上的同一種數(shù)據(jù)庫的若干個實例。在任何情況下,一個分布式事務(wù)處理包括各種的資源管理程序之間的協(xié)同作用。這個協(xié)同作用是事務(wù)管理函數(shù)。

            事務(wù)管理程序負責作出要么提交(commit)要么退回(rollback)任何分布式事務(wù)處理的決定。一個提交決定應(yīng)該導(dǎo)致一個成功的事務(wù)處理;而退回操作則是保持數(shù)據(jù)庫中的數(shù)據(jù)不變。 JTA指定一個分布式事務(wù)處理中的事務(wù)管理程序和另一個組件之間的標準Java接口:應(yīng)用程序,應(yīng)用程序服務(wù)器和資源管理程序。 這個關(guān)系被顯示在下面的圖表中:



            在事務(wù)管理程序周圍的數(shù)字框框相應(yīng)于JTA的三個接口部分:

            1—UserTransaction—javax.transaction.UserTransaction接口提供能夠編程地控制事務(wù)處理范圍的應(yīng)用程序。 javax.transaction.UserTransaction方法開啟一個全局事務(wù)并且使用調(diào)用線程與事務(wù)處理關(guān)聯(lián)。

            2—Transaction Manager—javax.transaction.TransactionManager接口允許應(yīng)用程序服務(wù)器來控制代表正在管理的應(yīng)用程序的事務(wù)范圍。

            3—XAResource—javax.transaction.xa.XAResource接口是一個基于X/Open CAE Specification的行業(yè)標準XA接口的Java映射。

            注意,一個限制性環(huán)節(jié)是通過JDBC驅(qū)動程序的XAResource接口的支持。JDBC驅(qū)動程序必須支持兩個正常的JDBC交互作用:應(yīng)用程序和/或應(yīng)用程序服務(wù)器,而且以及JTA的XAResource部分。

            編寫應(yīng)用程序水平代碼的開發(fā)者不會關(guān)心分布式事務(wù)處理管理的細節(jié)。 這是分布式事務(wù)處理基本結(jié)構(gòu)的工作—應(yīng)用程序服務(wù)器、事務(wù)管理程序和JDBC驅(qū)動程序。應(yīng)用程序代碼中唯一的需要注意的就是當連接處于一個分布式事務(wù)范圍內(nèi)的時候,不應(yīng)該調(diào)用一個會影響事務(wù)邊界的方法。特別的是,一個應(yīng)用程序不應(yīng)該調(diào)用Connection方法commit、rollback和setAutoCommit(true),因為它們將破壞分布式事務(wù)的基本結(jié)構(gòu)管理。

            分布式事務(wù)處理

            事務(wù)管理程序是分布式事務(wù)基本結(jié)構(gòu)的基本組件;然而JDBC驅(qū)動程序和應(yīng)用程序服務(wù)器組件應(yīng)該具備下面的特征:

            驅(qū)動程序應(yīng)該實現(xiàn)JDBC 2.0應(yīng)用程序接口,包括Optional Package接口XADataSource和XAConnection以及JTA接口XAResource。

            應(yīng)用程序服務(wù)器應(yīng)該提供一個DataSource類,用來實現(xiàn)與分布式事務(wù)基本結(jié)的交互以及一個連接池模塊(用于改善性能)。

            分布式事務(wù)處理的第一步就是應(yīng)用程序要發(fā)送一個事務(wù)請求到事務(wù)管理程序。雖然最后的commit/rollback決定把事務(wù)作為一個簡單的邏輯單元來對待,但是仍然可能會包括許多事務(wù)分支。一個事務(wù)分支與一個到包含在分布式事務(wù)中的每個資源管理程序相關(guān)聯(lián)。因此,到三個不同的關(guān)系數(shù)據(jù)庫管理的請求需要三個事務(wù)分支。每個事務(wù)分支必須由本地資源管理程序提交或者返回。事務(wù)管理程序控制事務(wù)的邊界,并且負責最后決定應(yīng)該提交或者返回的全部事務(wù)。 這個決定由兩個步驟組成,稱為Two - Phase Commit Protocol。

            在第一步驟中,事務(wù)管理程序輪詢所有包含在分布式事務(wù)中的資源管理程序(關(guān)系數(shù)據(jù)庫管理)來看看哪個可以準備提交。如果一個資源管理程序不能提交,它將不響應(yīng),并且把事務(wù)的特定部分返回,以便數(shù)據(jù)不被修改。

            在第二步驟中,事務(wù)管理程序判斷否定響應(yīng)的資源管理程序中是否有能夠返回整個事務(wù)的。如果沒有否定響應(yīng)的話,翻譯管理程序提交整個事務(wù)并且返回結(jié)果到應(yīng)用程序中。

            開發(fā)事項管理程序代碼的開發(fā)者必須與所有三個JTA接口有關(guān):UserTransaction、TransactionManager和XAResource,這三個接口都被描述在

            Sun JTA specification中。JDBC驅(qū)動程序開發(fā)者只需要關(guān)心XAResource接口。這個接口是允許一個資源管理程序參與事務(wù)的行業(yè)標準X/Open XA協(xié)議的Java映射。連接XAResource接口的驅(qū)動程序組件負責在事務(wù)管理程序和資源管理程序之間擔任"翻譯"的任務(wù)。下面的章節(jié)提供了XAResource調(diào)用的例子。
          posted on 2006-02-20 14:45 TrampEagle 閱讀(255) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 辽阳市| 临汾市| 隆昌县| 胶州市| 崇义县| 中山市| 汨罗市| 金川县| 保靖县| 南康市| 沅江市| 郧西县| 武川县| 曲松县| 武平县| 论坛| 晋宁县| 荆门市| 汽车| 淮阳县| 平利县| 津南区| 宣城市| 东莞市| 秀山| 交城县| 建瓯市| 曲靖市| 华蓥市| 井研县| 海原县| 黄陵县| 贵定县| 日喀则市| 盐池县| 丁青县| 咸宁市| 广丰县| 柏乡县| 惠东县| 平阳县|