亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

具有同步回退處理特征的事務(wù)處理的系統(tǒng)和方法

文檔序號(hào):6427342閱讀:260來(lái)源:國(guó)知局

專利名稱::具有同步回退處理特征的事務(wù)處理的系統(tǒng)和方法
技術(shù)領(lǐng)域
:本發(fā)明一般涉及應(yīng)用程序和事務(wù)服務(wù)器,特別是涉及一種允許回退(callback)處理與事務(wù)或者消息的完成相同步的系統(tǒng)。優(yōu)先權(quán)要求本申請(qǐng)要求以下美國(guó)申請(qǐng)的優(yōu)先權(quán)于2002年7月15日提交的申請(qǐng)?zhí)枮椋撸叩拿绹?guó)實(shí)用新型申請(qǐng)“具有同步回退處理特征的事務(wù)處理的系統(tǒng)和方法”,以及于2001年7月17日提交的申請(qǐng)?zhí)枮?0/306105的美國(guó)臨時(shí)申請(qǐng)“具有同步回退處理特征的事務(wù)處理的系統(tǒng)”,以及于2001年7月30日提交的申請(qǐng)?zhí)枮?0/308693的“具有同步回退處理特征的事務(wù)處理的系統(tǒng)”,上述申請(qǐng)?jiān)诖艘?,以資參考。交叉參考本申請(qǐng)涉及共同待審的實(shí)用新型申請(qǐng)“具有事務(wù)特性特征的事務(wù)處理的系統(tǒng)(SYSTEMFORTRANSACTIONPROCESSINGWITHPROPERTYFEATURE)”(申請(qǐng)?zhí)枺撸?,發(fā)明人EdwardP.Felt,PriscillaFung,AlexSomogyi,SriramSrinivasan;2002年7月15日提交),和“具有委托提交特征的事務(wù)處理的系統(tǒng)(SYSTEMFORTRANSACTIONPROCESSINGWITHDELEGATEDCOMMITFEATURE”(申請(qǐng)?zhí)枺撸?,發(fā)明人EdwardP.Felt,PriscillaFung,AlexSomogyi,SriramSrinivasan,2002年7月15日提交);在此對(duì)這兩件申請(qǐng)整體引用,以資參考。
背景技術(shù)
:Java2平臺(tái)企業(yè)版(J2EE)規(guī)范定義了開發(fā)多層企業(yè)應(yīng)用程序的一個(gè)當(dāng)前標(biāo)準(zhǔn)。J2EE為企業(yè)應(yīng)用程序的設(shè)計(jì)、開發(fā)、裝配和部署提供了一種基于組件的方法,既降低了成本又能夠更快速設(shè)計(jì)和實(shí)施。J2EE向開發(fā)者提供了多層分布式應(yīng)用程序模型、再利用組件的能力、統(tǒng)一標(biāo)準(zhǔn)的安全模型以及靈活的事務(wù)控制。它們不僅能夠比以往更快地向市場(chǎng)提交創(chuàng)新的顧客方案,而且還不把所得到的平臺(tái)獨(dú)立的J2EE基于組件的方案捆綁到任何一個(gè)賣方的產(chǎn)品和應(yīng)用程序接口上。J2EE規(guī)范定義了以下各種組件應(yīng)用程序客戶組件;企業(yè)JavaBeans(EJB);servlet(小服務(wù)程序)和Java服務(wù)器頁(yè)(JSP)(還稱之為Web組件);小程序(applet)。多層分布式應(yīng)用程序模型是指根據(jù)功能將應(yīng)用程序劃分成多個(gè)組件,并且不同的應(yīng)用程序組件可以構(gòu)成相同或者不同服務(wù)器上的J2EE應(yīng)用程序。實(shí)際安裝應(yīng)用程序組件依賴于應(yīng)用程序組件屬于多層J2EE環(huán)境中的哪個(gè)層。這些層在圖1中示出。如圖所示,應(yīng)用程序服務(wù)器層4用來(lái)開發(fā)EJB容器和/或表現(xiàn)容器如servlet、JSP和html頁(yè)14。這些容器又用作客戶層2與尾端層6之間的接口,其中在客戶層2中部署客戶8和客戶應(yīng)用程序,而尾端層6用來(lái)?yè)?dān)當(dāng)企業(yè)或傳統(tǒng)應(yīng)用程序如企業(yè)資源規(guī)劃(ERP)系統(tǒng)的宿主。客戶層-這些可以是瀏覽器、基于Java的程序,或者運(yùn)行于客戶層內(nèi)并位于公司防火墻內(nèi)側(cè)和外側(cè)的其它Web使能編程環(huán)境。應(yīng)用程序服務(wù)器層-該層通常擔(dān)當(dāng)支持客戶請(qǐng)求的表現(xiàn)邏輯和商務(wù)邏輯組合的宿主。表現(xiàn)邏輯經(jīng)由顯示HTML頁(yè)的JSP頁(yè)和servlet來(lái)支持,而商務(wù)邏輯經(jīng)由遠(yuǎn)程方法調(diào)用(RMI)對(duì)象和EJB12來(lái)支持。EJB依賴事務(wù)的容器環(huán)境、壽命周期和狀態(tài)管理、資源組合、安全性等,它們共同構(gòu)成運(yùn)行bean的運(yùn)行時(shí)間環(huán)境。尾端層-這通常是現(xiàn)存應(yīng)用程序和數(shù)據(jù)存儲(chǔ)的組合。它還被稱之為企業(yè)信息系統(tǒng)(EIS)層,因?yàn)樗梢园缙髽I(yè)資源規(guī)劃(ERP)、主機(jī)事務(wù)處理、數(shù)據(jù)庫(kù)系統(tǒng)和其它老式信息系統(tǒng)那樣的系統(tǒng)。由于J2EE應(yīng)用程序的各組件分別運(yùn)行,并且常常是不同裝置,因此需要有一種查找和引用其它碼和資源的客戶及應(yīng)用程序服務(wù)器層碼的方式??蛻艉蛻?yīng)用程序碼例如可以使用Java命名和目錄接口(JNDI)16查找用戶定義的對(duì)象如企業(yè)bean和環(huán)境項(xiàng)目如Java數(shù)據(jù)庫(kù)連接器(JDBC)數(shù)據(jù)源對(duì)象位置,而環(huán)境項(xiàng)目又用來(lái)查找尾端層中的資源以及消息連接。在Web和企業(yè)bean組件上的部署時(shí)間,可以配置應(yīng)用程序行為如安全性和事務(wù)管理。該部署時(shí)間特征將應(yīng)用程序邏輯與可能隨組裝變化的配置設(shè)置相分離。J2EE安全性模型使開發(fā)商配置一個(gè)Web或者企業(yè)bean組件,以便系統(tǒng)資源只能由授權(quán)用戶訪問(wèn)。例如,Web組件可以被配置成提示輸入用戶姓名和口令。企業(yè)bean組件可以被配置成僅僅使特定組中的人可以調(diào)用某種方法。作為選擇,servlet組件可以被配置成具有某些可以訪問(wèn)每個(gè)人的方法,以及具有一些在一個(gè)組織中只有某些被特許的人才可訪問(wèn)的方法??梢詾樗蟹椒ǘ寄苡糜诿總€(gè)人或者所有方法僅能用于一些選擇的人的另一環(huán)境配置相同的servlet組件。某些應(yīng)用程序服務(wù)器,比如產(chǎn)自BEA系統(tǒng)公司(SanJose,california)的WebLogic服務(wù)器,使用了一個(gè)訪問(wèn)控制目錄(ACL)機(jī)構(gòu),該機(jī)構(gòu)考慮了運(yùn)行在服務(wù)器上的組件使用的細(xì)顆粒控制(fine-grainedcontrol)。通過(guò)使用ACL,開發(fā)商可以以Java方法等級(jí)定義哪個(gè)用戶或者哪些用戶組可以執(zhí)行什么或者不可以執(zhí)行什么。該ACL機(jī)構(gòu)覆蓋了除EJB外的運(yùn)行在應(yīng)用程序服務(wù)器上的任何事,該EJB具有EJB規(guī)范所定義的它們自己的訪問(wèn)控制機(jī)構(gòu)。安全區(qū)域允許管理器把來(lái)自現(xiàn)有的授權(quán)或確認(rèn)系統(tǒng)的信息輸入到ACL中。JavaServletservlet是一個(gè)擴(kuò)展Web服務(wù)器的功能的程序。servlet接收來(lái)自客戶的一個(gè)請(qǐng)求,動(dòng)態(tài)地生成答復(fù)(也許查詢數(shù)據(jù)庫(kù)以履行該請(qǐng)求),然后向客戶發(fā)送包含HTML或XML文件的答復(fù)。Servlet類似于CGI但通常更適合于寫,因?yàn)閟ervlet使用Java類別和流。它們運(yùn)行更快,因?yàn)镾ervlet被編譯成Java字節(jié)碼,并且servlet事件在運(yùn)行時(shí)間被保存在存儲(chǔ)器中,每個(gè)客戶請(qǐng)求運(yùn)行在單獨(dú)線程中。servelt使它容易地以動(dòng)態(tài)方式產(chǎn)生到達(dá)HTTP答復(fù)流的數(shù)據(jù)??蛻粽?qǐng)求在新連接結(jié)束后來(lái)執(zhí)行,所以流控制不會(huì)自然干預(yù)請(qǐng)求。為此,該對(duì)話管理保持請(qǐng)求之間的特定客戶的狀態(tài)。在某些應(yīng)用程序服務(wù)器中,諸多sevlet利用HTTP對(duì)話對(duì)象保存它們的方法請(qǐng)求之間的狀態(tài)。為了克服故障(failover)目的,可以在群集環(huán)境(clusteredenvironment)中復(fù)制該對(duì)象。Java服務(wù)器頁(yè)面JSP頁(yè)面是一個(gè)開發(fā)servlet的基于文本的表達(dá)中心途徑(way)。JSP頁(yè)面提供了servlet的所有利益,當(dāng)與JavaBeans類組合時(shí),它提供了一種容易的方式來(lái)保持內(nèi)容并顯示邏輯分離。JSP頁(yè)面和servlet比公共網(wǎng)關(guān)接口(CGI)更理想,因?yàn)樗鼈兪仟?dú)立平臺(tái),并且使用少量開銷。JSP頁(yè)面可以和JavaBeans一起用來(lái)定義Web模板,該模板建立具有相似外貌和感覺的由多個(gè)頁(yè)面構(gòu)成的Web站。JavaBeans類執(zhí)行數(shù)據(jù)再現(xiàn),所以模板沒(méi)有Java碼。這意味著它們可以由HTML編輯器來(lái)保持。使用JSP頁(yè)面的簡(jiǎn)單的基于Web的應(yīng)用程序可以用來(lái)把內(nèi)容捆綁到使用替代JavaBeans類的自定義標(biāo)記或scriptlet的應(yīng)用程序邏輯上。自定義標(biāo)記被裝入到標(biāo)記庫(kù)中,而該標(biāo)記庫(kù)被輸送到一個(gè)JSP頁(yè)面中。Scriptlet是直接裝入JSP頁(yè)面的小Java碼段。數(shù)據(jù)庫(kù)訪問(wèn)業(yè)務(wù)(JDBC)JDBC充當(dāng)一個(gè)抵達(dá)關(guān)系數(shù)據(jù)庫(kù)的橋,并且效法ODBC(開放式數(shù)據(jù)庫(kù)連接)規(guī)范。通過(guò)使用驅(qū)動(dòng)器斷開數(shù)據(jù)庫(kù)與程序碼的連接。JDBC的某些實(shí)施提供了對(duì)高級(jí)數(shù)據(jù)型的支持,并且還支持滾動(dòng)結(jié)果集和批更新的功能。Java消息傳遞業(yè)務(wù)(JMS)JMS是用來(lái)支持Java程序間消息交換的J2EE機(jī)制。Java就是這樣支持異步通信的,其中發(fā)送方和接收方不需要彼此知道,因而可以獨(dú)立操作。JMS支持以下兩種消息傳遞模型點(diǎn)對(duì)點(diǎn)-基于消息隊(duì)列。在該模型中,消息制作商把消息發(fā)送到隊(duì)列上。消息顧客可以把該消息附加到隊(duì)列上以便收聽消息。當(dāng)消息到達(dá)隊(duì)列時(shí),用戶可以將消息從隊(duì)列中取出,并對(duì)此答復(fù)。可以只向一個(gè)隊(duì)列發(fā)送消息,并且將只由一個(gè)顧客使用該消息。顧客可以任意過(guò)濾消息,以選出它們想要的正確消息類型。公布和預(yù)定-允許消息制作商發(fā)送消息到一個(gè)專題,該專題的所有注冊(cè)用戶檢索這些消息。在此情況下,許多顧客可收到相同的消息。Java接口定義語(yǔ)言(IDL)CORBA對(duì)象使用IDL指定一個(gè)契約,即它們?nèi)绾闻c其它對(duì)象進(jìn)行相互作用。有了JavaIDL,就可以在Java領(lǐng)域和CORBA領(lǐng)域之間定義契約。自SUN的JDK1.2開始,都包括一個(gè)ORB,它允許Java應(yīng)用程序經(jīng)由互聯(lián)網(wǎng)InterORB(IIOP)協(xié)議調(diào)用遠(yuǎn)程CORBA對(duì)象。企業(yè)JavaBran(EJB)EJB組件為封裝商務(wù)邏輯而設(shè)計(jì),所以開發(fā)商不必關(guān)心典型作業(yè)如數(shù)據(jù)訪問(wèn)、事務(wù)支持、安全、高速緩存和并行操作的代碼編程。在EJB規(guī)范中,這些作業(yè)是EJB容器的職責(zé)。企業(yè)bran由接口和類別組成??蛻艚?jīng)由企業(yè)bean的本地和遠(yuǎn)程接口訪問(wèn)企業(yè)bean方法。本地接口提供創(chuàng)建、消除和定位企業(yè)bean的方法,遠(yuǎn)程接口提供商務(wù)方法。在部署時(shí),容器創(chuàng)建源自這些接口的類別,然后利用該類別向客戶提供訪問(wèn),使客戶尋找創(chuàng)建、消除、定位和調(diào)用的企業(yè)bean的商務(wù)方法。企業(yè)bean類提供商務(wù)方法、創(chuàng)建方法以及探測(cè)器(finder)方法的實(shí)施;如果bean管理它自己的持續(xù)性,則提供其壽命周期方法的實(shí)施。有兩種類型的企業(yè)bean實(shí)體bean和會(huì)話bean。會(huì)話bean表達(dá)與客戶的瞬態(tài)對(duì)話,并且可以執(zhí)行數(shù)據(jù)庫(kù)讀和寫。會(huì)話bean可以調(diào)用JDBC調(diào)用本身,或者可以使用實(shí)體bean進(jìn)行調(diào)用,在此情況下,會(huì)話bean是實(shí)體bean的一個(gè)客戶。會(huì)話bean的字段包含對(duì)話狀態(tài)并且是瞬態(tài)的。如果服務(wù)器或者客戶崩潰,則會(huì)話bean完結(jié)。實(shí)體bean表達(dá)數(shù)據(jù)庫(kù)中的數(shù)據(jù)以及作用于該數(shù)據(jù)的方法。在用于一個(gè)雇員信息表的關(guān)系數(shù)據(jù)庫(kù)上下文中,可能存在用于該表每一行的一個(gè)bean。實(shí)體bean是事務(wù)性的和長(zhǎng)壽的。只要數(shù)據(jù)保持在數(shù)據(jù)庫(kù)中,實(shí)體bean就存在。該模型可以容易地用于關(guān)系數(shù)據(jù)庫(kù),并且不限于對(duì)象數(shù)據(jù)庫(kù)。會(huì)話bean可以是有狀態(tài)的或者無(wú)狀態(tài)的。有狀態(tài)會(huì)話bean包含代表客戶的對(duì)話狀態(tài)。對(duì)話狀態(tài)是會(huì)話bean瞬態(tài)字段值加之可以從會(huì)話bean字段得到的所有對(duì)象。有狀態(tài)bean不表達(dá)持久數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù),但是它們可以訪問(wèn)和更新代表客戶的數(shù)據(jù)。無(wú)狀態(tài)會(huì)話bean沒(méi)有任何用于特定客戶的狀態(tài)信息。它們通常提供不保持任何特定狀態(tài)的服務(wù)器側(cè)行為。無(wú)狀態(tài)會(huì)話bean需要少量的系統(tǒng)資源。提供屬類業(yè)務(wù)或者表達(dá)已存數(shù)據(jù)的共享意圖的商務(wù)對(duì)象是一個(gè)無(wú)狀態(tài)會(huì)話bean的良好候選者。使用容器管理持久性訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的企業(yè)bean不需要開發(fā)商使用任何用于數(shù)據(jù)庫(kù)訪問(wèn)的JDBC2.0API,因?yàn)檫@由容器處置。然而,如果bean管理持久性被用來(lái)訪問(wèn)一個(gè)不同于關(guān)系數(shù)據(jù)庫(kù)的企業(yè)信息系統(tǒng),或者如果存在訪問(wèn)一個(gè)不同于關(guān)系數(shù)據(jù)庫(kù)的企業(yè)信息系統(tǒng)之需要,則必須提供適當(dāng)?shù)拇a。在企業(yè)bean使用bean管理持久性訪問(wèn)數(shù)據(jù)庫(kù)的情況下,具有JDBC2.0API碼的bean的壽命周期方法必須被實(shí)施為處理數(shù)據(jù)裝載和存儲(chǔ)數(shù)據(jù),以及保持運(yùn)行時(shí)間與持久數(shù)據(jù)庫(kù)存儲(chǔ)之間的一致性。盡管Web層使用HTTP或者HTTPS在層之間傳遞數(shù)據(jù),但是EJB層使用了RMI-IIOP。RMI-IIOP是滿標(biāo)度分布式計(jì)算協(xié)議,該協(xié)議向任何客戶或Web層提供訪問(wèn)企業(yè)bean的程序,以直接訪問(wèn)EJB層中的業(yè)務(wù)。這些業(yè)務(wù)包括引用企業(yè)bean的JNDI、發(fā)送和接收異步消息的Java消息傳遞業(yè)務(wù)(JMS)和用于關(guān)系數(shù)據(jù)庫(kù)訪問(wèn)的JDBC。事務(wù)管理任何應(yīng)用程序服務(wù)器如WebLogic服務(wù)器系統(tǒng)的最基本特征之一是事務(wù)管理。事務(wù)是保證數(shù)據(jù)庫(kù)事務(wù)被精確完成并使其呈現(xiàn)高性能事務(wù)的所有“ACID”特性的手段,包括原子性-事務(wù)對(duì)數(shù)據(jù)庫(kù)作出的所有變化都是永久性的;否則,返回所有變化。一致性-一個(gè)成功的事務(wù)把數(shù)據(jù)庫(kù)從以前的活動(dòng)狀態(tài)轉(zhuǎn)換到新的活動(dòng)狀態(tài)。隔離-在事務(wù)完成其工作之前,對(duì)數(shù)據(jù)庫(kù)作出的變化是其它操作看不到的。持久性-事務(wù)對(duì)數(shù)據(jù)庫(kù)作出的變化在系統(tǒng)或媒介以后出現(xiàn)故障時(shí),仍然有效(保存)。J2EE事務(wù)模型使應(yīng)用程序開發(fā)商在部署時(shí)間,指定包括單一事務(wù)的多個(gè)方法間的關(guān)系,所以把一個(gè)事務(wù)中的所有方法視為一個(gè)單一單元。這是理想的,因?yàn)槭聞?wù)是必須全部完成的一系列步驟,或者,如果這些步驟沒(méi)有全部完成,則倒退這些步驟。例如,開發(fā)商可以有企業(yè)bean中的一系列方法,即通過(guò)將資金記入借方的第一帳戶,然后存入第二帳戶,把資金從一個(gè)銀行帳戶轉(zhuǎn)移到另一個(gè)帳戶。在該實(shí)例中,它們希望把實(shí)體轉(zhuǎn)移操作視為一個(gè)單位,所以,如果在記入借方之后和存入之前存在一個(gè)故障,則回退記入借方操作。在安裝期間,事務(wù)特性被指定到應(yīng)用程序組件上,允許開發(fā)商經(jīng)過(guò)應(yīng)用程序組件把諸多方法集合成事務(wù)。這樣,可以在J2EE應(yīng)用程序內(nèi)改變應(yīng)用程序組件,并且重新分配事務(wù)特性而不改變代碼。Java事務(wù)業(yè)務(wù)(JTS)和Java事務(wù)APJ(JTP)在J2EE中構(gòu)成事務(wù)支持的基礎(chǔ),特別是構(gòu)成對(duì)EJB和JDBC2.0的事務(wù)支持的基礎(chǔ)。JTS規(guī)范是用于事務(wù)管理的低級(jí)應(yīng)用程序接口(API),其中該事務(wù)管理把Java映射到對(duì)象管理組(PMG)對(duì)象事務(wù)業(yè)務(wù)。JTA規(guī)范由SunMicrosystems與事務(wù)處理和數(shù)據(jù)庫(kù)系統(tǒng)業(yè)界的主要工業(yè)伙伴共同開發(fā),該規(guī)范指定了事務(wù)管理器、資源管理器、應(yīng)用程序服務(wù)器與事務(wù)應(yīng)用程序之間的標(biāo)準(zhǔn)Java接口。具體而言,JTA是一個(gè)包括以下兩個(gè)部分的高級(jí)API事務(wù)接口-它能夠使分布式組件執(zhí)行的工作受全局事務(wù)制約,并且是標(biāo)記或者標(biāo)識(shí)構(gòu)成事務(wù)的操作組的一個(gè)通道。XA資源接口-一個(gè)基于X/Open接口或者XA接口的接口,該接口能夠啟動(dòng)分布式事務(wù)的處理。這些接口都包含對(duì)一個(gè)以上資源(如一個(gè)數(shù)據(jù)庫(kù)或者隊(duì)列之內(nèi)或者之間)上的事務(wù)的協(xié)調(diào)。開發(fā)商通常不需要關(guān)心用JTA編程顯性事務(wù),因?yàn)樵摴ぷ魇峭ㄟ^(guò)由容器處理的JDBC和EJBAPL執(zhí)行的,并且通過(guò)應(yīng)用程序部署說(shuō)明符來(lái)配置。開發(fā)商可以把精力集中到事務(wù)的設(shè)計(jì)上,而不是集中到事務(wù)的實(shí)現(xiàn)上。Weblogic服務(wù)器支持企業(yè)應(yīng)用程序的分布式事務(wù)以及兩階段提交協(xié)議。分布式事務(wù)是以協(xié)調(diào)方式更新多資源管理器(比如多個(gè)數(shù)據(jù)庫(kù))的事務(wù)。相反,一個(gè)本地事務(wù)更新單一資源管理器。兩階段提交協(xié)議是在兩個(gè)或多個(gè)資源管理器上協(xié)調(diào)單一事務(wù)的方法。它是這樣保證數(shù)據(jù)完整性的,通過(guò)確保事務(wù)更新被提交到所有參與的數(shù)據(jù)庫(kù)中,或者從所有數(shù)據(jù)庫(kù)完全回退事務(wù)更新,使其還原到事務(wù)開始之前的狀態(tài)。換言之,更新所有參與的數(shù)據(jù)庫(kù),或者不更新它們。分布式事務(wù)包括以下參與者事務(wù)始發(fā)器-啟動(dòng)事務(wù)。事務(wù)始發(fā)器可以是一個(gè)用戶應(yīng)用程序、一個(gè)企業(yè)JavaBean或者JMS客戶。事務(wù)管理器-管理代表應(yīng)用程序的事務(wù)。事務(wù)管理器通過(guò)與正在參與這些事務(wù)的資源管理器進(jìn)行通信,來(lái)協(xié)調(diào)來(lái)自應(yīng)用程序的開始和完成事務(wù)的命令。當(dāng)資源管理器在事務(wù)處理期間發(fā)生故障時(shí),事務(wù)管理器協(xié)助資源管理器決定提交還是回退待決事務(wù)??苫謴?fù)的資源-提供數(shù)據(jù)的持久性存儲(chǔ)。該資源通常是一個(gè)數(shù)據(jù)庫(kù)。資源管理器-提供對(duì)信息和處理的集合的訪問(wèn)。事務(wù)察覺JDBC驅(qū)動(dòng)器(transaction-awareJDBCdriver)是公共資源管理器。資源管理器提供事務(wù)能力和動(dòng)作的持久性它們是分布式事務(wù)內(nèi)訪問(wèn)和控制的實(shí)體。資源管理器與特定資源之間的通信被稱為一個(gè)事務(wù)分支(branch)。兩階段提交協(xié)議的第一階段被稱之為準(zhǔn)備階段。所需的更新必須被記錄到事務(wù)日志文件中,資源必須經(jīng)過(guò)一個(gè)資源管理器指示它準(zhǔn)備進(jìn)行改變。資源可以投票提交更新也可以返回到先前狀態(tài)。第二階段中出現(xiàn)的事情取決于資源如何投票。如果所有資源都投票提交,則更新參與事務(wù)的所有資源。如果一個(gè)或多個(gè)資源投票為返回,則將參與事務(wù)的所有資源返回到它們的先前狀態(tài)。商務(wù)事務(wù)的支持這些事務(wù)是以下說(shuō)明的實(shí)例情況中的適宜事務(wù)(雖然這些情況僅僅是例證而不是窮舉)。作為第一實(shí)例,客戶應(yīng)用程序需要調(diào)用幾個(gè)對(duì)象,這些對(duì)象可以包括對(duì)一個(gè)或多個(gè)數(shù)據(jù)庫(kù)的寫操作。如果任何一個(gè)調(diào)用不成功,則必須返回寫入(寫入存儲(chǔ)器,更典型的是寫入數(shù)據(jù)庫(kù))的任何狀態(tài)。例如,考慮一個(gè)旅游代理應(yīng)用程序。客戶程序需要安排到遠(yuǎn)地點(diǎn)的旅程;例如,從法國(guó)的斯特拉斯堡到澳大利亞的阿利斯斯普林斯。這樣一個(gè)旅程不可避免需要多個(gè)單個(gè)飛行預(yù)約。客戶應(yīng)用程序通過(guò)按順序預(yù)約旅程的每個(gè)單個(gè)段來(lái)工作;例如,斯特拉斯堡到巴黎,巴黎到紐約,紐約到洛杉磯。然而,如果任何一個(gè)單獨(dú)飛行預(yù)約不能做到,則客戶應(yīng)用程序需要一個(gè)通道取消接近那一點(diǎn)的所有飛行預(yù)約??蛻魬?yīng)用程序需要與服務(wù)器應(yīng)用程序管理的對(duì)象交談,并且需要對(duì)特定對(duì)象實(shí)例作出多個(gè)調(diào)用。交談也許具有以下的一個(gè)或多個(gè)特征在每個(gè)連續(xù)調(diào)用期間或者之后,將數(shù)據(jù)高速緩存到存儲(chǔ)器中或者寫入數(shù)據(jù)庫(kù)中;在調(diào)用結(jié)束時(shí),將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中;客戶應(yīng)用程序需要對(duì)象在一個(gè)存儲(chǔ)器內(nèi)保持每個(gè)調(diào)用之間的上下文;也就是,每個(gè)連續(xù)調(diào)用使用交談期間保持在存儲(chǔ)器中的數(shù)據(jù);在交談結(jié)束時(shí),客戶應(yīng)用程序需要有能力消除交談期間或者交談結(jié)束時(shí)可能出現(xiàn)的所有數(shù)據(jù)庫(kù)寫操作。作為一個(gè)替代實(shí)例,考慮一個(gè)基于互聯(lián)網(wǎng)的聯(lián)機(jī)購(gòu)物車應(yīng)用程序??蛻魬?yīng)用程序的用戶瀏覽聯(lián)機(jī)目錄并作出多個(gè)購(gòu)物選擇。當(dāng)用戶選擇它們想要購(gòu)買的物品時(shí),用戶進(jìn)行檢驗(yàn)并輸入其信用卡信息以進(jìn)行購(gòu)買。如果信用卡檢驗(yàn)失敗,購(gòu)物應(yīng)用程序需要一個(gè)機(jī)制來(lái)消除購(gòu)物車中的所有待購(gòu)買選擇,或者回退交談期間作出的任何購(gòu)買事務(wù)。在對(duì)對(duì)象的單個(gè)客戶調(diào)用的范圍內(nèi),對(duì)象對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)執(zhí)行多個(gè)編輯。如果這些編輯之一失敗,則對(duì)象需要一個(gè)機(jī)制回退所有編輯(在此情況下,各數(shù)據(jù)庫(kù)編輯不一定進(jìn)行EJB或RMI調(diào)用。一個(gè)客戶如一個(gè)小程序使用JNDI可以獲得對(duì)事務(wù)和事務(wù)管理器對(duì)象的引用,并開始一個(gè)事務(wù)。)作為另一個(gè)實(shí)例,考慮一個(gè)銀行業(yè)應(yīng)用程序??蛻粽{(diào)用對(duì)出納員對(duì)象的轉(zhuǎn)帳操作。轉(zhuǎn)帳操作需要出納員對(duì)象對(duì)銀行數(shù)據(jù)庫(kù)作出以下調(diào)用調(diào)用關(guān)于一個(gè)帳戶的借記方法;調(diào)用關(guān)于另一個(gè)帳戶的借記方法。如果銀行數(shù)據(jù)庫(kù)的借記調(diào)用失敗,則銀行業(yè)應(yīng)用程序需要一個(gè)機(jī)制來(lái)返回先前的借記調(diào)用。上述傳統(tǒng)的事務(wù)管理方法的問(wèn)題是,在處理事務(wù)返回的方式中效率低下。每個(gè)提交服務(wù)器必須直接接觸每個(gè)參與的服務(wù)器,然后再通知客戶。此外,傳統(tǒng)方法缺少靈活性,例如,在調(diào)用提交功能之后,沒(méi)有允許新服務(wù)器或資源參與事務(wù)的機(jī)制。這限制了傳統(tǒng)方法的可伸縮性和適用性,并阻礙了今日商務(wù)所需的日益增加的復(fù)雜應(yīng)用程序的開發(fā)。
發(fā)明內(nèi)容本發(fā)明提供了一種供應(yīng)用程序服務(wù)器或者事務(wù)處理系統(tǒng)使用的機(jī)制,允許在事務(wù)完成之前同步(或生效)回退處理。在事務(wù)的壽命周期,存在幾種狀態(tài)轉(zhuǎn)換,包括活動(dòng)、切換、預(yù)準(zhǔn)備、準(zhǔn)備、記錄與提交狀態(tài)之間的轉(zhuǎn)換。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在活動(dòng)階段期間可以在任何服務(wù)器上注冊(cè)同步對(duì)象。在提交()功能被調(diào)用之后,在準(zhǔn)備處理階段調(diào)用每個(gè)同步對(duì)象。一個(gè)同步對(duì)象可以注冊(cè)另一個(gè)對(duì)象,或者可允許一個(gè)同步對(duì)象調(diào)用一個(gè)以前未包含于事務(wù)中的服務(wù)器。同步對(duì)象還可以包含事務(wù)中的新XA資源。在本文中,術(shù)語(yǔ)同步和同步對(duì)象是指需要事務(wù)管理器在調(diào)用提交之后,調(diào)用一個(gè)完成前同步(Synchronization.beforeCompletion)方法的JTA規(guī)范所指定的編程接口。應(yīng)用程序碼在事務(wù)的活動(dòng)階段注冊(cè)這些回退。循環(huán)控制流在服務(wù)器的一個(gè)環(huán)中流動(dòng),并在完成所有同步回退時(shí)結(jié)束于提交服務(wù)器。如果以后添加新同步對(duì)象或者服務(wù)器,則可以把它們插入環(huán)中。所有同步回退在準(zhǔn)備任何資源之前完成,以處理同步回退需要訪問(wèn)資源的這些事件。與提交服務(wù)器應(yīng)當(dāng)直接接觸每個(gè)參與的服務(wù)器的傳統(tǒng)方法相比,該循環(huán)控制流處理減少了消息的數(shù)量。動(dòng)態(tài)增加服務(wù)器和資源、沿循環(huán)控制流傳送該服務(wù)器目錄的能力,極大地增加了事務(wù)處理系統(tǒng)、應(yīng)用程序服務(wù)器和建于該服務(wù)器頂部的應(yīng)用程序的靈活性。在實(shí)施例中,本發(fā)明包括一種將事務(wù)回退與一個(gè)事務(wù)完成相同步的事務(wù)處理系統(tǒng),該系統(tǒng)包括可關(guān)聯(lián)一個(gè)事務(wù)的多個(gè)同步對(duì)象和資源;一個(gè)事務(wù)協(xié)調(diào)器,為一個(gè)特定事務(wù)注冊(cè)至少一個(gè)或多個(gè)事務(wù)子協(xié)調(diào)器的組,和注冊(cè)參與特定事務(wù)的同步對(duì)象回退和資源的選擇;其中,該事務(wù)子協(xié)調(diào)器組可以在提交事務(wù)之前修改,以反映參與特定事務(wù)的同步對(duì)象回退和資源的選擇的變化。圖1顯示了J2EE體系結(jié)構(gòu)的圖示;圖2顯示了本發(fā)明實(shí)施例的同步回退特征的圖示;圖3顯示了供本發(fā)明使用的典型客戶服務(wù)器系統(tǒng)的圖示;圖4顯示了本發(fā)明實(shí)施例的各種事務(wù)狀態(tài)的圖示;圖5顯示了本發(fā)明實(shí)施例的事務(wù)同步回退系統(tǒng)的第一圖示;圖6顯示了本發(fā)明實(shí)施例的事務(wù)同步回退處理的流程圖;圖7顯示了供本發(fā)明實(shí)施例的一個(gè)開始事務(wù)壽命周期的圖示;圖8顯示了本發(fā)明實(shí)施例的事務(wù)傳播壽命周期的圖示;圖9顯示了本發(fā)明實(shí)施例的提交壽命周期的圖示;圖10顯示了本發(fā)明實(shí)施例的預(yù)準(zhǔn)備階段壽命周期的圖示;圖11顯示了本發(fā)明實(shí)施例的準(zhǔn)備階段壽命周期的圖示;圖12顯示了本發(fā)明實(shí)施例的提交階段壽命周期的圖示;圖13顯示了本發(fā)明實(shí)施例的返回壽命周期的圖示;圖14顯示了本發(fā)明實(shí)施例的恢復(fù)壽命周期的圖示;圖15圖示說(shuō)明了本發(fā)明實(shí)施例的事務(wù)如何在EJB應(yīng)用程序中工作;以及圖16圖示說(shuō)明了本發(fā)明實(shí)施例的事務(wù)如何在RMI應(yīng)用程序中工作。具體實(shí)施例方式一般來(lái)說(shuō),本發(fā)明提供了供事務(wù)或應(yīng)用程序服務(wù)器使用的一種機(jī)制,它允許在事務(wù)完成之前同步回退處理。在該時(shí)期,可以在事務(wù)活動(dòng)階段把同步對(duì)象注冊(cè)在任何一個(gè)服務(wù)器上。當(dāng)調(diào)用提交功能時(shí),又在準(zhǔn)備階段調(diào)用每個(gè)同步對(duì)象。這樣做的優(yōu)點(diǎn)是,可以在提交周期之前將同步對(duì)象添加到鏈上。一個(gè)同步對(duì)象可以注冊(cè)另一個(gè)對(duì)象或者可允許一個(gè)同步對(duì)象調(diào)用以前未包含在事務(wù)中的服務(wù)器。循環(huán)控制在服務(wù)器之間的一個(gè)環(huán)中流動(dòng),并在所有同步回退完成時(shí)結(jié)束于一個(gè)提交服務(wù)器上。如果以后增加新同步對(duì)象或者服務(wù)器,則將它們插入環(huán)中。在準(zhǔn)備任何一個(gè)資源之前完成所有同步回退,以處理同步回退需要訪問(wèn)資源的事件。與提交服務(wù)器應(yīng)當(dāng)直接接觸每個(gè)參與服務(wù)器的傳統(tǒng)方法相比,循環(huán)控制流減少了消息的數(shù)量。動(dòng)態(tài)增加服務(wù)器和資源、沿循環(huán)控制流傳送該服務(wù)器目錄的能力,極大地增加了事務(wù)處理系統(tǒng)、應(yīng)用程序服務(wù)器和建于該服務(wù)器頂部的應(yīng)用程序的靈活性。圖2圖示說(shuō)明了本發(fā)明的一個(gè)實(shí)施例,顯示了在提交和回退階段之前,附加服務(wù)器和同步對(duì)象如何被包含在同步回退環(huán)中。如圖2所示,包括客戶應(yīng)用程序104的客戶102啟動(dòng)或者開始包含一個(gè)服務(wù)器106或者這些服務(wù)器上的資源的事務(wù)。通常,客戶應(yīng)用程序104將指定一個(gè)特定事務(wù)上下文112,該上下文告知諸多服務(wù)器其中哪些服務(wù)器和哪些服務(wù)器資源對(duì)象或資源應(yīng)當(dāng)被包含在特定事務(wù)中。在這里,術(shù)語(yǔ)“同步對(duì)象”是指允許服務(wù)器參與事務(wù)的服務(wù)器對(duì)象。在包括基于Java系統(tǒng)的面向?qū)ο蟮南到y(tǒng)中有規(guī)則地使用同步對(duì)象,以保持瞬態(tài)狀態(tài)數(shù)據(jù)。在事務(wù)完成之間,同步對(duì)象將數(shù)據(jù)往返于向相同事務(wù)注冊(cè)的一個(gè)或多個(gè)資源對(duì)象。例如,如圖2所示,事務(wù)上下文112可以指定服務(wù)器1108和服務(wù)器A110將參與的事務(wù),該事務(wù)包含一個(gè)或多個(gè)位于服務(wù)器A上的對(duì)象或資源116。需要注意的是,在一個(gè)實(shí)施例中,服務(wù)器106的任何一個(gè)可以選作開始處理鏈的初始服務(wù)器1。當(dāng)預(yù)準(zhǔn)備階段期間,在提交時(shí)期之前將諸多服務(wù)器加入到環(huán)中。在提交事務(wù)之前的任何點(diǎn)上,客戶應(yīng)用程序可以改變事務(wù)上下文122,以增加另一個(gè)服務(wù)器B128,或許包括位于該服務(wù)器的任何一個(gè)同步對(duì)象和資源132。這樣,本發(fā)明就提供了一種將服務(wù)器B納入準(zhǔn)備環(huán)中的機(jī)制。在活動(dòng)和準(zhǔn)備階段期間還可以增加多個(gè)服務(wù)器。事務(wù)上下文通常不易被客戶應(yīng)用程序直接改變。而是,當(dāng)應(yīng)用程序調(diào)用其它J2EE組件時(shí),J2EE容器將向事務(wù)注冊(cè)附加同步對(duì)象或者征召附加XA資源對(duì)象;例如(1)當(dāng)應(yīng)用程序調(diào)用EJB時(shí),EJB容器將向代表EJB的事務(wù)管理器注冊(cè)同步對(duì)象,或者(2)當(dāng)應(yīng)用程序經(jīng)由JDBC訪問(wèn)數(shù)據(jù)庫(kù)時(shí),Weblogic連接池將向事務(wù)管理器征召與數(shù)據(jù)庫(kù)事件關(guān)聯(lián)的XA資源。本領(lǐng)域熟練技術(shù)人員將會(huì)明白,盡管第一服務(wù)器1108在圖2中被標(biāo)識(shí)為事務(wù)的協(xié)調(diào)器,但是任何一個(gè)服務(wù)器都可以承擔(dān)這一給定事務(wù)的任務(wù),并且可以使用各種不同方式選擇被選作事務(wù)協(xié)調(diào)器的服務(wù)器,所述各種不同方式包括只選擇客戶所接觸的第一服務(wù)器。事務(wù)協(xié)調(diào)器可以參與或者不參與提供供事務(wù)使用的實(shí)際資源。由此得到的本發(fā)明特征之一是可以修改客戶應(yīng)用程序以在任何時(shí)間點(diǎn)改變事務(wù)上下文,并立即實(shí)現(xiàn)同步對(duì)象或者資源的改變。例如,如果客戶應(yīng)用程序是EJB,則可以在準(zhǔn)備或提交階段期間修改事務(wù)上下文,將不同資源包含到不同服務(wù)器上,并且把這些資源動(dòng)態(tài)地輸入到處理鏈中。這允許在修改客戶應(yīng)用程序時(shí)有極大的靈活性。圖3顯示了供本發(fā)明使用的典型客戶服務(wù)器系統(tǒng)。共同稱之為客戶應(yīng)用程序的遠(yuǎn)程裝置或應(yīng)用程序202與應(yīng)用程序服務(wù)器204通信,特別是與擔(dān)任應(yīng)用程序服務(wù)器宿主的應(yīng)用程序通信。在客戶端,客戶應(yīng)用程序使用事務(wù)管理器206發(fā)送和接收到達(dá)服務(wù)器(或者到達(dá)許多服務(wù)器)的事務(wù)208。同樣,在服務(wù)器端,事務(wù)管理器210用客戶處理事務(wù)。在一個(gè)實(shí)施例中,服務(wù)器還可以包含一個(gè)事務(wù)協(xié)調(diào)器214,用于協(xié)調(diào)事務(wù)提交處理;子協(xié)調(diào)器216,用于參與事務(wù)以及執(zhí)行各個(gè)階段的提交處理,其中對(duì)于向本地事務(wù)管理器注冊(cè)的同步和XA資源對(duì)象進(jìn)行提交處理;和事務(wù)日志器218,用于記錄事務(wù)。當(dāng)創(chuàng)建事務(wù)和處理事務(wù)時(shí),將其記錄到事務(wù)日志220中,用于日后審計(jì)、引用或者回退目的。本發(fā)明提供了允許特性與每個(gè)事務(wù)關(guān)聯(lián)的事務(wù)管理器??蛻艋蛘叻?wù)器應(yīng)用程序可以在傳送事務(wù)222以及由此反應(yīng)時(shí)分析這些特性。圖4顯示了本發(fā)明實(shí)施例的各種事務(wù)的圖示。圖4顯示了事務(wù)壽命周期的各種狀態(tài)或者階段,包括活動(dòng)302、預(yù)準(zhǔn)備306、準(zhǔn)備308、記錄310和提交312狀態(tài)。在任何事務(wù)壽命周期期間,存在幾個(gè)狀態(tài)轉(zhuǎn)換,包括活動(dòng)、切換、預(yù)準(zhǔn)備、準(zhǔn)備、記錄和提交狀態(tài)之間的轉(zhuǎn)換。在活動(dòng)狀態(tài),運(yùn)行于客戶上的應(yīng)用程序或者應(yīng)用程序碼被設(shè)計(jì)成在事務(wù)的活動(dòng)執(zhí)行期間接觸幾個(gè)服務(wù)器??蛻糌?fù)責(zé)記憶哪些服務(wù)器被接觸以及對(duì)待事務(wù)的某些其它細(xì)節(jié)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,所接觸的第一服務(wù)器被設(shè)計(jì)為“提交服務(wù)器”或者事務(wù)協(xié)調(diào)器。當(dāng)客戶調(diào)用“提交”時(shí),將提交事務(wù)的實(shí)際職責(zé)授權(quán)和移交給提交服務(wù)器。提交服務(wù)器除了負(fù)責(zé)處理提交的實(shí)事外,它還是一個(gè)常規(guī)服務(wù)器,在許多事件中,任何一個(gè)服務(wù)器可以承擔(dān)提交服務(wù)器的任務(wù),哪個(gè)服務(wù)器實(shí)際結(jié)束其職責(zé)(由此成為提交服務(wù)器)取決于實(shí)際實(shí)施。應(yīng)用程序服務(wù)器通常支持各種應(yīng)用程序類型和事務(wù)類型。J2EE順從應(yīng)用程序服務(wù)器應(yīng)當(dāng)支持EJB和RMI應(yīng)用程序。根據(jù)應(yīng)用程序類型,可以使用各種事務(wù)處理方法。Weblogic服務(wù)器產(chǎn)品是一個(gè)這樣的應(yīng)用程序服務(wù)器產(chǎn)品,并且為了圖示說(shuō)明的目的,在本文中經(jīng)常描述其實(shí)施。本領(lǐng)域熟練技術(shù)人員將會(huì)明白,本發(fā)明提供的系統(tǒng)和方法同樣可以與其它事務(wù)處理系統(tǒng)一起使用,以及與其它類型的應(yīng)用服務(wù)器一起使用。圖5示出了使用同步回退處理事務(wù)的本發(fā)明實(shí)施例的事務(wù)系統(tǒng)。當(dāng)客戶602試圖通信或者處理事務(wù)時(shí),可以接觸多個(gè)服務(wù)器604、606、608,以確定哪一個(gè)服務(wù)器將實(shí)際處理事務(wù)。根據(jù)實(shí)施,選擇一個(gè)服務(wù)器充當(dāng)提交服務(wù)器/事務(wù)協(xié)調(diào)器,而其它服務(wù)器僅被視為參與服務(wù)器。為了說(shuō)明目的,圖5中只示出了單個(gè)提交服務(wù)器和兩個(gè)參與服務(wù)器,盡管人們將會(huì)明白在真實(shí)情況中可以使用許多服務(wù)器(并且非??赡苡脕?lái)提供可用性)。同樣,盡管顯示了一個(gè)指定的提交服務(wù)器和參與服務(wù)器,但是在另一個(gè)實(shí)施例中,多個(gè)服務(wù)器中的每個(gè)服務(wù)器可以充當(dāng)提交服務(wù)器,或者僅充當(dāng)參與服務(wù)器。本發(fā)明提供的系統(tǒng)對(duì)于所使用的服務(wù)器數(shù)量和類型是靈活的。一旦作出選擇,提交服務(wù)器就負(fù)責(zé)處置提交處理。事務(wù)處理僅僅通過(guò)客戶602與提交服務(wù)器604之間的通信來(lái)處置,而不需要客戶與參與服務(wù)器606之間的其它通信。提交服務(wù)器本身與參與服務(wù)器606(或服務(wù)器606、608)一起處置事務(wù)處置,并且經(jīng)由預(yù)準(zhǔn)備、準(zhǔn)備、記錄和提交步驟移動(dòng)事務(wù)。當(dāng)提交處理完成后,提交服務(wù)器將提交返回到客戶。在準(zhǔn)備階段期間的任何時(shí)候以及在回退之前,附加服務(wù)器或者參與者可以被插入到事務(wù)處理中。同步回退的典型實(shí)例通過(guò)考慮包括多個(gè)子協(xié)調(diào)器(服務(wù)器)及其同步對(duì)象的一個(gè)事務(wù)的典型實(shí)例,可以說(shuō)明上述處理。一個(gè)典型事務(wù)通過(guò)五個(gè)不同階段進(jìn)行1.活動(dòng)階段。2.調(diào)用事務(wù)提交。3.預(yù)準(zhǔn)備階段(該階段包括同步回退的調(diào)用,即僅僅是完成前的同步,但不調(diào)用任何資源)。4.準(zhǔn)備階段(該階段僅包括調(diào)用資源,但不同步回退)。5.提交階段(該階段也僅僅包含調(diào)用資源,但不同步回退)。在步驟3的預(yù)準(zhǔn)備階段期間,新同步對(duì)象可以向事務(wù)注冊(cè)。還可以在預(yù)準(zhǔn)備階段增加新資源,使其參與事務(wù)。在步驟4和步驟5期間調(diào)用這些資源。通常增加資源,但不從事務(wù)中刪除資源。新的子協(xié)調(diào)器(即服務(wù)器)可以在預(yù)準(zhǔn)備階段參與事務(wù)。例如,如果考慮存在一個(gè)客戶和三個(gè)服務(wù)器S1、S2、S3的情況,則存在三個(gè)同步對(duì)象,即服務(wù)器S1上的Sync1,服務(wù)器2上的Sync2,服務(wù)器3上的Sync3;以及三個(gè)資源對(duì)象,即S1上的r1,S2上的r2和S3上的r3。如果客戶啟動(dòng)或開始事務(wù)T1,并且事務(wù)T1傳播到服務(wù)器S1,那么根據(jù)本發(fā)明一個(gè)實(shí)施例,服務(wù)器S1將成為該事務(wù)的提交服務(wù)器/事務(wù)協(xié)調(diào)器。其它實(shí)施例和實(shí)施可以使用從多個(gè)可用服務(wù)器選擇事務(wù)協(xié)調(diào)器的替代機(jī)制。在事務(wù)T1的活動(dòng)階段,我們有以下狀態(tài)信息當(dāng)前參與事務(wù)T1的子協(xié)調(diào)器(服務(wù)器)S2向事務(wù)T1注冊(cè)的同步對(duì)象Sync1(來(lái)自服務(wù)器S1),Sync2(來(lái)自服務(wù)器S2)參與事務(wù)T1的資源r1(來(lái)自服務(wù)器S1),r2(來(lái)自服務(wù)器S2)。當(dāng)客戶以后調(diào)用一個(gè)T1.commit()或等同功能,以提交事務(wù)時(shí),以下事件序列發(fā)生1.提交移交給協(xié)調(diào)器,服務(wù)器S1。2.服務(wù)器S1執(zhí)行預(yù)準(zhǔn)備階段。服務(wù)器S1調(diào)用本地注冊(cè)的同步回退Sync1。服務(wù)器S1將開始準(zhǔn)備請(qǐng)求發(fā)送給鏈中的第一子協(xié)調(diào)器S2。3.服務(wù)器S2執(zhí)行預(yù)準(zhǔn)備階段。服務(wù)器S2調(diào)用本地注冊(cè)的同步回退的Synchronization.beforeCompletionSync2。Sync2.beforeCompletion功能調(diào)用新服務(wù)器S3上的EJB。EJB的商務(wù)方法調(diào)用新資源r3。同時(shí),服務(wù)器S3上的EJB容器還注冊(cè)新的統(tǒng)統(tǒng)對(duì)象Sync3(在服務(wù)器S3上)。作為結(jié)果,事務(wù)的狀態(tài)信息目前改變?nèi)缦庐?dāng)前正在參與事務(wù)T1的子協(xié)調(diào)器(服務(wù)器)S2,S3現(xiàn)在向T1注冊(cè)的同步對(duì)象Sync1(來(lái)自服務(wù)器S1),Sync2(來(lái)自S2),Sync3(來(lái)自服務(wù)器S3)現(xiàn)在參與事務(wù)T1的資源r1(來(lái)自服務(wù)器S1),r2(來(lái)自服務(wù)器S2),r3(來(lái)自服務(wù)器S3)。服務(wù)器S2現(xiàn)在已經(jīng)完成了它自己的同步回退。服務(wù)器S2沿著鏈把預(yù)準(zhǔn)備請(qǐng)求傳送到下一個(gè)子協(xié)調(diào)器,即服務(wù)器S3。需要注意的是,當(dāng)服務(wù)器S2首先進(jìn)入它的準(zhǔn)備階段時(shí),它是鏈中的最后的子協(xié)調(diào)器,但現(xiàn)在不是,服務(wù)器S3才是現(xiàn)在的鏈中的最后子協(xié)調(diào)器。4.服務(wù)器S3現(xiàn)在執(zhí)行預(yù)準(zhǔn)備階段。服務(wù)器S3調(diào)用本地注冊(cè)的同步回退Sync3。服務(wù)器S3確定它是鏈中真正的最后子協(xié)調(diào)器,由于目前存在鏈,因此把一個(gè)預(yù)準(zhǔn)備答復(fù)回送給事務(wù)協(xié)調(diào)器,即服務(wù)器S1。5.服務(wù)器(在該事件中還是事務(wù)協(xié)調(diào)器)S1得知預(yù)準(zhǔn)備階段被執(zhí)行。然后可以前進(jìn)到準(zhǔn)備以及隨后的提交階段。圖6圖示說(shuō)明了顯示本發(fā)明實(shí)施例的同步回退處理的步驟的流程圖。在步驟702,客戶或者客戶應(yīng)用程序準(zhǔn)備一個(gè)用于處理的事務(wù)。在活動(dòng)階段期間(步驟704),注冊(cè)將要參與事務(wù)處理的各種同步對(duì)象、資源或服務(wù)器(步驟706)。當(dāng)調(diào)用事務(wù)提交時(shí)(步驟707),又調(diào)用每個(gè)同步對(duì)象或資源(步驟708)。在任何時(shí)候,可以修改同步對(duì)象的目錄,把諸如參與服務(wù)器的資源添加到回退環(huán)中(步驟710)。當(dāng)當(dāng)前目錄中的所有同步對(duì)象已經(jīng)返回它們的回退時(shí)(步驟712),提交事務(wù)(步驟714)。在beforeCompletion期間對(duì)調(diào)用bean的bean的支持EJB和JTA規(guī)范都沒(méi)有澄清如何處理這樣一種情況即bean的beforeCompletion或ejbStore方法(準(zhǔn)備前調(diào)用)調(diào)用另一個(gè)其beforeCompletion和/或ejbStore方法已經(jīng)被調(diào)用的bean。本發(fā)明支持多個(gè)服務(wù)器上的這樣一種情況。圖7至圖14圖示說(shuō)明了根據(jù)可與Weblogic服務(wù)器一起使用的特定實(shí)施例,與同步回退處理的各個(gè)階段相關(guān)聯(lián)的壽命周期;本領(lǐng)域的熟練技術(shù)人員將會(huì)明白,在本發(fā)明精神和范圍之內(nèi),其它壽命周期和實(shí)施例也可以用來(lái)提供同步回退。圖7顯示了本發(fā)明實(shí)施例的開始事務(wù)壽命周期的圖示。如圖7所示,處理開始于在事務(wù)管理器804上接收的事務(wù)請(qǐng)求。事務(wù)管理器804調(diào)用協(xié)調(diào)器定位器805去選擇一個(gè)事務(wù)協(xié)調(diào)器806。事務(wù)協(xié)調(diào)器806接收一個(gè)事務(wù)標(biāo)識(shí)符,并將該標(biāo)識(shí)符與新事務(wù)830相關(guān)聯(lián)。該請(qǐng)求被分配給線程的一個(gè)池(pool),并由此返回到事務(wù)管理器804。后續(xù)請(qǐng)求被分配給與該池不同的線程。圖8顯示了本發(fā)明一個(gè)實(shí)施例的事務(wù)傳播壽命周期的圖示。如圖8所示,客戶應(yīng)用程序802對(duì)本地(客戶)Java虛擬機(jī)(RJVM)807進(jìn)行遠(yuǎn)程方法調(diào)度,用于對(duì)服務(wù)器通信??蛻羰聞?wù)管理器804攔截該請(qǐng)求并經(jīng)由服務(wù)器RJVM808將該請(qǐng)求傳送到服務(wù)器事務(wù)管理器810。服務(wù)器事務(wù)管理器810負(fù)責(zé)調(diào)用服務(wù)器應(yīng)用程序812上的方法。當(dāng)從服務(wù)器應(yīng)用程序812接收一個(gè)答復(fù)時(shí),服務(wù)器事務(wù)管理器810又負(fù)責(zé)經(jīng)由客戶和服務(wù)器RJVM把答復(fù)傳送到客戶事務(wù)管理器804??蛻羰聞?wù)管理器804將答復(fù)返回到客戶應(yīng)用程序802。圖9顯示了本發(fā)明實(shí)施例的提交壽命周期的圖示。如圖9所示,事務(wù)管理器804接收一個(gè)提交。該提交被傳送到事務(wù)協(xié)調(diào)器806進(jìn)行處理。當(dāng)該提交完成時(shí),將其返回到事務(wù)管理器804。圖10顯示了本發(fā)明實(shí)施例的預(yù)準(zhǔn)備階段壽命周期的圖示,顯示了同步對(duì)象是如何被添加到beforeCompletion環(huán)中。如圖10所示,事務(wù)協(xié)調(diào)器806采用對(duì)第一子協(xié)調(diào)器814的startPreoare調(diào)用啟動(dòng)預(yù)準(zhǔn)備處理。子協(xié)調(diào)器負(fù)責(zé)事務(wù)通過(guò)beforeCompletion階段。在beforeCompletion階段完成之前的任何時(shí)候,同步對(duì)象816可以被調(diào)加到環(huán)中。當(dāng)添加了所有同步對(duì)象時(shí),第二子協(xié)調(diào)器818同時(shí)對(duì)所有同步對(duì)象820起作用。然后把PrePreare確認(rèn)返回到事務(wù)協(xié)調(diào)器806。本領(lǐng)域熟練技術(shù)人員將會(huì)明白,在圖10所示的壽命周期中以及下文所述的其它壽命周期中,第一和第二子協(xié)調(diào)器可以是同一實(shí)體。同樣,第一和第二組同步對(duì)象可以是相同的,因?yàn)樗鼈円苍S是XA資源對(duì)象的第一和第二組。本領(lǐng)域熟練技術(shù)人員還將會(huì)明白,盡管在這里給出的實(shí)例中僅顯示了兩個(gè)子協(xié)調(diào)器或者兩組資源對(duì)象,但是本發(fā)明允許多個(gè)子協(xié)調(diào)器和多組同步對(duì)象和資源被同時(shí)包含在事務(wù)提交處理中。該方法主張的子協(xié)調(diào)器和同步對(duì)象使協(xié)調(diào)器通信交換的數(shù)量最小。圖11顯示了本發(fā)明實(shí)施例的使用XAR資源對(duì)象的準(zhǔn)備階段壽命周期的圖示。如圖11所示,事務(wù)協(xié)調(diào)器806采用對(duì)第一協(xié)調(diào)器814的startPrepare調(diào)用。子協(xié)調(diào)器(或多個(gè)子協(xié)調(diào)器)負(fù)責(zé)準(zhǔn)備應(yīng)付第一組XAR資源對(duì)象817的事務(wù)。與此同時(shí),事務(wù)協(xié)調(diào)器可以發(fā)送對(duì)第二子協(xié)調(diào)器818的startPrepare調(diào)用,以準(zhǔn)備應(yīng)付第二組XAR資源對(duì)象821的事務(wù)。當(dāng)準(zhǔn)備了每個(gè)XAR資源對(duì)象時(shí),將一個(gè)確認(rèn)返回到事務(wù)協(xié)調(diào)器896。圖12顯示了提交階段壽命周期的圖示。如圖12所示,事務(wù)協(xié)調(diào)器806首先刷新事務(wù)日志。把startCommit調(diào)用發(fā)送到第一子協(xié)調(diào)器814。第一子協(xié)調(diào)器發(fā)出一個(gè)對(duì)第一組XAR資源對(duì)象817的提交。與此同時(shí),該事務(wù)協(xié)調(diào)器可以把startCommit發(fā)送給子協(xié)調(diào)器818。第二子協(xié)調(diào)器發(fā)出一個(gè)對(duì)XAR資源對(duì)象821的提交。第二子協(xié)調(diào)器發(fā)出一個(gè)對(duì)第二組XAR資源對(duì)象821的提交。當(dāng)這兩個(gè)提交完成時(shí),向協(xié)調(diào)器806發(fā)送一個(gè)確認(rèn)。圖13顯示了本發(fā)明實(shí)施例的返回壽命周期的圖示。如圖13所示,當(dāng)系統(tǒng)希望執(zhí)行返回時(shí),事務(wù)協(xié)調(diào)器806把statrRollback發(fā)送到第一協(xié)調(diào)器814。協(xié)調(diào)器負(fù)責(zé)執(zhí)行離開第一組XAR資源對(duì)象817的返回。與此同時(shí),系統(tǒng)經(jīng)由第二子協(xié)調(diào)器向第二組XAR資源對(duì)象821發(fā)出一個(gè)startRollback命令,由此可以在第二組XAR資源對(duì)象821上執(zhí)行返回。當(dāng)兩個(gè)返回都完成時(shí),把一個(gè)確認(rèn)返回到事務(wù)協(xié)調(diào)器806。圖14顯示了本發(fā)明實(shí)施例的恢復(fù)壽命周期的圖示。如圖14所示,恢復(fù)處理通過(guò)來(lái)自事務(wù)協(xié)調(diào)器806的請(qǐng)求啟動(dòng),以訪問(wèn)事務(wù)恢復(fù)日志。當(dāng)事務(wù)協(xié)調(diào)器806向子協(xié)調(diào)器814發(fā)出一個(gè)startRecovery請(qǐng)求以執(zhí)行恢復(fù)時(shí),子協(xié)調(diào)器使用事務(wù)恢復(fù)日志中的信息執(zhí)行XAR資源對(duì)象組的恢復(fù)。子協(xié)調(diào)器814使用事務(wù)標(biāo)識(shí)符正確地標(biāo)識(shí)每個(gè)恢復(fù),并且把該事務(wù)標(biāo)識(shí)符返回到事務(wù)協(xié)調(diào)器806。事務(wù)協(xié)調(diào)器806然后向子協(xié)調(diào)器814發(fā)送一個(gè)返回請(qǐng)求。EJB應(yīng)用程序中的事務(wù)圖15顯示了如何處理EJB客戶應(yīng)用程序與服務(wù)器應(yīng)用程序之間的事務(wù)。如圖15所示,EJB客戶應(yīng)用程序402使用EJB容器406把事務(wù)404傳送到服務(wù)器應(yīng)用程序410。加入本發(fā)明的應(yīng)用程序服務(wù)器支持EJB應(yīng)用程序中的兩類事務(wù)容器管理的事務(wù)和bean管理的事務(wù)。在容器管理的事務(wù)中,服務(wù)器EJB容器負(fù)責(zé)管理事務(wù)定界。EJB部署描述符中的事務(wù)屬性被用來(lái)確定服務(wù)器EJB容器如何用每個(gè)方法調(diào)用來(lái)處理事務(wù)。在bean管理的事務(wù)中,EJB本身管理事務(wù)界定。EJB對(duì)UserTransaction對(duì)象進(jìn)行顯性方法調(diào)度以開始提交,如果需要,還返回事務(wù)。事務(wù)事件的序列在容器管理與bean管理的事務(wù)之間是不同的。對(duì)于帶有容器管理事務(wù)的EJB應(yīng)用程序,一個(gè)基本事務(wù)按以下方式工作·在EJB部署描述符中,bean供應(yīng)者或者應(yīng)用程序裝配器指定容器管理定界的事務(wù)類型。·在EJB部署描述符中,bean供應(yīng)者或者應(yīng)用程序裝配器為EJB指定默認(rèn)事務(wù)屬性,它通常是以下設(shè)置之一“NotSupported”,“Required”?!癝upports”,“RequiresNew”,“Mandatory”或者“Never”。在EJB部署描述符中,bean供應(yīng)者或者應(yīng)用程序裝配器為一個(gè)或多個(gè)方法隨意地指定事務(wù)屬性?!ぎ?dāng)客戶應(yīng)用程序402在EJB中調(diào)用方法時(shí),EJB容器為該方法檢驗(yàn)部署描述符中的事務(wù)屬性設(shè)置。如果沒(méi)有為該方法指定設(shè)置,則EJB使用該EJB的默認(rèn)事務(wù)屬性設(shè)置。·EJB容器406根據(jù)可應(yīng)用的事務(wù)屬性設(shè)置采取適當(dāng)行動(dòng)。例如,如果事物屬性設(shè)置是“Required”,則EJB容器調(diào)用現(xiàn)存事務(wù)上下文內(nèi)的方法,或者,如果客戶未用事務(wù)上下文調(diào)用,則EJB容器在執(zhí)行該方法之前開始一個(gè)新事務(wù)?!ぴ诹硪粋€(gè)實(shí)例中,如果事務(wù)屬性設(shè)置是“Mandatory”,則EJB容器調(diào)用現(xiàn)存事務(wù)上下文中的方法。如果客戶未用事務(wù)上下文調(diào)用,則EJB容器丟棄異常錯(cuò)誤。·在商務(wù)方法408的調(diào)用期間,如果確定需要返回,則商務(wù)方法調(diào)用EJB返回方法,通知EJB容器該事務(wù)在方法將在調(diào)用結(jié)束時(shí)返回。·在方法執(zhí)行結(jié)束和巴結(jié)果發(fā)送給客戶之前,EJB容器完成事務(wù),這是通過(guò)在服務(wù)器應(yīng)用程序410上提交事務(wù)(在此情況下,可以把事務(wù)寫入事務(wù)日志412)或者返回事務(wù)實(shí)現(xiàn)的。對(duì)于具有bean管理事務(wù)定界的EJB應(yīng)用程序,基本事務(wù)以下述方式工作·在EJB部署描述符中,bean供應(yīng)者或者應(yīng)用程序裝配器指定bean管理定界的事務(wù)類型?!た蛻魬?yīng)用程序402使用JNDI獲取對(duì)服務(wù)器域的UserTransaction對(duì)象的引用?!た蛻魬?yīng)用程序402開始一個(gè)使用UserTransaction.begin方法的事務(wù),并且經(jīng)過(guò)EJB容器發(fā)送一個(gè)請(qǐng)求給EJB。EJB上的所有操作在事務(wù)范圍內(nèi)運(yùn)行?!と绻麑?duì)這些操作任何一個(gè)的調(diào)用出現(xiàn)異常(明示或者作為通信失敗的結(jié)果),則可以捕獲該異常并且可以返回該事務(wù)(UserTransaction.rollback)?!と绻麩o(wú)異常出現(xiàn),則客戶向使用UserTransaction.commit方法的服務(wù)器應(yīng)用程序410提交當(dāng)前事務(wù)。該方法結(jié)束事務(wù)并開始操作的處理。只有當(dāng)事務(wù)中的所有參與者都同意提交時(shí)才提交該事務(wù)。·UserTranaction.commit方法使EJB容器調(diào)用事務(wù)管理器完成該事務(wù)?!な聞?wù)管理器負(fù)責(zé)與資源管理器協(xié)調(diào),以更新任何一個(gè)數(shù)據(jù)庫(kù)。事務(wù)樣本EJB碼以下部分提供了依據(jù)EJB應(yīng)用程序的類別的樣品碼片段的走查。碼片段展示了為bean管理事務(wù)定界利用UserTransaction對(duì)象的情況。該bean的部署描述符指定了事務(wù)定界的事務(wù)類型。事務(wù)軟件包首先必須被輸入和/或更新。列表1顯示了輸入事務(wù)必須的軟件包的樣本碼。列表1importjavax.naming.*;importjavax.transaction.UserTransaction;importjavax.transaction.SystemExceptionimportjavax.transaction.HeuristicMixedExceptionimportjavax.transaction.HeuristicRollbackExceptionimportjavax.transaction.NotSupportedExceptionimportjavax.transaction.RollbackExceptionimportjavax.transaction.IllegalStateExceptionimportjavax.transaction.SecurityExceptionimportjava.sql.*;importjava.util.*;importweblogic.jndi.*;在輸入這些類之后,將UserTransaction對(duì)象的事件初始化到零。下一步驟包括使用JNDI返回對(duì)象參考。列表2顯示了使用JNDI查找對(duì)象參考的一個(gè)實(shí)例。列表2contextctx=nullHashtableenv=newHashtable()env.put(context.INITIAL_CONTEXT_FACTORY,“weblogic.jndi.WLInitialContextFactory”);env.put(Context.PROVIDER_URL,“t3//localhost7001”);env.put(Context.SECURITY_PRINCIPAL,“Fred”);env.put(Context.SECURITY_CREDENTIALS,“secret”);ctx=nexInitialContext(env);UserTransactiontx=(UserTransaction)ctx.lookup(“javax.transaction.UserTransaction”);隨后必須生成或者開始事務(wù)。列表3顯示了通過(guò)得到UserTransaction對(duì)象并調(diào)用事務(wù)開始方法來(lái)開始一個(gè)事務(wù)。該方法調(diào)用后以及完成事務(wù)之前出現(xiàn)的數(shù)據(jù)庫(kù)操作存在于這些事務(wù)的范圍之內(nèi)。列表3UserTransactiontx=(UserTransaction)ctx.lookup(“javax.transaction.UserTransaction”);tx.begin();EJB實(shí)施中的最后步驟是完成事務(wù)。列表4顯示了根據(jù)在任何一個(gè)數(shù)據(jù)庫(kù)操作期間是否丟棄一個(gè)異常來(lái)完成事務(wù)的代碼,該數(shù)據(jù)庫(kù)操作是試圖在事務(wù)范圍之內(nèi)進(jìn)行的列表4tx.commit()//ortx.rollback();如果在任何數(shù)據(jù)庫(kù)操作期間拋出異常,則應(yīng)用程序調(diào)用java.transaction.UserTransaction.rollback()方法來(lái)回退事務(wù)。如果沒(méi)有拋出異常,則應(yīng)用程序調(diào)用javax.Transaction.UserTransaction.commit()方法,以試圖在所有數(shù)據(jù)庫(kù)操作成功完成之后提交事務(wù)。調(diào)用該方法結(jié)束事務(wù)并開始操作的處理,使Weblogic服務(wù)器EJB容器調(diào)用事務(wù)管理器王城事務(wù)。只有當(dāng)事務(wù)的參與者都同意提交時(shí)才提交事務(wù)。Weblogic服務(wù)器RMI應(yīng)用程序中的事務(wù)圖16說(shuō)明了事務(wù)如何在RMI應(yīng)用程序中工作。對(duì)于RMI客戶和服務(wù)器應(yīng)用程序,基本事務(wù)按以下方式工作·應(yīng)用程序502使用JNDI將對(duì)象參考返回到服務(wù)器域的UserTransaction對(duì)象506?!か@得對(duì)象參考導(dǎo)致產(chǎn)生應(yīng)用程序與該對(duì)象之間的一個(gè)對(duì)話狀態(tài)。在完成(即提交或者返回)事務(wù)504之前,該對(duì)話狀態(tài)一直持續(xù)。RMI對(duì)象一旦被例示,就存儲(chǔ)器中保持活動(dòng)狀態(tài),直至它們被釋放,通常是在服務(wù)器停機(jī)期間進(jìn)行釋放?!た蛻魬?yīng)用程序開始一個(gè)使用UserTransactin.begin方法的事務(wù),并把請(qǐng)求發(fā)送給服務(wù)器應(yīng)用程序?!し?wù)器應(yīng)用程序上的所有操作在事務(wù)范圍之內(nèi)執(zhí)行?!と绻麑?duì)這些操作的任何一個(gè)的調(diào)用出現(xiàn)異常(明示或者作為通信失敗的結(jié)果),則可以捕獲該異常并可以返回該事務(wù)(UserTransaction.rollback)?!と绻麤](méi)有異常出現(xiàn),則客戶應(yīng)用程序提交使用UserTransaction.commit方法的當(dāng)前事務(wù)。該方法結(jié)束事務(wù)并開始操作的處理。只有當(dāng)事務(wù)的所有參與者都同意提交時(shí),才提交事務(wù)?!serTransaction.commit方法使服務(wù)器調(diào)用事務(wù)管理器完成該事務(wù)?!な聞?wù)管理器負(fù)責(zé)與資源管理器協(xié)調(diào)更新任何數(shù)據(jù)庫(kù)512。事務(wù)樣本RMI碼該部分提供了來(lái)自RMI應(yīng)用程序中的類的樣本碼片段的走查。碼片段演示了使用RMI事務(wù)的UserTransaction對(duì)象的情況。此外,作為初始步驟,需要時(shí)必須輸入和/或更新程序包。列表5顯示了輸入必要的程序包。列表5importjavax.naming.*;importjavax.rmi.*;importjavax.transaction.UserTransaction;importjavax.transaction.SystemException;importjavax.transaction.HeuristicMixedException;importjavax.transaction.HeuristicRollbackException;importjavax.transaction.NotSupportedException;importjavax.transaction.RollbackException;importjavax.transaction.IllegalStateException;importjavax.transaction.SecurityException;importjava.sql.*;importjava.util.*;importweblogic.jndi.*;輸入這些類后,把UserTransaction對(duì)象的事件初始化為零。JNDI用來(lái)吧對(duì)象參考返回到UserTransaction對(duì)象。列表6顯示了搜索JNDI樹,把對(duì)象參考返回到用于適當(dāng)WeblogicServer域的UserTransaction對(duì)象的情況。獲得對(duì)象參考導(dǎo)致產(chǎn)生應(yīng)用程序與該對(duì)象之間的對(duì)話狀態(tài)。在完成事務(wù)(提交或返回)之前,該對(duì)話狀態(tài)一直持續(xù)。一旦RMI對(duì)象被例示,就在存儲(chǔ)器中保持其活動(dòng)狀態(tài),直至它們被釋放。列表6contextctx=null;Hashtableenv=newHashtable();env.put(context.INITIAL_CONTEXT_FACTORY,“weblogic.jndi.WLInitialContFactory”);//parametersfortheWebLogicServer.//Substitutethecorrecthostname,portnumber//username,andpasswordforyourenviromentenv.put(context.PROVIDER_URL,“t3//localhost7001”);env.put(Context.SECURITY_PRINCIPAL,“Fred”);env.put(context.SECURITY_CREDENTIALS,“secret”);ctx=newInitialContext(env);UserTransactiontx=(UserTransaction)ctx.lookup(“javax.transaction.UserTranaction.”);然后生成或開始事務(wù)。列表7顯示通過(guò)調(diào)用javax.transaction.UsetTransaction.beging()方法開始事務(wù)。該方法調(diào)用后以及完成事務(wù)前發(fā)生的數(shù)據(jù)庫(kù)操作存在于該事務(wù)范圍之內(nèi)。列表7UserTransactiontx=(UserTransaction)ctx.lookup(“javax.transaction.UserTransaction”);tx.begin();completingaTransaction如同EJB實(shí)施一樣,事務(wù)處理中的最后步驟是完成事務(wù)。列表8顯示了根據(jù)是否丟棄異常完成事務(wù),其中在該事務(wù)范圍之內(nèi)試圖進(jìn)行任何一個(gè)數(shù)據(jù)庫(kù)操作期間進(jìn)行所述丟棄列表8tx.commit()//ortx.rollback();如果在任何一個(gè)數(shù)據(jù)庫(kù)操作期間拋出異常,則應(yīng)用程序調(diào)用javax.transaction.UserTransaction.rollback()方法。若未拋出異常,則應(yīng)用程序調(diào)用javax.transaction.UserTransaction.commit()方法,以試圖在成功完成所有數(shù)據(jù)庫(kù)操作之后提交事務(wù)。調(diào)用該方法導(dǎo)致結(jié)束事務(wù)并開始操作的處理,使WebLogic服務(wù)器調(diào)用事務(wù)管理器完成事務(wù)。只有當(dāng)事務(wù)的所有參與者都同意提交時(shí),才提交事務(wù)。本發(fā)明的以上說(shuō)明用于圖示說(shuō)明的目的,而不是打算用來(lái)窮舉或者把本發(fā)明限制到公開的精確形式。顯然,本領(lǐng)域熟練技術(shù)人員將會(huì)明白許多修改和變化。選擇和描述諸多實(shí)施例是為了最好地解釋本發(fā)明原理和實(shí)際應(yīng)用,從而使本發(fā)明的熟練技術(shù)人員理解適合于特定預(yù)期應(yīng)用的不同實(shí)施例以及具有各種修改的本發(fā)明。本發(fā)明的范圍由以下權(quán)利要求和其等同物定義。權(quán)利要求1.一種將事務(wù)回退與事務(wù)完成同步的事務(wù)處理系統(tǒng),包括多個(gè)可關(guān)聯(lián)于一個(gè)事務(wù)的同步對(duì)象和資源;一個(gè)事務(wù)協(xié)調(diào)器,為一個(gè)特定事務(wù)注冊(cè)至少一個(gè)或多個(gè)事務(wù)子協(xié)調(diào)器的組,以及同步對(duì)象回退和資源的選擇,以參與該特定事務(wù);其中,在提交事務(wù)之前可以修改該事務(wù)子協(xié)調(diào)器組,以反映參與特定事務(wù)的同步對(duì)象回退和資源的選擇的變化。2.根據(jù)權(quán)利要求1所述的系統(tǒng),還包括多個(gè)用于提供同步對(duì)象和資源的服務(wù)器,其中所述多個(gè)服務(wù)器之一被選作事務(wù)協(xié)調(diào)器。3.根據(jù)權(quán)利要求2所述的系統(tǒng),其中第一服務(wù)器上的事務(wù)協(xié)調(diào)器采用對(duì)第二服務(wù)器上的事務(wù)子協(xié)調(diào)器的一個(gè)開始預(yù)準(zhǔn)備調(diào)用來(lái)啟動(dòng)事務(wù)預(yù)準(zhǔn)備處理,其中事務(wù)子協(xié)調(diào)器負(fù)責(zé)處理整個(gè)事務(wù)預(yù)準(zhǔn)備階段的事務(wù)。4.根據(jù)權(quán)利要求3所述的系統(tǒng),其中在事務(wù)預(yù)準(zhǔn)備階段完成之前的任何時(shí)候,注冊(cè)第二服務(wù)器上的附加資源與參與特定事務(wù)的同步對(duì)象回退和資源的選擇,然后把一個(gè)預(yù)準(zhǔn)備確認(rèn)返回到事務(wù)協(xié)調(diào)器。5.一種將事務(wù)回退與事務(wù)完成同步的事務(wù)處理方法,包括以下步驟提供可關(guān)聯(lián)于一個(gè)事務(wù)的多個(gè)同步對(duì)象和資源;在事務(wù)協(xié)調(diào)器上,為一個(gè)特定事務(wù)注冊(cè)至少一個(gè)或多個(gè)事務(wù)子協(xié)調(diào)器的組,以及同步對(duì)象回退和資源的選擇,以參與該特定事務(wù);其中,在提交事務(wù)之前可以修改該事務(wù)子協(xié)調(diào)器組,以反映參與特定事務(wù)的同步對(duì)象回退和資源的選擇的變化。6.根據(jù)權(quán)利要求5所述的方法,還包括步驟選擇多個(gè)服務(wù)器之一作為事務(wù)協(xié)調(diào)器。7.根據(jù)權(quán)利要求6所述的方法,其中所述的注冊(cè)步驟包括以下步驟用對(duì)第二服務(wù)器上的事務(wù)子協(xié)調(diào)器的開始預(yù)準(zhǔn)備調(diào)用,啟動(dòng)事務(wù)協(xié)調(diào)器上的事務(wù)預(yù)準(zhǔn)備處理;在事務(wù)子協(xié)調(diào)器上處理整個(gè)事務(wù)預(yù)準(zhǔn)備階段的事務(wù)。8.根據(jù)權(quán)利要求7所述的方法,其中所述的注冊(cè)步驟包括在事務(wù)預(yù)準(zhǔn)備階段完成之前的任何時(shí)候,注冊(cè)第二服務(wù)器上的附加資源與同步對(duì)象回退和資源的選擇,以參與該特定事務(wù);和把預(yù)準(zhǔn)備確認(rèn)返回到事務(wù)協(xié)調(diào)器。9.一種將回退與事務(wù)完成相同步的事務(wù)處理系統(tǒng),包括運(yùn)行時(shí)允許系統(tǒng)執(zhí)行以下步驟的指令提供多個(gè)服務(wù)事務(wù)的同步對(duì)象;經(jīng)由一個(gè)或多個(gè)事務(wù)子協(xié)調(diào)器將來(lái)自事務(wù)協(xié)調(diào)器的事務(wù)請(qǐng)求傳送到所述多個(gè)同步對(duì)象,包括將事務(wù)請(qǐng)求傳送給第一子協(xié)調(diào)器上的第一組所述多個(gè)同步對(duì)象,將事務(wù)請(qǐng)求傳送給第二子協(xié)調(diào)器上的第二組所述多個(gè)同步對(duì)象;以及在提交事務(wù)之前,把來(lái)自第二組同步對(duì)象的回退與來(lái)自第一組同步對(duì)象的回退相同步。10.根據(jù)權(quán)利要求9所述的系統(tǒng),還包括提供同步對(duì)象和資源的多個(gè)服務(wù)器,其中所述多個(gè)服務(wù)器之一被選作事務(wù)協(xié)調(diào)器。11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中第一服務(wù)器上的事務(wù)協(xié)調(diào)器借助對(duì)第二服務(wù)器上的第一事務(wù)子協(xié)調(diào)器的開始預(yù)準(zhǔn)備調(diào)用來(lái)啟動(dòng)事務(wù)預(yù)準(zhǔn)備處理,其中第一事務(wù)子協(xié)調(diào)器負(fù)責(zé)處理包括第三服務(wù)器的第二事務(wù)子協(xié)調(diào)器的整個(gè)事務(wù)預(yù)準(zhǔn)備階段的事務(wù)。12.根據(jù)權(quán)利要求11所述的系統(tǒng),其中,在事務(wù)預(yù)準(zhǔn)備階段之前的任何時(shí)間,注冊(cè)第二或第三服務(wù)器上的附加資源與同步對(duì)象回退和資源的選擇,以參與該特定事務(wù),然后把預(yù)準(zhǔn)備確認(rèn)返回到事務(wù)子協(xié)調(diào)器。13.一種將回退與事務(wù)完成相同步的事務(wù)處理方法,包括以下步驟提供多個(gè)服務(wù)事務(wù)的同步對(duì)象;經(jīng)由一個(gè)或多個(gè)事務(wù)子協(xié)調(diào)器將來(lái)自事務(wù)協(xié)調(diào)器的事務(wù)請(qǐng)求傳送到所述多個(gè)同步對(duì)象,包括將事務(wù)請(qǐng)求傳送給第一子協(xié)調(diào)器上的第一組所述多個(gè)同步對(duì)象,將事務(wù)請(qǐng)求傳送給第二子協(xié)調(diào)器上的第二組所述多個(gè)同步對(duì)象;以及在提交事務(wù)之前,把來(lái)自第二組同步對(duì)象的回退與來(lái)自第一組同步對(duì)象的回退相同步。14.根據(jù)權(quán)利要求13所述的方法,還包括步驟把所述多個(gè)服務(wù)器之一選作事務(wù)協(xié)調(diào)器。15.根據(jù)權(quán)利要求14所述的方法,其中所述注冊(cè)步驟包括以下步驟借助對(duì)第二服務(wù)器上的第一事務(wù)子協(xié)調(diào)器的開始預(yù)準(zhǔn)備調(diào)用來(lái)啟動(dòng)事務(wù)協(xié)調(diào)器上的事務(wù)預(yù)準(zhǔn)備處理;以及在第一事務(wù)子協(xié)調(diào)器上,處理包括第三服務(wù)器的第二事務(wù)子協(xié)調(diào)器的整個(gè)事務(wù)預(yù)準(zhǔn)備階段的事務(wù)。16.根據(jù)權(quán)利要求15所述的方法,其中,所述同步步驟包括以下步驟在事務(wù)預(yù)準(zhǔn)備階段之前的任何時(shí)間,注冊(cè)第二或第三服務(wù)器上的附加資源與同步對(duì)象回退和資源的選擇,以參與該特定事務(wù);把預(yù)準(zhǔn)備確認(rèn)返回到事務(wù)子協(xié)調(diào)器。17.一種將回退與事務(wù)完成相同步的事務(wù)處理方法,包括以下步驟準(zhǔn)備用于處理的事務(wù);注冊(cè)參與事務(wù)處理的同步對(duì)象和資源的初始組;調(diào)用一個(gè)事務(wù)提交;預(yù)準(zhǔn)備所述事務(wù),包括以下步驟檢查參與所述事務(wù)的附加同步對(duì)象或者資源,把所述附加同步對(duì)象或者所述附加資源的至少之一添加到所述已注冊(cè)同步對(duì)象和資源組上,以及調(diào)用對(duì)所述已注冊(cè)同步對(duì)象和資源組中的同步對(duì)象的同步對(duì)象回退;準(zhǔn)備所述已注冊(cè)同步對(duì)象和資源組中的資源;和提交已經(jīng)返回的已注冊(cè)同步對(duì)象和資源組中的資源。18.一種將回退與事務(wù)完成相同步的事務(wù)處理方法,包括以下步驟準(zhǔn)備用于處理的事務(wù);注冊(cè)參與事務(wù)處理的同步對(duì)象和資源的初始組;調(diào)用一個(gè)事務(wù)提交;預(yù)準(zhǔn)備所述事務(wù),包括以下步驟把附加同步對(duì)象或者所述資源的至少一個(gè)添加到所述的已注冊(cè)同步對(duì)象和/或資源組上,和調(diào)用對(duì)所述已注冊(cè)同步對(duì)象和資源組中的同步對(duì)象的同步對(duì)象回退;準(zhǔn)備所述已注冊(cè)同步對(duì)象和資源組中的資源;和提交已經(jīng)返回的已注冊(cè)同步對(duì)象和資源組中的資源。19.一種將回退與事務(wù)完成相同步的事務(wù)處理方法,包括以下步驟提供多個(gè)服務(wù)事務(wù)的同步對(duì)象和資源;經(jīng)由一個(gè)或多個(gè)事務(wù)子協(xié)調(diào)器將來(lái)自事務(wù)協(xié)調(diào)器的事務(wù)請(qǐng)求傳送到所述多個(gè)同步對(duì)象和所述資源,包括將事務(wù)請(qǐng)求傳送給第一子協(xié)調(diào)器上的第一組所述多個(gè)同步對(duì)象和資源,將事務(wù)請(qǐng)求傳送給第二子協(xié)調(diào)器上的第二組所述多個(gè)同步對(duì)象和資源;和在提交事務(wù)之前,把來(lái)自第二組同步對(duì)象的回退與來(lái)自第一組同步對(duì)象的回退相同步。全文摘要本發(fā)明提供一種在事務(wù)或者消息完成之前允許事務(wù)回退處理被同步或者實(shí)行的機(jī)制。在事務(wù)活動(dòng)階段期間,可以在任何一個(gè)服務(wù)器上注冊(cè)參與事務(wù)的附加同步對(duì)象(704)。調(diào)用提交(commit)功能之后,在事務(wù)預(yù)準(zhǔn)備階段處理期間調(diào)用每個(gè)同步對(duì)象。一個(gè)同步對(duì)象可以注冊(cè)另一個(gè)同步對(duì)象,調(diào)用未預(yù)先包含在事務(wù)中的一個(gè)服務(wù)器(706),或者把一個(gè)新XA資源并入事務(wù)中。本發(fā)明的效果是提供一種請(qǐng)求傳送的循環(huán)方案,以允許在提交之前把附加資源加入到環(huán)中(710)。文檔編號(hào)G06F12/00GK1554056SQ02817719公開日2004年12月8日申請(qǐng)日期2002年7月16日優(yōu)先權(quán)日2001年7月17日發(fā)明者愛德華·P·費(fèi)爾特,普里西拉·馮,亞歷山大·J·索莫吉,斯里拉姆·斯里尼范桑,大J索莫吉,姆斯里尼范桑,拉馮,愛德華P費(fèi)爾特申請(qǐng)人:Bea系統(tǒng)公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1