專利名稱::網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及的是一種網(wǎng)絡(luò)
技術(shù)領(lǐng)域:
的方法,具體是一種網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法。
背景技術(shù):
:由于網(wǎng)絡(luò)延遲和商業(yè)過(guò)程的交互,即使在沒(méi)有并發(fā)事務(wù)的情況下,商業(yè)事務(wù)一般也會(huì)持續(xù)比較長(zhǎng)的時(shí)間,因而也被稱為長(zhǎng)事務(wù)。為了減少資源被占用的時(shí)間,提高資源利用率和系統(tǒng)性能,組成長(zhǎng)事務(wù)的子事務(wù)應(yīng)該在全局事務(wù)結(jié)束之前提交并釋放其占用的資源。如果某些子事務(wù)失敗或用戶需要選擇提交結(jié)果時(shí),對(duì)已提交子事務(wù)的撤銷必須用執(zhí)行相反任務(wù)的補(bǔ)償事務(wù)來(lái)完成。1987年Garcia-Molina等人在《ProceedingsofInternationalConferenceonManagementofData,ACMSIGMODRecord16(3)》(ACMSIGMOD論文集16卷第3期)上發(fā)表了“Sagas(一種長(zhǎng)事務(wù)模型)”,該文提出了一種減少長(zhǎng)事務(wù)資源占用時(shí)間的方法,即將長(zhǎng)事務(wù)拆分成一組預(yù)先定義好執(zhí)行順序的子事務(wù)Ti(1≤i≤n),并為每個(gè)子事務(wù)編寫(xiě)一個(gè)補(bǔ)償事務(wù)Ci(1≤i≤n),每個(gè)補(bǔ)償事務(wù)Ci能語(yǔ)義地撤消由Ti的提交對(duì)系統(tǒng)產(chǎn)生的影響。該方法中,每一個(gè)子事務(wù)被允許單獨(dú)提交,并立即釋放其占用的資源,以提高資源的利用率?;谠撃P?,有不少人對(duì)此作了進(jìn)一步的改進(jìn)。經(jīng)對(duì)現(xiàn)有技術(shù)文獻(xiàn)的檢索發(fā)現(xiàn),Nodine等在《ProceedingsoftheTwenty-SeventhHawaiiInternationalConferenceonSystemSciences》(IEEE第27屆Hawaii國(guó)際系統(tǒng)科學(xué)會(huì)議論文集)中基于Sagas的思想,提出了如何在多數(shù)據(jù)庫(kù)事務(wù)中進(jìn)行事務(wù)補(bǔ)償,該方法通過(guò)步驟方法(stepapproach)將若干本地?cái)?shù)據(jù)庫(kù)集成為一個(gè)多數(shù)據(jù)庫(kù)系統(tǒng);每個(gè)本地?cái)?shù)據(jù)庫(kù)被封裝成一組步驟(steps),每個(gè)步驟有一個(gè)關(guān)聯(lián)的補(bǔ)償步驟(compensatingstep),當(dāng)事務(wù)需要補(bǔ)償時(shí),相關(guān)的補(bǔ)償步驟被調(diào)用。上述方法的不足之處在于它們要求應(yīng)用開(kāi)發(fā)者在編寫(xiě)事務(wù)性應(yīng)用程序時(shí),必須為每一個(gè)子事務(wù)提供相應(yīng)的補(bǔ)償事務(wù)。這樣的要求難以適應(yīng)網(wǎng)格環(huán)境,主要原因是(1)網(wǎng)格服務(wù)具有自治性。服務(wù)提供者可以根據(jù)自身的商業(yè)模式設(shè)置特定的補(bǔ)償要求,應(yīng)用開(kāi)發(fā)者在開(kāi)發(fā)階段無(wú)法知道在事務(wù)執(zhí)行之前動(dòng)態(tài)發(fā)現(xiàn)的網(wǎng)格服務(wù)具有哪些特殊的補(bǔ)償要求。(2)大大增加了事務(wù)性網(wǎng)格應(yīng)用的開(kāi)發(fā)工作量與復(fù)雜性。與分布式數(shù)據(jù)庫(kù)事務(wù)相比,網(wǎng)格服務(wù)涉及的操作及應(yīng)用語(yǔ)義要復(fù)雜得多,編寫(xiě)補(bǔ)償事務(wù)給可靠性網(wǎng)格應(yīng)用的開(kāi)發(fā)帶來(lái)了很大的工程量和編程復(fù)雜性。
發(fā)明內(nèi)容本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)中的不足,提供一種網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,它根據(jù)事務(wù)中的操作類型,在長(zhǎng)事務(wù)執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生相應(yīng)的補(bǔ)償事務(wù),為透明的事務(wù)補(bǔ)償提供支持,同時(shí),用戶也可以使用自動(dòng)產(chǎn)生的補(bǔ)償事務(wù)對(duì)子事務(wù)的提交結(jié)果進(jìn)行選擇。本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的,本發(fā)明包括如下步驟首先根據(jù)影響事務(wù)系統(tǒng)狀態(tài)的事件類型創(chuàng)建行級(jí)觸發(fā)器;然后在子事務(wù)執(zhí)行過(guò)程中,補(bǔ)償事務(wù)產(chǎn)生器根據(jù)子事務(wù)中執(zhí)行中的事件類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,自動(dòng)產(chǎn)生補(bǔ)償操作;最后當(dāng)子事務(wù)提交時(shí),將該子事務(wù)執(zhí)行中所產(chǎn)生的補(bǔ)償操作組合成補(bǔ)償事務(wù),這樣就完成了自動(dòng)產(chǎn)生補(bǔ)償事務(wù);所述的補(bǔ)償事務(wù)產(chǎn)生器始終監(jiān)視著子事務(wù)的執(zhí)行。所述的補(bǔ)償事務(wù)產(chǎn)生器,在事務(wù)執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生補(bǔ)償事務(wù),網(wǎng)格長(zhǎng)事務(wù)由多個(gè)子事務(wù)組成,分別由處于不同網(wǎng)絡(luò)節(jié)點(diǎn)上的網(wǎng)格服務(wù)來(lái)完成,補(bǔ)償事務(wù)產(chǎn)生器被安裝于實(shí)際執(zhí)行子事務(wù)的每一個(gè)網(wǎng)格服務(wù)上。所述的補(bǔ)償事務(wù),其補(bǔ)償方法如下(1)在子事務(wù)從開(kāi)始到被確認(rèn)或撤銷的整個(gè)過(guò)程中,補(bǔ)償事務(wù)產(chǎn)生器監(jiān)視各種影響系統(tǒng)狀態(tài)的事件;(2)當(dāng)影響系統(tǒng)狀態(tài)的事件出現(xiàn)時(shí),補(bǔ)償事務(wù)產(chǎn)生器執(zhí)行相應(yīng)動(dòng)作對(duì)于事務(wù)上下文消息,記錄全局事務(wù)標(biāo)識(shí)符和輸入?yún)?shù);預(yù)提交消息意味著事務(wù)中包含的數(shù)據(jù)修改操作開(kāi)始被執(zhí)行,因此,補(bǔ)償事務(wù)產(chǎn)生器開(kāi)始根據(jù)子事務(wù)中數(shù)據(jù)修改操作的類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,自動(dòng)產(chǎn)生數(shù)據(jù)修改事件的補(bǔ)償操作,并在子事務(wù)成功提交后使用定界符將補(bǔ)償操作封裝成補(bǔ)償事務(wù),然后存儲(chǔ)在數(shù)據(jù)庫(kù)中;對(duì)于撤銷消息,調(diào)用存儲(chǔ)在數(shù)據(jù)庫(kù)中的補(bǔ)償事務(wù);對(duì)于確認(rèn)消息,刪除存儲(chǔ)在數(shù)據(jù)庫(kù)中的補(bǔ)償事務(wù)。所述的影響系統(tǒng)狀態(tài)的事件,是指改變事務(wù)處理系統(tǒng)狀態(tài)的各種外部操作事件,有三大類事務(wù)協(xié)調(diào)事件、數(shù)據(jù)修改事件和服務(wù)自定義事件所述事務(wù)協(xié)調(diào)事件是指子事務(wù)從協(xié)調(diào)者收到了事務(wù)協(xié)調(diào)消息,包括事務(wù)上下文消息、預(yù)提交消息、撤銷消息、確認(rèn)消息,所述事務(wù)上下文消息用于協(xié)調(diào)者通知參加者事務(wù)開(kāi)始、事務(wù)標(biāo)識(shí)符、事務(wù)類型、協(xié)調(diào)者網(wǎng)絡(luò)地址、事務(wù)執(zhí)行有效期信息;所述預(yù)提交消息用于協(xié)調(diào)者通知參加者執(zhí)行與提交子事務(wù);所述確認(rèn)和撤銷消息分別用于用戶確認(rèn)和撤消已經(jīng)提交的子事務(wù);所述數(shù)據(jù)修改事件是指子事務(wù)中包含的改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作,本發(fā)明針對(duì)關(guān)系型數(shù)據(jù)庫(kù),因而數(shù)據(jù)修改操作包括插入、刪除和更新;所述服務(wù)自定義事件是指網(wǎng)格服務(wù)提供者根據(jù)自身需要設(shè)置的對(duì)撤銷訂單的用戶收到違約金的要求。所述的行級(jí)觸發(fā)器,是指基于數(shù)據(jù)庫(kù)的觸發(fā)器機(jī)制創(chuàng)建的針對(duì)數(shù)據(jù)修改事件而產(chǎn)生語(yǔ)義相反的補(bǔ)償操作的三個(gè)存儲(chǔ)過(guò)程模塊,分別用于補(bǔ)償更新、插入、刪除三種語(yǔ)句,它們是補(bǔ)償事務(wù)產(chǎn)生器的子模塊。從功能上看,它們是補(bǔ)償事務(wù)產(chǎn)生器的一部分。使用行級(jí)觸發(fā)器,可以根據(jù)數(shù)據(jù)表中行的標(biāo)識(shí)符方便地對(duì)被修改的所有行進(jìn)行補(bǔ)償,而不需要逐行匹配記錄,從而加快補(bǔ)償操作的產(chǎn)生速度,提高系統(tǒng)性能。行級(jí)觸發(fā)器的工作過(guò)程具體如下行級(jí)觸發(fā)器創(chuàng)建過(guò)程需要提供數(shù)據(jù)表的名字,根據(jù)名字可從用戶表視圖中獲得數(shù)據(jù)表的結(jié)構(gòu)信息,包括所有字段名稱以及字段的數(shù)據(jù)類型,因?yàn)閿?shù)據(jù)庫(kù)的USER_TAB_COLUMNS視圖提供了靜態(tài)數(shù)據(jù)詞典視圖,它描述了視圖的相關(guān)結(jié)構(gòu)信息,每個(gè)數(shù)據(jù)表產(chǎn)生create_insert_trigger,create_update_trigger,create_delete_trigger三個(gè)存儲(chǔ)過(guò)程,它們分別用于補(bǔ)償插入、更新、刪除語(yǔ)句,三個(gè)存儲(chǔ)過(guò)程的輸入?yún)?shù)都是其服務(wù)的數(shù)據(jù)表名稱,當(dāng)被調(diào)用時(shí),它們產(chǎn)生補(bǔ)償插入、更新、刪除的補(bǔ)償操作。行級(jí)觸發(fā)器負(fù)責(zé)動(dòng)態(tài)產(chǎn)生數(shù)據(jù)修改事件的補(bǔ)償操作,當(dāng)數(shù)據(jù)修改事件出現(xiàn)時(shí),補(bǔ)償事務(wù)產(chǎn)生器根據(jù)事件類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,行級(jí)觸發(fā)器生成具體的補(bǔ)償操作,補(bǔ)償操作是在子事務(wù)的執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生的,假如子事務(wù)失敗了,則在該子事務(wù)執(zhí)行過(guò)程中所產(chǎn)生的所有補(bǔ)償操作也被放棄;具體方法是,在插入事件出現(xiàn)時(shí),產(chǎn)生相應(yīng)的刪除語(yǔ)句將插入的記錄刪除;在刪除事件出現(xiàn)時(shí),產(chǎn)生相應(yīng)的插入語(yǔ)句將刪除的記錄再次插入;在更新事件出現(xiàn)時(shí),需要將被改變的記錄恢復(fù)成更新前的數(shù)據(jù)。在產(chǎn)生補(bǔ)償操作的過(guò)程中,行級(jí)觸發(fā)器通過(guò)數(shù)據(jù)表的結(jié)構(gòu)信息,判斷字段的數(shù)據(jù)類型;使用字符串拼接的方式,動(dòng)態(tài)產(chǎn)生補(bǔ)償操作。對(duì)于不同的數(shù)據(jù)類型,處理方式有所不同對(duì)數(shù)值型的數(shù)據(jù),直接與補(bǔ)償操作片斷的字符常量連接;對(duì)字符串型的數(shù)據(jù),則需要在這個(gè)值之前和之后,分別拼接一個(gè)單引號(hào),作為補(bǔ)償操作中字符串直接量的開(kāi)始與中止符;對(duì)日期時(shí)間型的數(shù)據(jù),需要首先將值轉(zhuǎn)化為字符串,然后在產(chǎn)生的補(bǔ)償操作中利用TO_DATE函數(shù)將字符串值重新轉(zhuǎn)換為日期時(shí)間。在插入事件出現(xiàn)時(shí),行級(jí)觸發(fā)器產(chǎn)生相應(yīng)的刪除語(yǔ)句將插入的記錄刪除;在刪除事件出現(xiàn)時(shí),行級(jí)觸發(fā)器產(chǎn)生相應(yīng)的插入語(yǔ)句將刪除的記錄再次插入;在更新事件出現(xiàn)時(shí),行級(jí)觸發(fā)器將被改變的記錄恢復(fù)成更新前的數(shù)據(jù),在產(chǎn)生補(bǔ)償操作的過(guò)程中,行級(jí)觸發(fā)器通過(guò)數(shù)據(jù)表的結(jié)構(gòu)信息,判斷字段的數(shù)據(jù)類型;使用字符串拼接的方式,動(dòng)態(tài)產(chǎn)生補(bǔ)償操作,對(duì)于不同的數(shù)據(jù)類型,處理方式有所不同對(duì)數(shù)值型的數(shù)據(jù),直接與補(bǔ)償操作片斷的字符常量連接;對(duì)字符串型的數(shù)據(jù),則需要在這個(gè)值之前和之后,分別拼接一個(gè)單引號(hào),作為補(bǔ)償操作中字符串直接量的開(kāi)始與中止符;對(duì)日期時(shí)間型的數(shù)據(jù),需要首先將值轉(zhuǎn)化為字符串,然后在產(chǎn)生的補(bǔ)償操作中利用TO_DATE函數(shù)將字符串值重新轉(zhuǎn)換為日期時(shí)間。所述補(bǔ)償操作,其產(chǎn)生是由事件驅(qū)動(dòng)的,使用數(shù)據(jù)庫(kù)提供的觸發(fā)器機(jī)制,分別創(chuàng)建以更新、插入、刪除三種語(yǔ)句為觸發(fā)條件的三個(gè)行級(jí)觸發(fā)器,根據(jù)正在執(zhí)行的語(yǔ)句類型,以該語(yǔ)句為觸發(fā)條件的行級(jí)觸發(fā)器被補(bǔ)償事務(wù)產(chǎn)生器所調(diào)用,動(dòng)態(tài)產(chǎn)生另一條起抵消作用的補(bǔ)償操作;所述的補(bǔ)償操作記錄在數(shù)據(jù)庫(kù)中,多個(gè)并發(fā)事務(wù)產(chǎn)生的補(bǔ)償操作存放在同一張表中,相互之間用事務(wù)標(biāo)識(shí)符加以區(qū)分,對(duì)于同一個(gè)全局事務(wù)的多個(gè)子事務(wù),當(dāng)訪問(wèn)同一站點(diǎn)的不同服務(wù)時(shí),它們的補(bǔ)償操作在同一個(gè)記錄補(bǔ)償操作的數(shù)據(jù)庫(kù)中,因此使用全局事務(wù)標(biāo)識(shí)符和執(zhí)行子事務(wù)的網(wǎng)格服務(wù)名的組合加以唯一區(qū)分;所述的補(bǔ)償操作與原事務(wù)的執(zhí)行順序相反,在記錄補(bǔ)償操作時(shí),還需要附加一個(gè)序列號(hào),指示此補(bǔ)償操作產(chǎn)生的先后順序,使得后產(chǎn)生的補(bǔ)償操作先執(zhí)行,先產(chǎn)生的補(bǔ)償操作后執(zhí)行,這個(gè)序列號(hào)是時(shí)間戳,或是從一個(gè)序列中選擇的遞增的序列號(hào)。所述自動(dòng)產(chǎn)生補(bǔ)償事務(wù),是指如果子事務(wù)提交成功,補(bǔ)償事務(wù)產(chǎn)生器將產(chǎn)生的補(bǔ)償操作封裝在開(kāi)始和提交之間,構(gòu)成一個(gè)完整的事務(wù),新產(chǎn)生的補(bǔ)償事務(wù)被存儲(chǔ)在數(shù)據(jù)庫(kù)中,在需要時(shí)執(zhí)行補(bǔ)償事務(wù);如果子事務(wù)提交失敗,所有產(chǎn)生的補(bǔ)償操作都將被放棄,當(dāng)下一個(gè)事務(wù)執(zhí)行時(shí),產(chǎn)生的補(bǔ)償操作屬于另一個(gè)補(bǔ)償事務(wù)。與現(xiàn)有技術(shù)相比,本發(fā)明的方法支持網(wǎng)格環(huán)境下補(bǔ)償事務(wù)的自動(dòng)產(chǎn)生,可以減少網(wǎng)格長(zhǎng)事務(wù)應(yīng)用的開(kāi)發(fā)工作量和開(kāi)發(fā)周期達(dá)30%以上,便于用戶對(duì)事務(wù)提交結(jié)果的選擇,從而解決了現(xiàn)有相關(guān)技術(shù)的不足。由于在網(wǎng)格長(zhǎng)事務(wù)執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生補(bǔ)償事務(wù),本發(fā)明可以為網(wǎng)格環(huán)境下的關(guān)鍵性應(yīng)用提供透明的可靠性支持;突破自治的網(wǎng)格服務(wù)提供者設(shè)置特殊補(bǔ)償要求的限制,這些為網(wǎng)格技術(shù)在商業(yè)環(huán)境的透明應(yīng)用提供了技術(shù)支撐。圖1本發(fā)明自動(dòng)產(chǎn)生補(bǔ)償事務(wù)的事務(wù)處理流程示意圖;圖2補(bǔ)償事務(wù)自動(dòng)產(chǎn)生過(guò)程示意圖;圖3本發(fā)明負(fù)責(zé)執(zhí)行補(bǔ)償事務(wù)的類的示意圖。具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的實(shí)施例作詳細(xì)說(shuō)明本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。本實(shí)施例基于關(guān)系數(shù)據(jù)庫(kù)Oracle,如圖1所示,其中事務(wù)性應(yīng)用是來(lái)自用戶的可靠性應(yīng)用程序;其它各模塊的功能分別為事務(wù)管理器模塊對(duì)事務(wù)性應(yīng)用的執(zhí)行、補(bǔ)償事務(wù)的產(chǎn)生與執(zhí)行過(guò)程進(jìn)行管理;補(bǔ)償事務(wù)產(chǎn)生器模塊專門用于產(chǎn)生與事務(wù)性應(yīng)用相應(yīng)的補(bǔ)償事務(wù),它根據(jù)從事務(wù)管理器產(chǎn)生的各種事件,基于規(guī)則庫(kù)動(dòng)態(tài)產(chǎn)生相應(yīng)的補(bǔ)償操作;規(guī)則庫(kù)中存儲(chǔ)了如何產(chǎn)生補(bǔ)償操作的一組規(guī)則;日志模塊用于保存事務(wù)執(zhí)行與恢復(fù)過(guò)程中相關(guān)信息;數(shù)據(jù)庫(kù)系統(tǒng)模塊用于實(shí)際執(zhí)行事務(wù)性應(yīng)用,并存儲(chǔ)系統(tǒng)產(chǎn)生的補(bǔ)償事務(wù)。本實(shí)施例實(shí)現(xiàn)過(guò)程如下1.創(chuàng)建行級(jí)觸發(fā)器所述的行級(jí)觸發(fā)器,是指基于數(shù)據(jù)庫(kù)的觸發(fā)器機(jī)制創(chuàng)建的專門針對(duì)數(shù)據(jù)修改事件,產(chǎn)生語(yǔ)義相反的補(bǔ)償操作的三個(gè)存儲(chǔ)過(guò)程模塊,分別用于補(bǔ)償更新、插入、刪除三種語(yǔ)句;從功能上看,它們是補(bǔ)償事務(wù)產(chǎn)生器的一部分。使用行級(jí)觸發(fā)器,可以根據(jù)數(shù)據(jù)表中行的標(biāo)識(shí)符方便地對(duì)被修改的所有行進(jìn)行補(bǔ)償,而不需要逐行匹配記錄,從而加快補(bǔ)償操作的產(chǎn)生速度,提高系統(tǒng)性能。行級(jí)觸發(fā)器通過(guò)數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),每一張被操作的數(shù)據(jù)表需要?jiǎng)?chuàng)建一組觸發(fā)器。創(chuàng)建過(guò)程需要提供觸發(fā)器所服務(wù)的數(shù)據(jù)表的名字,據(jù)此從USER_TAB_COLUMNS視圖中獲得數(shù)據(jù)表的結(jié)構(gòu)信息,包括所有字段名稱以及字段的數(shù)據(jù)類型。本實(shí)施例為每個(gè)數(shù)據(jù)表產(chǎn)生create_insert_trigger,create_update_trigger,create_delete_trigger三個(gè)存儲(chǔ)過(guò)程,它們分別用于補(bǔ)償Insert、Update、Delete語(yǔ)句。創(chuàng)建行級(jí)觸發(fā)器遵循以下二個(gè)原則(1)語(yǔ)義上撤銷原操作的影響。行級(jí)觸發(fā)器按表1如示的原則產(chǎn)生相應(yīng)的補(bǔ)償操作。在表1中,opi是Ti中的操作;opj是依賴事務(wù)Tj中的相關(guān)操作。表中涉及到兩種替代概念相關(guān)替代和無(wú)關(guān)替代,相關(guān)替代指的是Ti提交后的狀態(tài)Si+1是和提交前的狀態(tài)Si相關(guān)的,即Si+1=f(Si,Ti),此時(shí),copi必須消除opi的影響。例如,如果opi=update(d1,d2)并且d2=d1+n,則其補(bǔ)償操作是copi=update(d3,d4),這里d4=d3-n;無(wú)關(guān)替代是指Si+1與Si無(wú)關(guān),即Si+1=f(Ti),這種替代操作不需要被補(bǔ)償。如opi=update(″Monday″,″Tuesday″),opj=update(″Tuesday″,Wednesday″)。(2)不影響并發(fā)事務(wù)的提交結(jié)果。一段時(shí)間內(nèi),一個(gè)數(shù)據(jù)庫(kù)可能被多個(gè)并發(fā)事務(wù)訪問(wèn),在實(shí)施例中,如果事務(wù)歷史H=TiTjCTi(i≠j),Ti所訪問(wèn)的數(shù)據(jù)對(duì)象被并發(fā)的依賴事務(wù)Tj所修改,則補(bǔ)償只能從語(yǔ)義上撤銷事務(wù)Ti的影響,也就是說(shuō),補(bǔ)償事務(wù)CTi只能撤銷由原事務(wù)Ti本身提交所作出的所有改變,但不改變依賴事務(wù)Tj的提交結(jié)果。表1行級(jí)觸發(fā)器對(duì)數(shù)據(jù)修改操作的補(bǔ)償原則下面是補(bǔ)償刪除操作的行級(jí)觸發(fā)器create_delete_trigger的部分代碼,各段意義如下CREATEORREPLACEPROCEDUREcreate_delete_trigger聲明存儲(chǔ)過(guò)程開(kāi)始,其輸入?yún)?shù)是table_name(即數(shù)據(jù)表名稱)。EXECUTEIMMEDIATE’...’||’...’||...動(dòng)態(tài)組裝補(bǔ)償操作。由于每張數(shù)據(jù)表的結(jié)構(gòu)各不相同,數(shù)據(jù)表名able_name等信息只有在運(yùn)行時(shí)才能獲得,因此,觸發(fā)器的創(chuàng)建有必要使用一種自動(dòng)化的方式。PL/SQL語(yǔ)言提供的EXECUTEIMMEDIATE語(yǔ)句可以在運(yùn)行時(shí)組裝補(bǔ)償操作。代碼段第11行至14行,計(jì)算出表的列數(shù),并存儲(chǔ)于column_number。代碼段第19行至28行,使用游標(biāo)遍歷all_tab_columns表。all_tab_columns是數(shù)據(jù)庫(kù)系統(tǒng)存儲(chǔ)所有表列信息的表。把table_name表的所有列名連接為字符串,并存儲(chǔ)于column_names。代碼段第36行至71行,CREATEORREPLACETRIGGERdelete_trigger_on_,創(chuàng)建觸發(fā)器,并以表名加前綴delete_trigger_on_命名。代碼段第47行至49行,獲得當(dāng)前子事務(wù)的標(biāo)識(shí)符,并存儲(chǔ)于current_sub。代碼段第51行至54行,根據(jù)current_sub,獲得當(dāng)前子事務(wù)的補(bǔ)償語(yǔ)句數(shù)。代碼段第65行至70行,根據(jù)已獲得的信息,把補(bǔ)償操作存儲(chǔ)于數(shù)據(jù)庫(kù)中。1CREATEORREPLACEPROCEDUREcreate_delete_trigger(2table_nameINVARCHAR2)AS3column_numberINTEGER;4column_namesVARCHAR2(300):=”;5column_names2VARCHAR2(300):=”;6column_nameVARCHAR2(30);7iINTEGER;8TYPEcursor_typeISREFCURSOR;9column_cursorcursor_type;10BEGIN11EXECUTEIMMEDIATE’SELECTCOUNT(*)’12||’FROMall_tab_columns’13||’WHEREtable_name=UPPER(”’||table_name||”’)’14INTOcolumn_number;1516EXECUTEIMMEDIATE’ANALYZETABLE’||table_name||’VALIDATE17STRUCTURE’;1819OPENcolumn_cursorFOR’SELECTcolumn_name’20||’FROMall_tab_columns’21||’WHEREtable_name=UPPER(”’||table_name||”’)’;22FORiIN2..column_numberLOOP23FETCHcolumn_cursor24INTOcolumn_name;25column_names:=column_names||’:old.’||column_name||’,26’;27column_names2:=column_names2||column_name||’,’;28ENDLOOP;2930FETCHcolumn_cursor31INTOcolumn_name;32column_names:=column_names||’:old.’||column_name;33column_names2:=column_names2||column_name;34CLOSEcolumn_cursor;3536EXECUTEIMMEDIATE’CREATEORREPLACETRIGGERdelete_trigger_on_’37||table_name||”38||’AFTERDELETE’39||’ON’||table_name||”40||’FOREACHROW’41||’DECLARE’42||’current_sub_idINTEGER;’43||’current_sub_countINTEGER;’44||’new_rowidROWID;’4546||’BEGIN’47||’SELECTid’48||’INTOcurrent_sub_id’49||’FROMcurrent_sub;’5051||’SELECTcount’52||’INTOcurrent_sub_count’53||’FROMsub_count’54||’WHEREid=current_sub_id;’5556||’UPDATEsub_count’57||’SETcount=count+1’58||’WHEREid=current_sub_id;’5960||’INSERTINTOcomp_’||table_name||”61||’(’||column_names2||’)’62||’VALUES(’||column_names||’)’63||’RETURNINGrowidINTOnew_rowid;’6465||’INSERTINTOcomp_op(sub_id,op_type,tab_name,old_id,66new_id,exec_seq)’67||’VALUES(current_sub_id,’68||”’INSERT”,’69||””||table_name||”’,’70||’:old.rowid,new_rowid,current_sub_count);’71||’ENDdelete_trigger;’;72ENDcreate_delete_trigger;2、補(bǔ)償事務(wù)產(chǎn)生器始終監(jiān)視著子事務(wù)的執(zhí)行過(guò)程中影響系統(tǒng)狀態(tài)的事件如圖2所示,所述的影響系統(tǒng)狀態(tài)的事件,是指改變事務(wù)處理系統(tǒng)狀態(tài)的各種外部操作事件,有三大類事務(wù)協(xié)調(diào)事件、數(shù)據(jù)修改事件和服務(wù)自定義事件。所述事務(wù)協(xié)調(diào)事件是指子事務(wù)從協(xié)調(diào)者收到了事務(wù)協(xié)調(diào)消息,包括事務(wù)上下文消息、預(yù)提交消息、撤銷消息、確認(rèn)消息,所述事務(wù)上下文消息用于協(xié)調(diào)者通知參加者事務(wù)開(kāi)始、事務(wù)標(biāo)識(shí)符、事務(wù)類型、協(xié)調(diào)者網(wǎng)絡(luò)地址、事務(wù)執(zhí)行有效期等信息;所述預(yù)提交消息用于協(xié)調(diào)者通知參加者提交;所述確認(rèn)和撤銷消息分別用于用戶確認(rèn)和撤消已經(jīng)提交的子事務(wù)。所述數(shù)據(jù)修改事件是指子事務(wù)中包含的改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作,本發(fā)明針對(duì)關(guān)系型數(shù)據(jù)庫(kù),因而數(shù)據(jù)修改操作包括插入(insert)、刪除(delete)和更新(update)。所述服務(wù)自定義事件是指網(wǎng)格服務(wù)提供者根據(jù)自身需要設(shè)置的特殊要求,如對(duì)撤銷訂單的用戶收到一定的違約金。所述的補(bǔ)償事務(wù)產(chǎn)生器,是指用于動(dòng)態(tài)產(chǎn)生補(bǔ)償事務(wù)的模塊,網(wǎng)格長(zhǎng)事務(wù)由多個(gè)子事務(wù)組成,分別由處于不同網(wǎng)絡(luò)節(jié)點(diǎn)上的網(wǎng)格服務(wù)來(lái)完成,補(bǔ)償事務(wù)產(chǎn)生器被安裝于實(shí)際執(zhí)行子事務(wù)的每一個(gè)網(wǎng)格服務(wù)上。補(bǔ)償事務(wù)產(chǎn)生器的功能與工作過(guò)程具體如下(1)在子事務(wù)從開(kāi)始到被確認(rèn)或撤銷的整個(gè)過(guò)程中,補(bǔ)償事務(wù)產(chǎn)生器監(jiān)視各種影響系統(tǒng)狀態(tài)的事件;(2)當(dāng)影響系統(tǒng)狀態(tài)的事件出現(xiàn)時(shí),補(bǔ)償事務(wù)產(chǎn)生器執(zhí)行相應(yīng)動(dòng)作對(duì)于事務(wù)上下文消息,記錄全局事務(wù)標(biāo)識(shí)符和輸入?yún)?shù);對(duì)于預(yù)提交消息,開(kāi)始產(chǎn)生補(bǔ)償操作,即根據(jù)子事務(wù)中數(shù)據(jù)修改操作的類型分別調(diào)用相應(yīng)的行級(jí)觸發(fā)器,并在子事務(wù)成功提交后使用定界符將補(bǔ)償操作封裝成補(bǔ)償事務(wù),然后存儲(chǔ)在數(shù)據(jù)庫(kù)中;對(duì)于撤銷消息,調(diào)用存儲(chǔ)在數(shù)據(jù)庫(kù)中的補(bǔ)償事務(wù);對(duì)于確認(rèn)消息,刪除存儲(chǔ)在數(shù)據(jù)庫(kù)中的補(bǔ)償事務(wù)。3.行級(jí)觸發(fā)器動(dòng)態(tài)產(chǎn)生補(bǔ)償操作當(dāng)數(shù)據(jù)修改事件出現(xiàn)時(shí),補(bǔ)償事務(wù)產(chǎn)生器根據(jù)事件類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,行級(jí)觸發(fā)器生成具體的補(bǔ)償操作。所述的行級(jí)觸發(fā)器,在被觸發(fā)時(shí)能獲知被修改行的唯一標(biāo)識(shí)符,這些標(biāo)識(shí)符在子事務(wù)中一個(gè)操作修改多行時(shí),可以方便地為所有被修改行產(chǎn)生相應(yīng)的補(bǔ)償操作。例如,若一條更新語(yǔ)句更新了兩行,則在更新每行時(shí),行級(jí)觸發(fā)器都被觸發(fā)一次,從而獲得當(dāng)前正在被更新行的唯一標(biāo)識(shí)符,補(bǔ)償事務(wù)產(chǎn)生器接收到行級(jí)觸發(fā)器被觸發(fā)的信息,并為該行產(chǎn)生一條更新補(bǔ)償操作。當(dāng)以插入操作為條件的行級(jí)觸發(fā)器被觸發(fā)時(shí),需要把被插入行的標(biāo)識(shí)符、補(bǔ)償操作類型(即刪除)、數(shù)據(jù)表名記錄下來(lái);當(dāng)以更新操作為條件的行級(jí)觸發(fā)器被觸發(fā)時(shí),則不僅要存儲(chǔ)被更新行的標(biāo)識(shí)符、補(bǔ)償操作類型(即更新)、數(shù)據(jù)表名,還要建一張結(jié)構(gòu)與原表相同的數(shù)據(jù)表,存儲(chǔ)被更新行的原值,以備執(zhí)行補(bǔ)償時(shí)使用;當(dāng)以刪除操作為條件的行級(jí)觸發(fā)器被觸發(fā)時(shí),不僅要存儲(chǔ)補(bǔ)償操作類型(即插入)、數(shù)據(jù)表名,還要建一張結(jié)構(gòu)與原表相同的數(shù)據(jù)表,存儲(chǔ)被刪除行的原值,以備執(zhí)行補(bǔ)償時(shí)使用。另外,被刪除行的標(biāo)識(shí)符也必須存儲(chǔ),以備執(zhí)行補(bǔ)償時(shí),查找其它補(bǔ)償操作中對(duì)這個(gè)標(biāo)識(shí)符的引用,并對(duì)其進(jìn)行更新。所述的行級(jí)觸發(fā)器的觸發(fā)是通過(guò)關(guān)系數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),需要的關(guān)鍵信息是數(shù)據(jù)表的名稱和結(jié)構(gòu)。這些信息從Oracle數(shù)據(jù)庫(kù)提供的USER_TAB_COLUMNS(用戶表)視圖獲得。用戶表視圖中部分與表結(jié)構(gòu)相關(guān)的字段列在表2中。表2USER_TAB_COLUMNS(用戶表)視圖中部分與表結(jié)構(gòu)相關(guān)的字段在插入事件出現(xiàn)時(shí),產(chǎn)生相應(yīng)的刪除語(yǔ)句將插入的記錄刪除;在刪除事件出現(xiàn)時(shí),產(chǎn)生相應(yīng)的插入語(yǔ)句將刪除的記錄再次插入;在更新事件出現(xiàn)時(shí),需要將被改變的記錄恢復(fù)成更新前的數(shù)據(jù)。在產(chǎn)生補(bǔ)償操作的過(guò)程中,行級(jí)觸發(fā)器通過(guò)數(shù)據(jù)表的結(jié)構(gòu)信息,判斷字段的數(shù)據(jù)類型;使用字符串拼接的方式,動(dòng)態(tài)產(chǎn)生補(bǔ)償操作。對(duì)于不同的數(shù)據(jù)類型,處理方式有所不同對(duì)數(shù)值型的數(shù)據(jù),直接與補(bǔ)償操作片斷的字符常量連接;對(duì)字符串型的數(shù)據(jù),則需要在這個(gè)值之前和之后,分別拼接一個(gè)單引號(hào),作為補(bǔ)償操作中字符串直接量的開(kāi)始與中止符;對(duì)日期時(shí)間型的數(shù)據(jù),需要首先將值轉(zhuǎn)化為字符串,然后在產(chǎn)生的補(bǔ)償操作中利用TO_DATE函數(shù)將字符串值重新轉(zhuǎn)換為日期時(shí)間。所述的補(bǔ)償操作,其產(chǎn)生是由事件驅(qū)動(dòng)的。本實(shí)施例基于關(guān)系型數(shù)據(jù)庫(kù),分別創(chuàng)建以更新、插入、刪除三種語(yǔ)句為觸發(fā)條件的三個(gè)行級(jí)觸發(fā)器。根據(jù)正在執(zhí)行的語(yǔ)句類型,以該語(yǔ)句為觸發(fā)條件的行級(jí)觸發(fā)器被觸發(fā),產(chǎn)生另一條起抵消作用的補(bǔ)償語(yǔ)句。例如,當(dāng)某子事務(wù)刪除一個(gè)數(shù)據(jù)元素時(shí),刪除事件產(chǎn)生補(bǔ)償操作onDeletedocompensationOperation(’Insert’,data)根據(jù)這個(gè)原則,子事務(wù)中的每一個(gè)delete操作將導(dǎo)致一次插入被刪除的數(shù)據(jù)元素的補(bǔ)償操作。函數(shù)compensationOperation可以被任何嵌入在商務(wù)邏輯中用于補(bǔ)償?shù)墓δ苣K所替代。所述的補(bǔ)償操作記錄在數(shù)據(jù)庫(kù)中,多個(gè)并發(fā)事務(wù)產(chǎn)生的補(bǔ)償操作存放在同一張表中,相互之間用事務(wù)標(biāo)識(shí)符加以區(qū)分,對(duì)于同一個(gè)全局事務(wù)的多個(gè)子事務(wù),如果訪問(wèn)同一站點(diǎn)的不同服務(wù),它們的補(bǔ)償操作有可能被記錄在同一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,因此,可以使用全局事務(wù)標(biāo)識(shí)符和執(zhí)行子事務(wù)的網(wǎng)格服務(wù)名的組合加以唯一區(qū)分。記錄補(bǔ)償操作的表結(jié)構(gòu)如表3所示。表3記錄補(bǔ)償操作的表結(jié)構(gòu)所述的補(bǔ)償操作與原事務(wù)的執(zhí)行順序相反。因此,在記錄補(bǔ)償操作時(shí),還需要附加一個(gè)序列號(hào),指示此補(bǔ)償操作產(chǎn)生的先后順序,使得后產(chǎn)生的補(bǔ)償操作先執(zhí)行,先產(chǎn)生的補(bǔ)償操作后執(zhí)行。這個(gè)序列號(hào)可以是時(shí)間戳,或是從一個(gè)序列中選擇的遞增的序列號(hào)。所述的產(chǎn)生補(bǔ)償操作的行級(jí)觸發(fā)器、記錄補(bǔ)償操作的數(shù)據(jù)庫(kù)、以及遞增的序列號(hào),這些關(guān)系數(shù)據(jù)庫(kù)對(duì)象均通過(guò)存儲(chǔ)過(guò)程來(lái)創(chuàng)建。通過(guò)提供一個(gè)COMP_OP_PKG(補(bǔ)償操作包),提供3個(gè)存儲(chǔ)過(guò)程用于創(chuàng)建這3種對(duì)象,這些存儲(chǔ)過(guò)程如表4所示。表4包COMP_OP_PKG(補(bǔ)償操作包)提供的存儲(chǔ)過(guò)程4.自動(dòng)產(chǎn)生補(bǔ)償事務(wù)如果子事務(wù)提交成功,補(bǔ)償事務(wù)產(chǎn)生器將產(chǎn)生的補(bǔ)償操作封裝在開(kāi)始(Begin)和提交(Commit)之間,構(gòu)成一個(gè)完整的事務(wù),新產(chǎn)生的補(bǔ)償事務(wù)被存儲(chǔ)在數(shù)據(jù)庫(kù)中,在需要時(shí)執(zhí)行補(bǔ)償事務(wù);如果子事務(wù)提交失敗,所有產(chǎn)生的補(bǔ)償操作都將被放棄,當(dāng)下一個(gè)事務(wù)執(zhí)行時(shí),產(chǎn)生的補(bǔ)償操作屬于另一個(gè)補(bǔ)償事務(wù)。5.執(zhí)行補(bǔ)償事務(wù)如圖3所示,當(dāng)補(bǔ)償事務(wù)自動(dòng)產(chǎn)生之后,補(bǔ)償事務(wù)在用戶發(fā)出撤消子事務(wù)消息或超過(guò)時(shí)限子事務(wù)仍未被確認(rèn)時(shí)執(zhí)行,在需要執(zhí)行補(bǔ)償事務(wù)時(shí),首先通過(guò)url(網(wǎng)絡(luò)地址)、username(用戶名)、password(用戶密碼)和compOpTb(記錄補(bǔ)償操作的數(shù)據(jù)表名)實(shí)例化CTExecuter(補(bǔ)償事務(wù)執(zhí)行)類,在得到補(bǔ)償事務(wù)執(zhí)行類的實(shí)例后,以子事務(wù)標(biāo)識(shí)符作為輸入?yún)?shù),調(diào)用其executeCT(執(zhí)行補(bǔ)償事務(wù))方法即可執(zhí)行補(bǔ)償事務(wù),執(zhí)行補(bǔ)償事務(wù)時(shí)需要的子事務(wù)標(biāo)識(shí)符由子事務(wù)所屬的全局事務(wù)的標(biāo)識(shí)符以及執(zhí)行子事務(wù)的網(wǎng)格服務(wù)名稱所組成,執(zhí)行補(bǔ)償事務(wù)方法根據(jù)此子事務(wù)標(biāo)識(shí)符,從記錄補(bǔ)償操作語(yǔ)句的表中,將補(bǔ)償操作按序列號(hào)順序取出,然后在一個(gè)事務(wù)中執(zhí)行并提交。本實(shí)施例支持網(wǎng)格環(huán)境下補(bǔ)償事務(wù)的自動(dòng)產(chǎn)生,可以縮短和減少網(wǎng)格長(zhǎng)事務(wù)應(yīng)用的開(kāi)發(fā)周期和工作量近30%以上,并便于用戶對(duì)事務(wù)提交結(jié)果的選擇。權(quán)利要求1.一種網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征在于,包括如下步驟首先根據(jù)影響事務(wù)系統(tǒng)狀態(tài)的事件類型創(chuàng)建行級(jí)觸發(fā)器;然后在子事務(wù)執(zhí)行過(guò)程中,補(bǔ)償事務(wù)產(chǎn)生器根據(jù)子事務(wù)中執(zhí)行中的事件類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,自動(dòng)產(chǎn)生補(bǔ)償操作;最后當(dāng)子事務(wù)提交時(shí),將該子事務(wù)執(zhí)行中所產(chǎn)生的補(bǔ)償操作組合成補(bǔ)償事務(wù),這樣就完成了自動(dòng)產(chǎn)生補(bǔ)償事務(wù);所述的補(bǔ)償事務(wù)產(chǎn)生器始終監(jiān)視著子事務(wù)的執(zhí)行。2.根據(jù)權(quán)利要求1所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述的補(bǔ)償事務(wù)產(chǎn)生器,在事務(wù)執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生補(bǔ)償事務(wù),網(wǎng)格長(zhǎng)事務(wù)由多個(gè)子事務(wù)組成,分別由處于不同網(wǎng)絡(luò)節(jié)點(diǎn)上的網(wǎng)格服務(wù)來(lái)完成,補(bǔ)償事務(wù)產(chǎn)生器被安裝于實(shí)際執(zhí)行子事務(wù)的每一個(gè)網(wǎng)格服務(wù)上。3.根據(jù)權(quán)利要求1或者2所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述的補(bǔ)償事務(wù),其補(bǔ)償方法如下(1)在子事務(wù)從開(kāi)始到被確認(rèn)或撤銷的整個(gè)過(guò)程中,補(bǔ)償事務(wù)產(chǎn)生器監(jiān)視各種影響系統(tǒng)狀態(tài)的事件;(2)當(dāng)影響系統(tǒng)狀態(tài)的事件出現(xiàn)時(shí),補(bǔ)償事務(wù)產(chǎn)生器執(zhí)行相應(yīng)動(dòng)作對(duì)于事務(wù)上下文消息,記錄全局事務(wù)標(biāo)識(shí)符和輸入?yún)?shù);預(yù)提交消息意味著事務(wù)中包含的數(shù)據(jù)修改操作開(kāi)始被執(zhí)行,補(bǔ)償事務(wù)產(chǎn)生器開(kāi)始根據(jù)子事務(wù)中數(shù)據(jù)修改操作的類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,自動(dòng)產(chǎn)生數(shù)據(jù)修改事件的補(bǔ)償操作,并在子事務(wù)成功提交后使用定界符將補(bǔ)償操作封裝成補(bǔ)償事務(wù),然后存儲(chǔ)在數(shù)據(jù)庫(kù)中;對(duì)于撤銷消息,調(diào)用存儲(chǔ)在數(shù)據(jù)庫(kù)中的補(bǔ)償事務(wù);對(duì)于確認(rèn)消息,刪除存儲(chǔ)在數(shù)據(jù)庫(kù)中的補(bǔ)償事務(wù)。4.根據(jù)權(quán)利要求1所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述的影響系統(tǒng)狀態(tài)的事件,是指改變事務(wù)處理系統(tǒng)狀態(tài)的各種外部操作事件,有三大類事務(wù)協(xié)調(diào)事件、數(shù)據(jù)修改事件和服務(wù)自定義事件所述事務(wù)協(xié)調(diào)事件是指子事務(wù)從協(xié)調(diào)者收到了事務(wù)協(xié)調(diào)消息,包括事務(wù)上下文消息、預(yù)提交消息、撤銷消息、確認(rèn)消息,所述事務(wù)上下文消息用于協(xié)調(diào)者通知參加者事務(wù)開(kāi)始、事務(wù)標(biāo)識(shí)符、事務(wù)類型、協(xié)調(diào)者網(wǎng)絡(luò)地址、事務(wù)執(zhí)行有效期信息;所述預(yù)提交消息用于協(xié)調(diào)者通知參加者執(zhí)行與提交子事務(wù);所述確認(rèn)和撤銷消息分別用于用戶確認(rèn)和撤消已經(jīng)提交的子事務(wù);所述數(shù)據(jù)修改事件是指子事務(wù)中包含的改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作,數(shù)據(jù)修改操作包括插入、刪除和更新;所述服務(wù)自定義事件是指網(wǎng)格服務(wù)提供者根據(jù)自身需要設(shè)置的對(duì)撤銷訂單的用戶收到違約金的要求。5.根據(jù)權(quán)利要求4所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述的行級(jí)觸發(fā)器,是指基于數(shù)據(jù)庫(kù)的觸發(fā)器機(jī)制創(chuàng)建的針對(duì)數(shù)據(jù)修改事件而產(chǎn)生語(yǔ)義相反的補(bǔ)償操作的三個(gè)存儲(chǔ)過(guò)程模塊,分別用于補(bǔ)償更新、插入、刪除三種語(yǔ)句,它們是補(bǔ)償事務(wù)產(chǎn)生器的子模塊。6.根據(jù)權(quán)利要求5所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述行級(jí)觸發(fā)器,其創(chuàng)建過(guò)程需要提供數(shù)據(jù)表的名字,根據(jù)名字可從用戶表視圖中獲得數(shù)據(jù)表的結(jié)構(gòu)信息,包括所有字段名稱以及字段的數(shù)據(jù)類型,因?yàn)閿?shù)據(jù)庫(kù)的USER_TAB_COLUMNS視圖提供了靜態(tài)數(shù)據(jù)詞典視圖,它描述了視圖的相關(guān)結(jié)構(gòu)信息,每個(gè)數(shù)據(jù)表產(chǎn)生create_insert_trigger,create_update_trigger,create_delete_trigger三個(gè)存儲(chǔ)過(guò)程,它們分別用于補(bǔ)償插入、更新、刪除語(yǔ)句,三個(gè)存儲(chǔ)過(guò)程的輸入?yún)?shù)都是其服務(wù)的數(shù)據(jù)表名稱,當(dāng)被調(diào)用時(shí),它們產(chǎn)生補(bǔ)償插入、更新、刪除的補(bǔ)償操作。7.根據(jù)權(quán)利要求1所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述補(bǔ)償操作,其產(chǎn)生是由事件驅(qū)動(dòng)的,使用數(shù)據(jù)庫(kù)提供的觸發(fā)器機(jī)制,分別創(chuàng)建以更新、插入、刪除三種語(yǔ)句為觸發(fā)條件的三個(gè)行級(jí)觸發(fā)器,根據(jù)正在執(zhí)行的語(yǔ)句類型,以該語(yǔ)句為觸發(fā)條件的行級(jí)觸發(fā)器被補(bǔ)償事務(wù)產(chǎn)生器所調(diào)用,動(dòng)態(tài)產(chǎn)生另一條起抵消作用的補(bǔ)償操作;所述的補(bǔ)償操作記錄在數(shù)據(jù)庫(kù)中,多個(gè)并發(fā)事務(wù)產(chǎn)生的補(bǔ)償操作存放在同一張表中,相互之間用事務(wù)標(biāo)識(shí)符加以區(qū)分,對(duì)于同一個(gè)全局事務(wù)的多個(gè)子事務(wù),當(dāng)訪問(wèn)同一站點(diǎn)的不同服務(wù)時(shí),它們的補(bǔ)償操作在同一個(gè)記錄補(bǔ)償操作的數(shù)據(jù)庫(kù)中,因此使用全局事務(wù)標(biāo)識(shí)符和執(zhí)行子事務(wù)的網(wǎng)格服務(wù)名的組合加以唯一區(qū)分;所述的補(bǔ)償操作與原事務(wù)的執(zhí)行順序相反,在記錄補(bǔ)償操作時(shí),還需要附加一個(gè)序列號(hào),指示此補(bǔ)償操作產(chǎn)生的先后順序,使得后產(chǎn)生的補(bǔ)償操作先執(zhí)行,先產(chǎn)生的補(bǔ)償操作后執(zhí)行,這個(gè)序列號(hào)是時(shí)間戳,或是從一個(gè)序列中選擇的遞增的序列號(hào)。8.根據(jù)權(quán)利要求1所述的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,其特征是,所述自動(dòng)產(chǎn)生補(bǔ)償事務(wù),是指如果子事務(wù)提交成功,補(bǔ)償事務(wù)產(chǎn)生器將產(chǎn)生的補(bǔ)償操作封裝在開(kāi)始和提交之間,構(gòu)成一個(gè)完整的事務(wù),新產(chǎn)生的補(bǔ)償事務(wù)被存儲(chǔ)在數(shù)據(jù)庫(kù)中,在需要時(shí)執(zhí)行補(bǔ)償事務(wù);如果子事務(wù)提交失敗,所有產(chǎn)生的補(bǔ)償操作都將被放棄,當(dāng)下一個(gè)事務(wù)執(zhí)行時(shí),產(chǎn)生的補(bǔ)償操作屬于另一個(gè)補(bǔ)償事務(wù)。全文摘要本發(fā)明涉及的是一種網(wǎng)絡(luò)
技術(shù)領(lǐng)域:
的網(wǎng)格環(huán)境下的補(bǔ)償事務(wù)自動(dòng)產(chǎn)生方法,補(bǔ)償事務(wù)產(chǎn)生器始終監(jiān)視著子事務(wù)的執(zhí)行,首先根據(jù)影響事務(wù)系統(tǒng)狀態(tài)的事件類型創(chuàng)建行級(jí)觸發(fā)器,然后在子事務(wù)執(zhí)行過(guò)程中,補(bǔ)償事務(wù)產(chǎn)生器根據(jù)子事務(wù)中執(zhí)行中的事件類型調(diào)用相應(yīng)的行級(jí)觸發(fā)器,自動(dòng)產(chǎn)生補(bǔ)償操作,最后當(dāng)子事務(wù)提交時(shí),將該子事務(wù)執(zhí)行中所產(chǎn)生的補(bǔ)償操作組合成補(bǔ)償事務(wù),這樣就完成了自動(dòng)產(chǎn)生補(bǔ)償事務(wù)。本發(fā)明突破自治的網(wǎng)格服務(wù)提供者設(shè)置特殊補(bǔ)償要求的限制,并大大減輕了開(kāi)發(fā)事務(wù)性網(wǎng)格應(yīng)用的工作量與復(fù)雜性。文檔編號(hào)G06F17/30GK101763283SQ20101030071公開(kāi)日2010年6月30日申請(qǐng)日期2010年1月26日優(yōu)先權(quán)日2010年1月26日發(fā)明者唐飛龍,過(guò)敏意,唐燦,沈耀申請(qǐng)人:上海交通大學(xué)