Cool eye

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            63 Posts :: 4 Stories :: 3 Comments :: 0 Trackbacks
           事務(wù)是一個(gè)非常重要的編程概念,使用事務(wù),可以很簡(jiǎn)單地構(gòu)造出可靠穩(wěn)定的應(yīng)用程序,本文以許多具體的例子介紹了事務(wù)服務(wù)的概念和事務(wù)服務(wù)的具體實(shí)現(xiàn)。
            本文共分兩部分:第一部分從事務(wù)服務(wù)整體描述的角度簡(jiǎn)要介紹了事務(wù)服務(wù)產(chǎn)生的動(dòng)機(jī)、事務(wù)服務(wù)的應(yīng)用和事務(wù)服務(wù)的功能,其中以具體的例子解釋了相關(guān)概念和事務(wù)服務(wù)涉及到的一些術(shù)語(yǔ);第二部分以J2EE中的事務(wù)服務(wù)為例對(duì)事務(wù)的實(shí)現(xiàn)作簡(jiǎn)要的介紹。
          第I部分 事務(wù)服務(wù)簡(jiǎn)述
           

          1. 事務(wù)綜述
           

          事務(wù)是一個(gè)非常重要的編程概念,使用事務(wù),可以很簡(jiǎn)單地構(gòu)造出可靠穩(wěn)定的應(yīng)用程序,尤其對(duì)那些需要進(jìn)行并發(fā)數(shù)據(jù)訪問(wèn)的應(yīng)用程序,事務(wù)更是重要的多。事務(wù)的概念最初應(yīng)用在那些用于商務(wù)操作的應(yīng)用程序上,在這些應(yīng)用中,事務(wù)用來(lái)保護(hù)中央數(shù)據(jù)庫(kù)中的數(shù)據(jù)。隨后,隨著分布式計(jì)算的發(fā)展,事務(wù)在分布式計(jì)算領(lǐng)域中也得到了廣泛的應(yīng)用。現(xiàn)在,在分布式計(jì)算領(lǐng)域中,公認(rèn)為事務(wù)是構(gòu)造可靠性分布式應(yīng)用程序的關(guān)鍵。

          1.1事務(wù)產(chǎn)生的動(dòng)機(jī)

          1.1.1原子操作

          考慮這樣一個(gè)應(yīng)用:用戶把錢從一個(gè)銀行賬號(hào)轉(zhuǎn)賬至另一個(gè)銀行賬號(hào),需要將資金從一個(gè)銀行賬號(hào)中取出,然后再存入另一個(gè)銀行賬號(hào)中。理想來(lái)說(shuō),這兩次操作都應(yīng)該成功。但是,如果有錯(cuò)誤發(fā)生,則兩次操作都應(yīng)該失敗,否則的話,操作之后其中一個(gè)賬號(hào)中的金額將會(huì)是錯(cuò)誤的,整個(gè)操作過(guò)程應(yīng)該是原子性的,兩個(gè)操作都是一個(gè)原子事務(wù)操作的一部分。

          可以使用異常處理來(lái)處理上述問(wèn)題,代碼如下:

          try{  //從賬戶1中取款}catch(Exception e){	//如果發(fā)生錯(cuò)誤,則終止操作	return;}try {	//如果第一步?jīng)]有發(fā)生錯(cuò)誤,則將提取出的資金存入賬戶2	}catch(Exception e) {//如果發(fā)生錯(cuò)誤,則終止這步操作,并且將從賬戶1中取出的資金再重新存回到賬戶1中return ;}

          上面這種解決方法從存在著下面的問(wèn)題:

          • 程序拖沓冗長(zhǎng)
          • 必須考慮到每一步中可能發(fā)生的每一個(gè)問(wèn)題,并且要編寫錯(cuò)誤處理程序來(lái)考慮如何撤銷所作的操作
          • 如果執(zhí)行的是比簡(jiǎn)單的取款、存款操作要復(fù)雜的多的程序,那么錯(cuò)誤處理程序?qū)?huì)變得難以控制。
          • 編寫測(cè)試程序?qū)?huì)非常困難

          因此,需要一種事務(wù)處理機(jī)制來(lái)保證這種原子性的操作。

          1.1.2 網(wǎng)絡(luò)故障或機(jī)器故障

          為了在發(fā)生嚴(yán)重故障之后,能夠保證系統(tǒng)的狀態(tài)是一致的,所以需要一種恢復(fù)性的機(jī)制來(lái)保證這一點(diǎn)。

          1.1.3 數(shù)據(jù)共享

          需要一種機(jī)制來(lái)保證多用戶并發(fā)訪問(wèn)數(shù)據(jù)的問(wèn)題。

          以上這些問(wèn)題的解決方法,便是使用事務(wù)服務(wù)。

          1.2 使用事務(wù)服務(wù)帶來(lái)的好處

          使用事務(wù),便可以利用事務(wù)的四個(gè)重要屬性:ACID。

          • 原子性( atomic):事務(wù)中包含的各項(xiàng)操作必須全部成功執(zhí)行或者全部不執(zhí)行。任何一項(xiàng)操作失敗,將導(dǎo)致整個(gè)事務(wù)失敗,其他已經(jīng)執(zhí)行的任務(wù)所作的數(shù)據(jù)操作都將被撤銷,只有所有的操作全部成功,整個(gè)事務(wù)才算是成功完成。
          • 一致性( consistent):保證了當(dāng)事務(wù)結(jié)束后,系統(tǒng)狀態(tài)是一致的。那么什么是一致的系統(tǒng)狀態(tài)?例如,如果銀行始終遵循著"銀行賬號(hào)必須保持正態(tài)平衡"的原則,那么銀行系統(tǒng)的狀態(tài)就是一致的。上面的轉(zhuǎn)賬例子中,在取錢的過(guò)程中,賬戶會(huì)出現(xiàn)負(fù)態(tài)平衡,在事務(wù)結(jié)束之后,系統(tǒng)又回到一致的狀態(tài)。這樣,系統(tǒng)的狀態(tài)對(duì)于客戶來(lái)說(shuō),始終是一致的。
          • 隔離性( isolated):使得并發(fā)執(zhí)行的事務(wù),彼此無(wú)法看到對(duì)方的中間狀態(tài)。保證了并發(fā)執(zhí)行的事務(wù)順序執(zhí)行,而不會(huì)導(dǎo)致系統(tǒng)狀態(tài)不一致。
          • 持久性( durable):保證了事務(wù)完成后所作的改動(dòng)都會(huì)被持久化,即使是發(fā)生災(zāi)難性的失敗。可恢復(fù)性資源保存了一份事務(wù)日志,如果資源發(fā)生故障,可以通過(guò)日志來(lái)將數(shù)據(jù)重建起來(lái)。

          2. 事務(wù)應(yīng)用
           

          事務(wù)服務(wù)支持的應(yīng)用由下列實(shí)體組成:

          • 事務(wù)客戶(TC,Transactional Client)
          • 事務(wù)對(duì)象(TO,Transactional Objects)
          • 可恢復(fù)對(duì)象(Recoverable Objects)
          • 提供事務(wù)支持的服務(wù)器(Transactional Servers)
          • 可恢復(fù)資源服務(wù)器(Recoverable Servers)

          下圖展示了一個(gè)簡(jiǎn)單的事務(wù)應(yīng)用,包含了基本的事務(wù)元素:


          • 事務(wù)客戶:事務(wù)客戶是一個(gè)獨(dú)立的程序,調(diào)用參與事務(wù)的多個(gè)事務(wù)對(duì)象。發(fā)起事務(wù)的程序被稱為事務(wù)發(fā)起者(Transaction Originator)。
          • 事務(wù)對(duì)象:指那些在事務(wù)范圍內(nèi)行為會(huì)被影響的對(duì)象。事務(wù)對(duì)象自身包含了對(duì)持久化數(shù)據(jù)的操作或者通過(guò)事務(wù)請(qǐng)求間接對(duì)持久化數(shù)據(jù)進(jìn)行操作。事務(wù)服務(wù)并不要求所有的事務(wù)請(qǐng)求都具有事務(wù)性的行為。與事務(wù)對(duì)象相對(duì)的是非事務(wù)對(duì)象。
          • 可恢復(fù)對(duì)象(Recoverable Objects)和資源對(duì)象(Resource Objects):如果事務(wù)提交和事務(wù)的回滾將影響某個(gè)對(duì)象里面的數(shù)據(jù),那么這個(gè)對(duì)象稱為一個(gè)可恢復(fù)對(duì)象。一個(gè)對(duì)象可以是事務(wù)對(duì)象而不是可恢復(fù)對(duì)象,因?yàn)槭聞?wù)對(duì)象可以使用其他的可恢復(fù)對(duì)象。可恢復(fù)對(duì)象必須將自己注冊(cè)為事務(wù)服務(wù)中的一個(gè)資源對(duì)象,才可以參與到事務(wù)中。
          • 支持事務(wù)的服務(wù)器:例如應(yīng)用服務(wù)器
          • 可恢復(fù)服務(wù)器:例如數(shù)據(jù)庫(kù)

          3. 事務(wù)服務(wù)提供的功能
           

          事務(wù)服務(wù)提供下列操作:

          • 控制事務(wù)的范圍和持續(xù)時(shí)間
          • 讓多個(gè)對(duì)象參與到一個(gè)單獨(dú)的原子性事務(wù)中
          • 將對(duì)象內(nèi)部狀態(tài)的改變同事務(wù)相聯(lián)系
          • 協(xié)調(diào)事務(wù)完成

          3.1事務(wù)模型

          • 平面型事務(wù)模型整個(gè)事務(wù)是一個(gè)整體,不可劃分為子事務(wù)。
          • 嵌套式事務(wù)模型嵌套有子事務(wù),子事務(wù)中還可以嵌套有子事務(wù),整個(gè)是一個(gè)樹形結(jié)構(gòu)。旅行計(jì)劃問(wèn)題:
            • 購(gòu)買從美國(guó)波士頓到美國(guó)紐約的火車票
            • 購(gòu)買從美國(guó)紐約到英國(guó)倫敦的飛機(jī)票
            • 購(gòu)買從英國(guó)倫敦到法國(guó)巴黎的氣艇票
            • 發(fā)現(xiàn)沒有飛往法國(guó)巴黎的氣艇票
            這對(duì)于平面型事務(wù)來(lái)說(shuō),只能有一個(gè)選擇:事務(wù)失敗。這樣由于沒有飛往巴黎的氣艇票,將會(huì)取消所有的出行計(jì)劃。但是在這里,完全可以采用其他的旅行方式(購(gòu)買火車票或者飛機(jī)票)來(lái)代替氣艇。因此需要一個(gè)更加健壯的事務(wù)模型來(lái)解決這個(gè)問(wèn)題。可以將整個(gè)事務(wù)劃分為若干個(gè)子事務(wù),整個(gè)事務(wù)可以重新執(zhí)行單個(gè)子事務(wù)來(lái)嘗試完成事務(wù),如果最終某個(gè)單個(gè)子事務(wù)無(wú)法完成,則整個(gè)事務(wù)失敗。
          • 其他事務(wù)模型
            鎖鏈?zhǔn)侥P汀髌媸侥P偷取?

          3.2 事務(wù)的終止

          通過(guò)發(fā)出提交請(qǐng)求或回滾請(qǐng)求來(lái)終止事務(wù)。通常,事務(wù)是由發(fā)起事務(wù)的客戶(事務(wù)發(fā)起者)來(lái)終止的。

          3.3事務(wù)的完整性

          某些事務(wù)服務(wù)的實(shí)現(xiàn)為了保證事務(wù)的完整性,在事務(wù)服務(wù)接口的使用上施加了一些限制。這稱為checked事務(wù)行為。例如,在事務(wù)的所有任務(wù)完成之前提交事務(wù)會(huì)導(dǎo)致數(shù)據(jù)不完整。事務(wù)服務(wù)的Checked實(shí)現(xiàn)會(huì)阻止事務(wù)的過(guò)早提交。其他事務(wù)服務(wù)的實(shí)現(xiàn)則完全依賴應(yīng)用程序來(lái)提供事務(wù)的完整性保證,這稱為unchecked事務(wù)行為。

          3.4事務(wù)的上下文

          事務(wù)上下文惟一標(biāo)識(shí)了一個(gè)事務(wù),保存了事務(wù)的當(dāng)前狀態(tài)。通過(guò)查詢事務(wù)上下文,可以得知自身是否處于事務(wù)中,所在事務(wù)的狀態(tài)以及其他一些有用的信息。

          事務(wù)上下文可以作為事務(wù)操作調(diào)用的一部分隱式地傳遞給事務(wù)對(duì)象。事務(wù)服務(wù)也允許程序員將事務(wù)上下文作為事務(wù)請(qǐng)求的顯示參數(shù)來(lái)傳遞。

          4. 分布式事務(wù)
           

          分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。為了實(shí)現(xiàn)分布式事務(wù),需要使用下面將介紹的兩階段提交協(xié)議。

          • 階段一:開始向事務(wù)涉及到的全部資源發(fā)送提交前信息。此時(shí),事務(wù)涉及到的資源還有最后一次機(jī)會(huì)來(lái)異常結(jié)束事務(wù)。如果任意一個(gè)資源決定異常結(jié)束事務(wù),則整個(gè)事務(wù)取消,不會(huì)進(jìn)行資源的更新。否則,事務(wù)將正常執(zhí)行,除非發(fā)生災(zāi)難性的失敗。為了防止會(huì)發(fā)生災(zāi)難性的失敗,所有資源的更新都會(huì)寫入到日志中。這些日志是永久性的,因此,這些日志會(huì)幸免遇難并且在失敗之后可以重新對(duì)所有資源進(jìn)行更新。
          • 階段二:只在階段一沒有異常結(jié)束的時(shí)候才會(huì)發(fā)生。此時(shí),所有能被定位和單獨(dú)控制的資源管理器都將開始執(zhí)行真正的數(shù)據(jù)更新。

          在分布式事務(wù)兩階段提交協(xié)議中,有一個(gè)主事務(wù)管理器負(fù)責(zé)充當(dāng)分布式事務(wù)協(xié)調(diào)器的角色。事務(wù)協(xié)調(diào)器負(fù)責(zé)整個(gè)事務(wù)并使之與網(wǎng)絡(luò)中的其他事務(wù)管理器協(xié)同工作。


          為了實(shí)現(xiàn)分布式事務(wù),必須使用一種協(xié)議在分布式事務(wù)的各個(gè)參與者之間傳遞事務(wù)上下文信息,IIOP便是這種協(xié)議。這就要求不同開發(fā)商開發(fā)的事務(wù)參與者必須支持一種標(biāo)準(zhǔn)協(xié)議,才能實(shí)現(xiàn)分布式的事務(wù)。

          以上從事務(wù)整體描述的角度簡(jiǎn)要介紹了事務(wù)服務(wù)產(chǎn)生的動(dòng)機(jī)、事務(wù)服務(wù)的應(yīng)用和事務(wù)服務(wù)的功能,下面以J2EE中的事務(wù)服務(wù)為例對(duì)事務(wù)的實(shí)現(xiàn)作簡(jiǎn)要的介紹。

           

          第II部分 J2EE中的事務(wù)服務(wù)
           

          簡(jiǎn)介
           

          Java TM2 Platform, Enterprise Edition(J2EE)簡(jiǎn)化了分布式事務(wù)管理應(yīng)用程序的編寫。J2EE包括了兩套規(guī)范,用來(lái)支持分布式的事務(wù),一種是Java Transaction API(JTA),另一種是Java Transaction Service(JTS)。JTA是一種高層的,與實(shí)現(xiàn)無(wú)關(guān)的,與協(xié)議無(wú)關(guān)的API,應(yīng)用程序和應(yīng)用服務(wù)器可以使用JTA來(lái)訪問(wèn)事務(wù)。JTS則規(guī)定了支持JTA的事務(wù)管理器的實(shí)現(xiàn)規(guī)范,在高層API之下實(shí)現(xiàn)了OMG Object Transaction Service(OTS) 1.1規(guī)范的Java映射。JTS使用Internet Inter-ORB Protocol(IIOP)來(lái)傳播事務(wù)。作為J2EE平臺(tái)實(shí)現(xiàn)的一部分,SUN實(shí)現(xiàn)了一個(gè)支持JTS的事務(wù)管理器,同時(shí)還實(shí)現(xiàn)了JTA。

          JTA和JTS讓J2EE應(yīng)用服務(wù)器完成事務(wù)管理,這樣就使得組件開發(fā)人員擺脫了事務(wù)管理的負(fù)擔(dān)。開發(fā)者只需在部署描述符中聲明事務(wù)管理屬性,便可以使得EJB組件參與到事務(wù)之中,由應(yīng)用服務(wù)器來(lái)負(fù)責(zé)事務(wù)的管理。

          • JTS規(guī)范定義了事務(wù)管理器的實(shí)現(xiàn)。JTS規(guī)范中定義的事務(wù)管理器在高層支持JTA接口規(guī)范,在底層則實(shí)現(xiàn)了OTS1.1(CORBA Object Transaction Service)的標(biāo)準(zhǔn)Java映射。OMG使用IDL(接口定義語(yǔ)言)定義了事務(wù)服務(wù)語(yǔ)言中性的實(shí)現(xiàn),JTS則對(duì)這個(gè)IDL的事務(wù)服務(wù)實(shí)現(xiàn)作了標(biāo)準(zhǔn)的Java映射。JTS使用OTS接口實(shí)現(xiàn)了互操作和移植性。OTS接口定義了一組標(biāo)準(zhǔn)的機(jī)制,使得JTS事務(wù)管理器之間可以使用IIOP(Internet InterORB協(xié)議)來(lái)生成并傳播事務(wù)上下文。
          • 從事務(wù)管理器的角度出發(fā),事務(wù)服務(wù)的具體實(shí)現(xiàn)是不需要暴露出來(lái)的,只需要定義高層接口,使得事務(wù)服務(wù)的用戶可以驅(qū)動(dòng)事務(wù)界限、資源獲取、事務(wù)同步和事務(wù)恢復(fù)過(guò)程。JTA的目的是定義事務(wù)管理器所要求的本地Java接口,從而在企業(yè)級(jí)分布計(jì)算環(huán)境中支持事務(wù)管理。下圖中的小半圓代表JTA規(guī)范。


          J2EE事務(wù)服務(wù)的層次關(guān)系
           

          企業(yè)級(jí)Java中間件的分布式事務(wù)服務(wù)包括五層:事務(wù)管理器(Transaction Manager)、應(yīng)用服務(wù)器(Application Server)、資源管理器(Resource Manager)、應(yīng)用程序(Application Program)和通信資源管理器(Communication Resource Manager)。每一層都通過(guò)實(shí)現(xiàn)一組事務(wù)API和相關(guān)機(jī)制參與到分布式事務(wù)處理系統(tǒng)中。

          • 事務(wù)管理器:是一個(gè)系統(tǒng)級(jí)的組件,是事務(wù)服務(wù)的訪問(wèn)點(diǎn)。提供了一組服務(wù)和相關(guān)的管理機(jī)制,用于支持事務(wù)劃分、事務(wù)資源管理、事務(wù)同步和事務(wù)上下文的傳播。
          • 應(yīng)用服務(wù)器(或者稱為TP monitor)提供了支持應(yīng)用程序運(yùn)行環(huán)境的基礎(chǔ)設(shè)施,這個(gè)運(yùn)行環(huán)境包括了事務(wù)狀態(tài)管理。應(yīng)用服務(wù)器的一個(gè)例子是EJB服務(wù)器。
          • 資源管理器(通過(guò)資源適配器[Resource Adapter],資源適配器類似于數(shù)據(jù)庫(kù)連接)為應(yīng)用程序提供了對(duì)資源的訪問(wèn)。資源管理器通過(guò)實(shí)現(xiàn)一組事務(wù)資源接口來(lái)參與到分布式事務(wù)中。事務(wù)管理器使用這組事務(wù)資源接口在處理事務(wù)聯(lián)系、事務(wù)完成和事務(wù)恢復(fù)的相關(guān)工作。資源管理器的一個(gè)例子是關(guān)系數(shù)據(jù)庫(kù)服務(wù)器。
          • 基于組件的事務(wù)性應(yīng)用運(yùn)行在應(yīng)用服務(wù)器環(huán)境中,需要依賴應(yīng)用服務(wù)器通過(guò)事務(wù)屬性聲明設(shè)置所提供的事務(wù)管理支持。這種類型應(yīng)用的典型例子是EJB。除此之外,一些獨(dú)立的Java客戶端程序需要使用應(yīng)用服務(wù)器或事務(wù)管理器所提供的高層接口來(lái)控制事務(wù)界限。
          • 通訊資源管理器(CRM)支持事務(wù)上下文的傳播和事務(wù)服務(wù)的訪問(wèn)請(qǐng)求。JTA文檔中沒有規(guī)定通信的要求。請(qǐng)參考JTS規(guī)范[2]獲得有關(guān)事務(wù)管理器之間互操作的詳細(xì)信息。

          從事務(wù)管理器的角度出發(fā),事務(wù)服務(wù)的具體實(shí)現(xiàn)是不需要暴露出來(lái)的,只需要定義高層接口,使得事務(wù)服務(wù)的用戶可以驅(qū)動(dòng)事務(wù)界限、資源獲取、事務(wù)同步和事務(wù)恢復(fù)過(guò)程。JTA的目的是定義事務(wù)管理器所要求的本地Java接口,從而在企業(yè)級(jí)分布計(jì)算環(huán)境中支持事務(wù)管理。下圖中的小半圓代表JTA規(guī)范。


          JTS中規(guī)定的事務(wù)管理器的實(shí)現(xiàn)
           

          本節(jié)從事務(wù)管理器實(shí)現(xiàn)者的角度描述了實(shí)現(xiàn)方面的要求。如下圖,事務(wù)管理器必須實(shí)現(xiàn)JTA接口,用于支持應(yīng)用服務(wù)器和資源管理器。不要求實(shí)現(xiàn)對(duì)JDBC 1.0 Driver和非JTA資源管理器支持。也不要求實(shí)現(xiàn)對(duì)各種CORBA應(yīng)用實(shí)體的支持,如事務(wù)客戶端(Transactional Client)、事務(wù)服務(wù)器(Transactional Server)和恢復(fù)服務(wù)器(Recoverable Server)。


          Java Transaction API
           

          Java Transaction API由三部分組成:高層的應(yīng)用事務(wù)劃分接口(供事務(wù)客戶使用)、高層的事務(wù)管理器接口(供應(yīng)用服務(wù)器使用)和X/Open XA協(xié)議的標(biāo)準(zhǔn)Java映射(供事務(wù)性資源管理器使用)。

          4.1 UserTransaction接口

          Javax.transaction.UserTransaction接口使得應(yīng)用程序能夠編程控制事務(wù)邊界。這個(gè)接口可以由Java客戶端程序或者EJB來(lái)使用。

          4.1.1在EJB Server中的UserTransaction支持

          EJB中對(duì)事務(wù)的管理有兩種類型:

          1. Bean自管理事務(wù)對(duì)于自管理事務(wù)的EJB,需要從EJB上下文中獲取UserTransaction的接口引用,由自己負(fù)責(zé)完成事務(wù)的開始、提交或者回滾。
            try {javax.transaction.UserTransaction userTran = ctx.getUserTransaction();userTran.begin();… //執(zhí)行事務(wù)性的程序邏輯userTran.commit();}catch(Exception e) {	userTran.rollBack();	throw new Exception("……");}
            EJB這樣處理事務(wù)稱為編程型事務(wù)。
          2. 由容器負(fù)責(zé)事務(wù)管理對(duì)于這樣的EJB,只需在其部署描述符中指定所需的事務(wù)相關(guān)屬性,便可由EJB容器代替EJB進(jìn)行事務(wù)管理。這稱為聲明式事務(wù)。

          4.1.2 事務(wù)客戶端中的UserTransaction支持

          Java客戶端程序需要首先通過(guò)JNDI來(lái)獲得UserTransaction對(duì)象的引用,然后使用該對(duì)象的方法完成事務(wù)的開始、提交或者回滾。

          java.util.Properties env = …Context ctx = new InitialContext(env);Javax.transaction.UserTransaction userTran = (javax.transaction.UserTransaction)ctx.lookup("javax.transaction.UserTransaction");userTran.commit()try {	userTran.commit();}catch(Exception e) {	userTran.rollBack();	throw new Exception("……");}

          4.2 TransactionManager接口

          應(yīng)用服務(wù)器使用javax.transaction.TransactionManager接口來(lái)代表受控的應(yīng)用程序控制事務(wù)的邊界。例如,EJB容器為事務(wù)性EJB組件管理事務(wù)狀態(tài)。

          4.3 Transaction接口

          使用Transaction接口可以執(zhí)行與目標(biāo)對(duì)象相關(guān)聯(lián)的事務(wù)操作。

          4.4 XAResource接口

          Javax.transaction.xa.XAResource接口是基于X/Open CAE規(guī)范(分布式事務(wù)處理:XA規(guī)范)工業(yè)標(biāo)準(zhǔn)XA接口的Java映射。 XAResource接口定義了分布式事務(wù)處理環(huán)境(DTP)中資源管理器和事務(wù)管理器之間是如何交互的。資源管理器的資源適配器實(shí)現(xiàn)了XAResource接口,將事務(wù)同事務(wù)資源聯(lián)系起來(lái),類似關(guān)系數(shù)據(jù)庫(kù)的一個(gè)連接。


          4.5 Xid接口

          Javax.transaction.xa.Xid接口是X/Open事務(wù)標(biāo)識(shí)符XID結(jié)構(gòu)的Java映射。這個(gè)接口由事務(wù)管理器和資源管理器來(lái)使用,對(duì)于應(yīng)用程序和應(yīng)用服務(wù)器而言這個(gè)接口是不可見的。

          posted on 2006-10-23 09:42 joeyeezhang 閱讀(283) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 禄丰县| 沙田区| 咸丰县| 大同市| 若羌县| 改则县| 冷水江市| 寿光市| 六枝特区| 龙岩市| 嵩明县| 峨山| 奉节县| 普洱| 阿勒泰市| 永春县| 长乐市| 桐乡市| 聊城市| 仪陇县| 胶州市| 金坛市| 孝义市| 藁城市| 平果县| 资兴市| 宿州市| 石家庄市| 桦甸市| 藁城市| 南昌市| 玛纳斯县| 福泉市| 洪湖市| 中西区| 顺平县| 凭祥市| 宣汉县| 长春市| 嘉定区| 兴安盟|