国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      Oracle倒回:元數(shù)據(jù)驅(qū)動的撤銷的制作方法

      文檔序號:6497603閱讀:240來源:國知局
      Oracle倒回:元數(shù)據(jù)驅(qū)動的撤銷的制作方法
      【專利摘要】描述了元數(shù)據(jù)驅(qū)動的撤銷。在一個實施例中,元數(shù)據(jù)存儲庫存儲與操作關(guān)聯(lián)的元數(shù)據(jù)。與每個操作關(guān)聯(lián)的屬性也存儲在元數(shù)據(jù)中。每個操作與包括用于為特定操作類型的操作生成撤銷條目的指令的小撤銷關(guān)聯(lián)。撤銷日志條目是在截獲包括可撤銷操作的請求時利用元數(shù)據(jù)和小撤銷生成的。當(dāng)發(fā)布撤銷命令時,撤銷日志中與特定業(yè)務(wù)事務(wù)關(guān)聯(lián)的指令被執(zhí)行,以“倒回”事務(wù)。
      【專利說明】ORACLE倒回:元數(shù)據(jù)驅(qū)動的撤銷
      [0001] 權(quán)益聲明
      [0002] 本申請根據(jù)美國法典第35章119(e)條要求于2011年11月3日提交的臨時申請 61/555, 443的權(quán)益,該臨時申請的全部內(nèi)容通過引用結(jié)合與此,就像在本文中完全闡述了 一樣。

      【背景技術(shù)】
      [0003] 現(xiàn)代計算系統(tǒng)常常提供"撤銷"某些操作的能力。這是因為計算機(jī)操作人員或者 他們使用的程序有時候犯錯誤。當(dāng)錯誤發(fā)生時,操作人員可能想回到已知的狀態(tài)并且再試。 有各種動作會導(dǎo)致這些錯誤。例如,程序員有時候未能認(rèn)識到計算系統(tǒng)將以特定的途徑被 使用。當(dāng)程序員還沒有對特定用例進(jìn)行測試時,用戶可能會把錯誤引入系統(tǒng)中。在更復(fù)雜 的業(yè)務(wù)事務(wù)中,常見的是對各種計算系統(tǒng)進(jìn)行許多改變。如果在這種多步業(yè)務(wù)事務(wù)開始之 后但是在其結(jié)束之前對這些計算系統(tǒng)之一進(jìn)行改變,則不一致性將被引入到系統(tǒng)中。當(dāng)中 間改變涉及與業(yè)務(wù)事務(wù)中所進(jìn)行的其它改變的安全性不一致時,這特別有問題。
      [0004] 在談到數(shù)據(jù)庫事務(wù)過程中確保一致性時,有些數(shù)據(jù)庫系統(tǒng)具有優(yōu)點。這對于實現(xiàn) ACID事務(wù)的數(shù)據(jù)庫來說尤其是正確的,諸如由Oracle公司提供的數(shù)據(jù)庫系統(tǒng)。ACID代表 原子性、一致性、隔離性和持續(xù)性。在數(shù)據(jù)庫計算中,原子性意味著,如果在單個數(shù)據(jù)庫事務(wù) 中進(jìn)行了一系列改變,則或者所有改變都進(jìn)行或者這些改變都不進(jìn)行。換句話說,ACID事 務(wù)采取"全有或全無"方法。因而,數(shù)據(jù)庫系統(tǒng)可以確保在提交那個事務(wù)之前整個事務(wù)將是 成功的。
      [0005] 其它計算系統(tǒng)不具有由數(shù)據(jù)庫提供的一致性的優(yōu)勢。例如,基于LDAP(輕量級目 錄訪問協(xié)議)的系統(tǒng)不具有在提交改變之前的內(nèi)置的一致性檢查。Web服務(wù)和其它系統(tǒng)也 如它們所提供的那樣提交改變,即使那些系統(tǒng)使用數(shù)據(jù)庫來存儲信息。例如,業(yè)務(wù)事務(wù)所需 的改變之一可以是對web服務(wù)的更新請求。雖然web服務(wù)可以在現(xiàn)代數(shù)據(jù)庫中存儲數(shù)據(jù), 但是數(shù)據(jù)庫意識不到業(yè)務(wù)事務(wù)所需的任何其它改變,因為一次只有一個改變通過web服務(wù) 被請求,并且web服務(wù)僅僅是如它們被請求的那樣進(jìn)行改變。于是,數(shù)據(jù)庫進(jìn)而提交提供給 數(shù)據(jù)庫的每個事務(wù),盡管為了完成整個業(yè)務(wù)事務(wù)還需要其它步驟。
      [0006] 在以上提供的例子中,有可能其中一個操作將失敗。例如,業(yè)務(wù)事務(wù)可以需要采取 十三個單獨的步驟,并且第十二個步驟可能失敗,這造成關(guān)于系統(tǒng)的不一致。這種不一致在 單個系統(tǒng)中是有問題的,但是業(yè)務(wù)事務(wù)可能需要在多個系統(tǒng)上采取的步驟,這使問題復(fù)雜 化了。
      [0007] 對這個問題的一個潛在的解決辦法是為對其期望撤銷能力的每個系統(tǒng)或服務(wù)編 程專用的"撤銷"邏輯。但是,在變化的系統(tǒng)中維護(hù)硬編碼的撤銷邏輯是困難的,并且常常 導(dǎo)致錯誤。此外,勞力成本太高。編寫為了倒回失敗的業(yè)務(wù)事務(wù)而執(zhí)行所有必要操作的撤 銷邏輯很復(fù)雜,并且隨著需要由邏輯動態(tài)生成的操作數(shù)量的增加而變得非常難。此外,以這 種途徑實現(xiàn)的撤銷邏輯在每次服務(wù)改變時都變得無效,這導(dǎo)致需要重新編寫代碼。
      [0008] 所需要的是為在數(shù)據(jù)庫事務(wù)支持之外發(fā)生的業(yè)務(wù)事務(wù)提供撤銷功能性的通用撤 銷系統(tǒng)。

      【專利附圖】

      【附圖說明】
      [0009] 在附圖中:
      [0010] 圖1A說明了其中可以實現(xiàn)實施例的計算環(huán)境的邏輯框圖。
      [0011] 圖1B說明了示出實施例中作為中間方位于客戶端和服務(wù)器之間的撤銷引擎的邏 輯框圖。
      [0012] 圖2說明了實施例中撤銷引擎的邏輯框圖。
      [0013] 圖3說明了代表實施例中可以作為撤銷引擎的一部分來實現(xiàn)的撤銷邏輯的邏輯 框圖。
      [0014] 圖4說明了實施例中操作的分類。
      [0015] 圖5說明了實施例可以在其上實現(xiàn)的計算機(jī)系統(tǒng)。 具體實施例
      [0016] 描述了元數(shù)據(jù)驅(qū)動的撤銷。在以下描述中,為了解釋,闡述了眾多具體的細(xì)節(jié),以 便提供對本發(fā)明的透徹理解。但是,對本領(lǐng)域技術(shù)人員來說很顯然,本發(fā)明沒有這些具體細(xì) 節(jié)也可以實踐。在其它情況下,眾所周知的結(jié)構(gòu)和設(shè)備以框圖形式示出,以避免不必要地模 糊本發(fā)明。
      [0017] 實施例在本文中是根據(jù)以下大綱來描述的:
      [0018] 1.0 -般概述
      [0019] 2.0結(jié)構(gòu)和功能概述
      [0020] 3.0元數(shù)據(jù)驅(qū)動的撤銷
      [0021] 3.1元數(shù)據(jù)
      [0022] 3. 2撤銷日志
      [0023] 3. 3 小撤銷(undolet)
      [0024] 3. 4執(zhí)行元數(shù)據(jù)驅(qū)動的撤銷
      [0025] 3. 5撤銷策略
      [0026] 3. 6掛起撤銷引擎
      [0027] 4. 0實現(xiàn)機(jī)制-硬件概述
      [0028] 1. 0 -般概述
      [0029] 描述了元數(shù)據(jù)驅(qū)動的撤銷。在一個實施例中,元數(shù)據(jù)存儲庫存儲與操作關(guān)聯(lián)的元 數(shù)據(jù)。例如,元數(shù)據(jù)可以識別操作的類型,諸如操作是否是賦值器、獲得器、構(gòu)造器、析構(gòu)器、 加法器、清除器,或者其它類型的操作。與每個操作和/或操作類型關(guān)聯(lián)的屬性也存儲在元 數(shù)據(jù)中。每個操作與包括用于生成撤銷條目的指令的小撤銷關(guān)聯(lián)。小撤銷可以處理關(guān)于屬 于那類操作(例如,構(gòu)造器、析構(gòu)器)而不關(guān)于目標(biāo)系統(tǒng)的任何操作的任何調(diào)用。撤銷邏輯 基于元數(shù)據(jù)存儲庫中的元數(shù)據(jù)以及小撤銷在撤銷日志中生成條目。在一個實施例中,撤銷 條目是基于對目標(biāo)系統(tǒng)的查詢生成的。撤銷日志中的條目可以基于由系統(tǒng)截獲的請求中的 操作,并且可以包括用于與該操作關(guān)聯(lián)的屬性的屬性值。當(dāng)發(fā)出撤銷命令時,撤銷日志中與 特定業(yè)務(wù)事務(wù)關(guān)聯(lián)的指令被執(zhí)行。如果撤銷指令被成功地執(zhí)行,則業(yè)務(wù)事務(wù)中所涉及的系 統(tǒng)的狀態(tài)將關(guān)于與該業(yè)務(wù)事務(wù)關(guān)聯(lián)的對象返回事務(wù)之前的狀態(tài)。
      [0030] 2. 0結(jié)構(gòu)和功能概述
      [0031] 圖1A說明了其中可以實現(xiàn)實施例的計算環(huán)境的邏輯框圖。客戶端110代表能夠 作出請求或者以別的方式與別的計算系統(tǒng)或計算機(jī)過程交互的計算系統(tǒng)。客戶端110還可 以代表在計算設(shè)備上執(zhí)行的過程。例如,客戶端110和服務(wù)器130可以代表在同一計算設(shè) 備上運行的過程??蛻舳?10利用當(dāng)其被執(zhí)行時使一個或多個請求發(fā)送到服務(wù)器130的邏 輯和指令來配置。服務(wù)器130代表計算系統(tǒng)或者計算系統(tǒng)上配置為響應(yīng)于由其它過程、計 算設(shè)備或諸如客戶端110的其它實體所作的請求而根據(jù)服務(wù)器邏輯和所存儲的指令執(zhí)行 操作的過程。例如,客戶端110可以發(fā)送包括更新與財務(wù)會計系統(tǒng)關(guān)聯(lián)的用戶角色的請求 的更新請求。響應(yīng)于接收到這個請求,服務(wù)器130可以生成發(fā)布到數(shù)據(jù)庫的更新,以便根據(jù) 客戶的110提供的指令更新用戶的角色。
      [0032] 圖1B說明了示出實施例中作為中間方位于客戶端110和服務(wù)器130之間的撤銷 引擎120的邏輯框圖。撤銷引擎120截獲發(fā)出請求的實體和請求準(zhǔn)許實體,諸如分別為客 戶端110和服務(wù)器130,之間的通信。在一個實施例中,撤銷引起可以是服務(wù)器130的擴(kuò)充, 可以完全集成到服務(wù)器130中,或者可以在與服務(wù)器130獨立的計算設(shè)備上操作。在一個 實施例中,撤銷引擎可以是客戶端110的擴(kuò)充,可以完全集成到客戶端110中,或者可以在 與客戶端110獨立的計算設(shè)備上執(zhí)行。撤銷引擎120包括用于響應(yīng)于來自客戶端110的撤 銷請求而執(zhí)行撤銷操作的邏輯。例如,假設(shè)由客戶端110發(fā)送的、更新與財務(wù)會計系統(tǒng)關(guān)聯(lián) 的用戶角色的之前的請求已經(jīng)被服務(wù)器130執(zhí)行,則后續(xù)請求可以由客戶端110發(fā)送,以撤 銷由該前一請求所作的改變。撤銷引擎120從客戶端110接收請求,并且使用戶與它早先 的角色關(guān)聯(lián),就好像之前的請求從來沒有執(zhí)行過一樣。
      [0033] 圖2說明了實施例中撤銷引擎的邏輯框圖。撤銷引擎120包括輸入/輸出(I/O) 接口 210。I/O接口 210可以配置為耦合到網(wǎng)絡(luò)、用戶輸入設(shè)備,或者提供作為輸入212的 信號或數(shù)據(jù)的其它設(shè)備或裝置。I/O接口 210還可以配置為耦合到網(wǎng)絡(luò)、輸出顯示設(shè)備或者 能夠傳輸或顯示輸出214的傳輸介質(zhì)設(shè)備。輸入信號或數(shù)據(jù)212可以包括被撤銷引擎120 截獲的、從客戶端110到服務(wù)器130的請求。例如,輸入212可以包括改變與服務(wù)器130或 另一計算系統(tǒng)上的用戶關(guān)聯(lián)的角色的請求。該請求可以包括新的角色,以及要為其設(shè)置新 角色的用戶。輸入212還可以包括被撤銷引擎120截獲的、從服務(wù)器130到客戶端110的 響應(yīng)。例如,輸入212可以包括確認(rèn)角色已經(jīng)成功改變的消息。輸出214可以包括到服務(wù) 器130的消息。例如,被撤銷引擎120截獲的消息可以帶或不帶更改地轉(zhuǎn)發(fā)到服務(wù)器130。 輸出214還可以包括到客戶端110的響應(yīng),從而指示請求的成功或失敗,諸如設(shè)置或改變與 用戶關(guān)聯(lián)的角色的請求。在一個實施例中,其它輸出可以包括發(fā)送到網(wǎng)絡(luò)管理軟件的網(wǎng)絡(luò) 管理消息或用戶接口輸出。
      [0034] 撤銷引擎120包括配置為從I/O接口 210接收輸入212的I/O邏輯220。I/O邏 輯220可以配置為在非暫時性介質(zhì),諸如易失性或非易失性存儲介質(zhì),當(dāng)中存儲輸入212或 者與輸入212關(guān)聯(lián)的信息。例如,I/O邏輯220可以包括日志邏輯。在圖1所示的實施例 中,I/O邏輯220可通信地耦合到I/O接口 210、處理器270、會話管理邏輯230、撤銷邏輯 240以及元數(shù)據(jù)提取邏輯250。在其它實施例中,撤銷引擎的附加元件可以耦合到I/O邏輯 220。
      [0035] 在一個實施例中,會話管理邏輯230、撤銷邏輯240以及元數(shù)據(jù)提取邏輯250全耦 合到處理器270和數(shù)據(jù)庫260或其它儲存器。會話管理邏輯230配置為確定哪些請求彼此 關(guān)聯(lián)。例如,會話管理邏輯230可以在數(shù)據(jù)庫260中存儲請求和會話標(biāo)識符的日志,和/或 向撤銷邏輯240傳遞會話信息。會話標(biāo)識符可以由會話管理邏輯230指定,或者可以通過 從截獲的請求提取會話標(biāo)識信息來確定。在一個實施例中,會話信息可以在請求轉(zhuǎn)發(fā)到預(yù) 期的接收者之前從請求中除去。在一個實施例中,會話管理邏輯配置為管理請求的異步處 理。例如,當(dāng)撤銷引擎充當(dāng)中間方時,即使會話管理邏輯230必須在移動到下一個請求之前 等待來自對其作出請求的服務(wù)器的回調(diào)通知,會話管理邏輯230也對請求保持跟蹤并且按 它們被接收的次序來處理它們。如果超時或其它事件發(fā)生,則撤銷策略必須被調(diào)用,以便使 撤銷引擎120根據(jù)撤銷策略指令處理超時。例如,如果在一個操作過程中發(fā)生超時,則策略 可以使與會話關(guān)聯(lián)的所有操作都撤銷。
      [0036] 在一個實施例中,元數(shù)據(jù)提取邏輯250自動地從已經(jīng)擴(kuò)充成支持撤銷功能性的服 務(wù)提取元數(shù)據(jù)。例如,諸如Java注釋的備注或其它元數(shù)據(jù)可以包括在Mbean或其它對象中。 這些備注可以提供定義操作之間關(guān)系的關(guān)系信息。例如,諸如setName (person, name)的操 作被認(rèn)為是"賦值器",因為它設(shè)置值。對象可以具有用于檢查一個人的當(dāng)前名稱值的相關(guān) "獲得器" getName (person)。setName ()操作可以在元數(shù)據(jù)中被識別為"可撤銷的"操作, 并且操作類型可以設(shè)置成"獲得器",以指示利用那個操作撤銷操作的途徑是使用相同的操 作為這個人設(shè)置之前的值。
      [0037] 從服務(wù)收集到的元數(shù)據(jù)不必限于獲得器和賦值器。構(gòu)造器和析構(gòu)器,以及其它類 型的可撤銷操作,也可以被元數(shù)據(jù)識別。此外,在一個實施例中,只讀和不可撤銷的操作也 可以在元數(shù)據(jù)表262中定義。在一個實施例中,元數(shù)據(jù)存儲在諸如元數(shù)據(jù)表262的數(shù)據(jù)庫 表當(dāng)中。在一個實施例中,元數(shù)據(jù)表262包括從操作類型到由元數(shù)據(jù)提取邏輯250提取的 操作的映射。
      [0038] 元數(shù)據(jù)表262還包括識別每個操作的參數(shù)類型的數(shù)據(jù)。例如,操作可以具有不同 類型的參數(shù),諸如"KEY"參數(shù)、"SELECTOR"參數(shù)和"DATA"參數(shù)。KEY參數(shù)用于標(biāo)識。例 如,名稱為"SSN"的參數(shù)可以是KEY,因為它可以用于識別人。注意:關(guān)于同一個操作有零 個、一個或多個參數(shù)可以是KEY。SELECTOR參數(shù)與選擇關(guān)聯(lián)。例如,在操作setOffice(int officeNumber, String employeeNumber)中,名稱為 officeNumber 的參數(shù)用于選擇辦公室, 并且因此是選擇器。DATA數(shù)據(jù)用作數(shù)據(jù),并且可以包括任何數(shù)據(jù)值。
      [0039] 在一個實施例中,元數(shù)據(jù)表262可以手動或自動地,或者利用手動和動態(tài)操作的 組合,填充并更新。在其它實施例中,元數(shù)據(jù)可以利用任何數(shù)據(jù)文件類型或存儲系統(tǒng)以易失 性或非易失性計算機(jī)可讀存儲的任何形式存儲。例如,元數(shù)據(jù)可以存儲在共享硬盤陣列上 的扁平文件或XML文件中或者諸如存儲器506的存儲器中。
      [0040] 在一個實施例中,撤銷邏輯240配置為生成并執(zhí)行撤銷指令。撤銷邏輯接收所截 獲的對要執(zhí)行的操作的請求。例如,操作可以是更新與web服務(wù)應(yīng)用關(guān)聯(lián)的特定值的請求。 撤銷邏輯240從會話管理邏輯230接收會話信息,并且存儲對一個或多個會話的一系列撤 銷指令。在一個實施例中,撤銷邏輯240為由會話管理邏輯230識別出的每個會話存儲撤銷 指令。在一個實施例中,撤銷指令存儲在撤銷日志數(shù)據(jù)數(shù)據(jù)庫表264中。在其它實施例中, 撤銷指令存儲在存儲器中,諸如除數(shù)據(jù)庫260之外的易失性存儲器或非易失性存儲器。當(dāng) 被一個或多個處理器執(zhí)行時,為會話生成的撤銷指令使得被對應(yīng)會話中的操作改變的值被 撤銷。例如,如果與會話關(guān)聯(lián)的撤銷指令成功執(zhí)行,則被該會話改變的值將返回其原始值。
      [0041] 在其它實施例中,可以添加圖2中未示出的元件,并且計算系統(tǒng)的元件的配置可 以與圖2中所示的配置不同。例如,I/O邏輯220可以結(jié)合到撤銷邏輯240中,并且數(shù)據(jù)庫 260可以遠(yuǎn)程連接到撤銷引擎220。處理器270可以包括形式為一個或多個中央處理單元 (CPU)的硬件邏輯,其中每個CPU都具有一個或多個核。
      [0042] 圖3說明了代表實施例中可以實現(xiàn)為撤銷引擎的一部分的撤銷邏輯240的邏輯框 圖。具體而言,圖3說明了其中為Mbean服務(wù)器和SOAP服務(wù)器提供撤銷能力的實施例。一 般性的撤銷引擎310配置為確定哪些操作被哪個服務(wù)執(zhí)行。例如,業(yè)務(wù)事務(wù)可以被具有標(biāo) 識符"k6oA0xCWZh"的會話識別。但是,與會話k6oA0xCWZh關(guān)聯(lián)的有些操作可以被Mbean 服務(wù)器執(zhí)行,而與該同一會話關(guān)聯(lián)的其它操作可以由SOAP服務(wù)器執(zhí)行。一般性的撤銷引擎 310生成,如果接收到撤銷請求,用于識別指令應(yīng)當(dāng)發(fā)送到哪個實體的撤銷指令元數(shù)據(jù)。代 理Mbean服務(wù)器320和SOAP路由器330每個都生成與每個會話關(guān)聯(lián)的、特定于服務(wù)的撤銷 指令,并且把每條指令與一般性的撤銷引擎310生成的定序信息關(guān)聯(lián)。如以上所討論的,在 一個實施例中,撤銷邏輯240生成并執(zhí)行指令。更具體而言,在一個實施例中,代理Mbean 服務(wù)器320和SOAP路由器330生成并執(zhí)行這種指令。如以上所討論的,在一個實施例中, 撤銷邏輯240接收請求。更具體而言,在一個實施例中,一般性的撤銷引擎310接收這種請 求。如以上所討論的,在一個實施例中,撤銷邏輯240接收會話信息。更具體而言,在一個 實施例中,一般性的撤銷引擎310接收這種會話信息。如以上所討論的,在一個實施例中, 撤銷邏輯240存儲撤銷指令。更具體而言,在一個實施例中,代理Mbean服務(wù)器320和SOAP 路由器330存儲這種撤銷指令。
      [0043] Mbean服務(wù)器和其它適配器執(zhí)行發(fā)布到它們的命令。此外,這些適配器用于1)生 成階段對數(shù)據(jù)的收集,及2)實際撤銷階段執(zhí)行操作或收集數(shù)據(jù)(為了驗證)。
      [0044] 3.0元數(shù)據(jù)驅(qū)動的撤銷
      [0045] 3. 1元數(shù)據(jù)
      [0046] 把資源邏輯映射到值的元數(shù)據(jù)存儲在元數(shù)據(jù)存儲庫中。在一個實施例中,元數(shù)據(jù) 存儲庫是數(shù)據(jù)庫260,并且元數(shù)據(jù)存儲在數(shù)據(jù)庫表元數(shù)據(jù)262中。元數(shù)據(jù)可以由元數(shù)據(jù)提取 邏輯250自動添加到元數(shù)據(jù)存儲庫或者從中除去。在一個實施例中,元數(shù)據(jù)可以通過命令 行操作、基于web的工具的使用或者通過把諸如XML文件的描述資源元數(shù)據(jù)的文件拷貝到 元數(shù)據(jù)存儲庫來手動地添加到元數(shù)據(jù)存儲庫或者從中除去。在一個實施例中,存儲在元數(shù) 據(jù)存儲庫中的每個資源-元數(shù)據(jù)對象都提供用于操作的元數(shù)據(jù)和其它元數(shù)據(jù)。資源元數(shù)據(jù) 可以由以下一個或多個元素組成:操作元數(shù)據(jù)、參數(shù)元數(shù)據(jù)、異常元數(shù)據(jù)、操作到操作的關(guān) 系,以及類型元數(shù)據(jù),等等。
      [0047] 操作元數(shù)據(jù)是與給定操作關(guān)聯(lián)的元數(shù)據(jù),并且提供操作的名稱。操作的名稱可以 用于通過名稱查找用于操作的元數(shù)據(jù)。每個操作元數(shù)據(jù)對象都與一個基本種類的屬性關(guān) 聯(lián)。在一個實施例中,這個屬性將具有以下三個值當(dāng)中的一個:{READ-ONLY, UND0ABLE,NOT -UND0ABLE}。如果操作的基本種類是READ-ONLY,則這個操作的執(zhí)行沒有副作用并且不造成 修改。如果操作的基本種類是UND0ABLE,則這個操作的執(zhí)行可以被撤銷。如果操作的基本 種類是N0T-UND0ABLE,則這個操作的執(zhí)行會造成修改,但是這些不能被撤銷。圖4說明了 實施例中操作的分類,示出有些操作是只讀,而其它操作進(jìn)行修改。修改操作不總是可撤銷 的,但是可撤銷的操作以及撤銷它們需要什么樣的操作可以在元數(shù)據(jù)中描述。
      [0048] 在一個實施例中,與操作關(guān)聯(lián)的附加元數(shù)據(jù)可以用來查找用于操作的元數(shù)據(jù)。 例如,操作的屬性的個數(shù)和類型可以用來查找與多態(tài)操作關(guān)聯(lián)的元數(shù)據(jù)。多態(tài)操作不能 僅通過名稱來識別,因為它們代表具有相同名稱的不同操作。多態(tài)操作的一個例子是 updatePersonlnfo,具有以下不同的操作:updatePersonInfo (String ssn, String name) 和 updatePersonlnfo (String ssn, String name, String address) 〇 在一個實施例中,米取 可以按位置被識別的變元陣列的操作仍然可以與元數(shù)據(jù)關(guān)聯(lián)。
      [0049] 在一個實施例中,每個操作可以與一組參數(shù)-元數(shù)據(jù)對象關(guān)聯(lián)。參數(shù)元數(shù)據(jù)是描 述操作的參數(shù)的元數(shù)據(jù)。每個參數(shù)-元數(shù)據(jù)對象具有由串提供的名稱屬性。該名稱屬性 的值提供參數(shù)的名稱。類型屬性也由串提供。此外,每個參數(shù)-元數(shù)據(jù)對象可以具有由串 提供的目的屬性。雖然在不同的實施例可以使用其它的串值,但是在一個實施例中使用值 "KEY"、"SELECTOR"或"DATA"。在其它實施例中,參數(shù)可以由位置而不是由名稱來識別。
      [0050] 在一個實施例中,異常元數(shù)據(jù)也可以提供。異常元數(shù)據(jù)可以用來定義在遇到異常 的情況下可以采取的動作。例如,如果業(yè)務(wù)事務(wù)或其它事務(wù)正被撤銷,并且特定的操作因為 中間操作已經(jīng)改變了值而造成異常,則幾個潛在的動作可以呈現(xiàn)給撤銷請求者。一個選項 可以是繼續(xù)撤銷操作,而不把值改變回事務(wù)之前的狀態(tài),另一個選項可以是繼續(xù)撤銷操作, 同時把值改變回事務(wù)之前的狀態(tài)。另一個選項可以是完全停止撤銷過程。其它選項可以是 可用的,如在異常元數(shù)據(jù)中定義的。
      [0051] 異常元數(shù)據(jù)在撤銷日志條目的生成過程中也可以使用。例如,如果更新將要對目 標(biāo)系統(tǒng)進(jìn)行,則撤銷引擎120將準(zhǔn)備要包括在撤銷日志中的條目,但是將或者不放在撤銷 日志中或者把它暫時放在那里。接下來,如果在對目標(biāo)系統(tǒng)執(zhí)行實際操作時發(fā)生異常,則撤 銷引擎120必須確定做什么。缺省地,如果發(fā)生異常,則撤銷引擎120或者1)不把撤銷條 目放到撤銷日志中,或者2)從撤銷日志中除去條目。如果發(fā)生異常,則可能的場景是什么 都沒發(fā)生。而且,異常會是不特定于操作的一般性異常,諸如授權(quán)拒絕。因此,如果任何事 情造成對目標(biāo)服務(wù)器的操作失敗,則缺省的動作是不存儲條目,因為缺省的解釋是什么都 沒發(fā)生,因此沒有什么要撤銷。
      [0052] 但是,在有些情形下,異常出現(xiàn),但是或者a)異常是警告,但實際的更新DID發(fā)生, 因此條目應(yīng)當(dāng)放到撤銷日志中。為了確保這種情況發(fā)生,某些異常元數(shù)據(jù)被存儲,以指示撤 銷引擎120這個異常是警告,而不意味著更新失敗。通過用這個元數(shù)據(jù)通知,撤銷引擎120 將把條目放到撤銷日志中(或者,在一個實施例中,把它留在那里)。
      [0053] 異常元數(shù)據(jù)還可以用來管理部分更新。例如,用于指定角色的操作可以用來請求 要指定給用戶的三個角色,這導(dǎo)致三個所請求角色中只有兩個的準(zhǔn)許。撤銷引擎120需要 一個計劃,這個計劃將允許其檢查返回的異常,并且從那個異常確定實際指定了什么角色。 艮P,如果異常不具有列舉實際指定的角色的有效載荷,則撤銷引擎120可以發(fā)布確定假定 被指定的角色是否被實際指定的查詢。如果有任何角色缺失,則可以由撤銷引擎120推斷 哪些角色未被指定,并且撤銷引擎可以更改用于撤銷條目的有效載荷。例如,如果角色A、B 和C要指定,但用戶只有角色A和C,則可以推斷出B沒有被指定。由此,撤銷條目必須被更 改,以反映這種現(xiàn)實。
      [0054] 名稱圖在一個實施例中用來允許關(guān)連具有相同意義但不同名稱的形式參數(shù)。例 如,setJobCode(String username, int jobCode)和 getJobCode(String name)可以同時 都存在。形式參數(shù)"username"和"name"不相同,但是它們可以具有相同的意義。使用形 式為〈操作-名稱.名稱>==〈操作-名稱.名稱〉的名稱圖。利用以上的例子,名稱 圖將是setJobCode. username = getJobCode. name。名稱的處理是很重要的,因為在許多情 況下由撤銷指令組成的撤銷計劃將需要關(guān)聯(lián)一個操作的實際變元和另一個的變元。撤銷計 劃需要知道名稱圖,使得,如果需要的話,它可以匹配具有不同名稱的變元。名稱圖允許這 么做。
      [0055] 在一個實施例中,元數(shù)據(jù)可以用來確保,即使在產(chǎn)品升級之后,基于與產(chǎn)品的歷史 版本關(guān)聯(lián)的操作生成的撤銷日志也可以用來撤銷業(yè)務(wù)事務(wù)。例如,在一個實施例中,變換元 數(shù)據(jù)可以提供從舊操作標(biāo)識符到新操作標(biāo)識符的映射。防升級撤銷日志的其它途徑也可以 使用。例如,在一個實施例中,撤銷日志可以被升級模塊重寫,使得與升級后的產(chǎn)品關(guān)聯(lián)的 條目引用與升級后的產(chǎn)品關(guān)聯(lián)的操作。在一個實施例中,條目可以包括元數(shù)據(jù)。例如,條目 可以包括把條目標(biāo)記為受目標(biāo)系統(tǒng)或其它中間系統(tǒng)的升級影響的條目的元數(shù)據(jù)。
      [0056] 3. 2撤銷日志
      [0057] 元數(shù)據(jù)用來生成撤銷日志條目,在本文中也稱為撤銷指令,它顛倒作為事務(wù),例如 業(yè)務(wù)事務(wù),一部分執(zhí)行的操作。撤銷日志是有序的條目列表。如在本文中所使用的,術(shù)語"條 目"意味著指可識別的一組數(shù)據(jù),并且可以包括任何數(shù)量的信息。例如,條目可以包括元數(shù) 據(jù)、識別條目開始或結(jié)束的條目邊界標(biāo)記器,或者識別與特定業(yè)務(wù)事務(wù)關(guān)聯(lián)的一組一個或 多個條目的開始或結(jié)束的業(yè)務(wù)事務(wù)邊界標(biāo)記器。在一個實施例中,條目可以是撤銷條目或 驗證條目。撤銷條目的目的是執(zhí)行作為整個撤銷動作集合的一部分的某個更新。驗證器條 目的存在是為了驗證數(shù)據(jù)是如Oracle倒回所預(yù)期的。如果數(shù)據(jù)沒被驗證,則發(fā)生寫沖突。 在一個實施例中,撤銷條目采取以下形式:
      [0058] {目標(biāo)-信息,操作-名稱,[變元]}
      [0059] 在一個實施例中,驗證條目可以在執(zhí)行驗證步驟的時候被標(biāo)記,以便對與特定業(yè) 務(wù)事務(wù)關(guān)聯(lián)的驗證進(jìn)度保持跟蹤。在一個實施例中,撤銷條目可以在執(zhí)行撤銷步驟的時候 被標(biāo)記,以便對與特定業(yè)務(wù)事務(wù)關(guān)聯(lián)的撤銷進(jìn)度保持跟蹤。在發(fā)生需要恢復(fù)的故障的情況 下,撤銷條目標(biāo)記可以被撤銷引擎120檢查,以確定由于故障而未完成的撤銷操作的狀態(tài)。
      [0060] 驗證條目也可以用于恢復(fù)目的。在一個實施例中,驗證條目可以用來確定值是否 與一個或多個操作的成功執(zhí)行一致(即,"預(yù)期"狀態(tài))。例如,可以存在指示對X來說預(yù)期 值為"3"但找到的值為"2"的驗證,并且"2"是用于撤銷動作條目本身的值。另一方面,如 果當(dāng)前的值是值"2",則我們可以合理地得出結(jié)論,上次更新失敗了。如果條目與成功不一 致,則撤銷策略或管理員動作可以用來解決這個問題,通過例如把該值設(shè)置成正確的值。
      [0061] 目標(biāo)-信息字段中的數(shù)據(jù)可以被認(rèn)為是不透明的二進(jìn)制大對象(blob)。與目標(biāo) 類型關(guān)聯(lián)的適配器可以取得目標(biāo)-信息中的數(shù)據(jù),連同操作名稱-名稱和變元,并且執(zhí)行動 作。目標(biāo)-信息可以是實際的對象引用,它可以識別JDBC連接,或者提供關(guān)于目標(biāo)的其它 信息。目標(biāo)-信息可以是允許目標(biāo)被識別和訪問的任何內(nèi)容。為了讀/寫目的,撤銷邏輯 使用這個目標(biāo)-信息來訪問目標(biāo)。在一個實施例中,撤銷引擎120依賴于與目標(biāo)關(guān)聯(lián)的適 配器,諸如代理Mbean服務(wù)器320和SOAP路由器330,來與目標(biāo)接口。
      [0062] 撤銷日志條目可以添加到撤銷日志數(shù)據(jù)表264,以創(chuàng)建虛擬撤銷列表。在一個實施 例中,撤銷日志條目可以添加到該列表的末尾。在這種情況下,如果期望逆序恢復(fù),則撤銷 指令的執(zhí)行是從列表的末尾到列表的開始執(zhí)行的。換句話說,在一個實施例中,操作是以它 們最初應(yīng)用的相反的次序撤銷的。在另一個實施例中,操作是同時撤銷的,或者以與它們最 初執(zhí)行的次序的逆序不同的次序執(zhí)行。
      [0063] 撤銷指令由撤銷邏輯240利用所提供的操作-名稱和變元執(zhí)行。具體而言,適配 器用來為每種服務(wù)執(zhí)行指令。適配器的例子是代理Mbean服務(wù)器320、S0AP路由器330,或 者諸如代理LDAP服務(wù)器的其它代理。每個適配器在執(zhí)行每條指令后都把運行時間返回到 一般性的撤銷引擎310。
      [0064] 驗證器條目可以添加到撤銷日志,以允許撤銷邏輯240在執(zhí)行撤銷指令的同時確 定被改變的對象的當(dāng)前狀態(tài)是否與初始改變之后緊接著的對象狀態(tài)一致。換句話說,在被 執(zhí)行時,驗證器條目告訴撤銷邏輯240后續(xù)的改變是否已經(jīng)對對象作出。對于驗證器條目, 動作是對適配器執(zhí)行的并且將返回值。驗證條目保留由"預(yù)期-值"表示的預(yù)期的值。所提 供的比較器用來比較實際值(從適配器返回的值)與預(yù)期的值。如果根據(jù)比較器發(fā)現(xiàn)這些 值相等,則預(yù)期的值得以驗證,并且沒有寫沖突。如果不是這樣,則存在寫沖突。例如,如果 一個值為"藍(lán)"的屬性隨后被設(shè)置成"紅",則在撤銷日志中生成驗證器條目。在被執(zhí)行時, 如果該值已經(jīng)被后續(xù)操作改變,則該驗證器條目允許撤銷引擎120在把該值設(shè)置回"藍(lán)"之 前驗證該值為"紅"。在本發(fā)明的實施例中,更具體而言,Mbean服務(wù)器320和SOAP路由器 330是撤銷邏輯240中確定被改變的對象的當(dāng)前狀態(tài)是否與作出初始改變之后緊接著的對 象狀態(tài)一致的部件。
      [0065] 以下偽代碼代表可以在一個實施例中使用的撤銷-日志執(zhí)行策略:
      [0066] From撤銷日志結(jié)束to其開始 Begin
      [0067] Entry =獲得下一個條目 If沒有條目 退出循環(huán) If條目是驗證器 begin 評估該驗證器. If通過比較發(fā)現(xiàn)預(yù)期的值不等于實際的值 發(fā)生撤銷異常 end if條目是動作 begin 執(zhí)行該動作 檢查剛執(zhí)行的動作的狀態(tài) If動作沒有成功執(zhí)行 發(fā)生撤銷異常 end end
      [0068] 3· 3小撤銷
      [0069] 在一個實施例中,具有可撤銷(UND0ABLE)基本種類的每個操作-元數(shù)據(jù)都與一個 "小撤銷"關(guān)聯(lián)。小撤銷是能夠撤銷與特定操作類型關(guān)聯(lián)的操作的對象。例如,小撤銷可以 能夠撤銷是"賦值器"操作的操作。在一個實施例中,有些小撤銷能夠撤銷具體的操作,并 且不與操作類型關(guān)聯(lián)。在另一個實施例中,小撤銷可以與某個操作類型的操作子集關(guān)聯(lián), 諸如僅具有目標(biāo)和單個變元(或參數(shù))的"賦值"操作。在這種情況下,多個小撤銷可以與 "賦值器"操作類型關(guān)聯(lián)。撤銷操作的動作是由關(guān)聯(lián)的小撤銷中的邏輯執(zhí)行的。在一個實施 例中,如果操作不與小撤銷關(guān)聯(lián),則該操作不能被撤銷。小撤銷是由它們的小撤銷標(biāo)識符識 別的。例如,名稱可以用作小撤銷標(biāo)識符。由此,用于名稱為setColor的操作的操作-元 數(shù)據(jù)可能具有"賦值器"的小撤銷標(biāo)識符。諸如用于類Person的Person (String name)的 Java構(gòu)造器可以具有"構(gòu)造器"的小撤銷標(biāo)識符。
      [0070] 小撤銷是在撤銷邏輯240中實現(xiàn)的,并且在一個實施例中可以單獨地存儲在諸如 數(shù)據(jù)庫260的小撤銷存儲庫中。當(dāng)存在對可撤銷的操作的調(diào)用時,由那個操作在元數(shù)據(jù)存 儲庫中其關(guān)聯(lián)的操作元數(shù)據(jù)引用的小撤銷被調(diào)用。每個小撤銷都充當(dāng)抽象層,把與小撤銷 的操作類型關(guān)聯(lián)的操作映射到服務(wù)所需的實際操作。例如,在一個實施例中,小撤銷把操作 setColorO變成稱為setXXXO的一般性的"賦值"操作。這種抽象是可能的,因為所有賦 值器操作都具有相似的性質(zhì),并且因此可以被撤銷邏輯240以相同的方式對待。
      [0071] 小撤銷提供對某個目標(biāo)采取帶變元的動作并且生成適當(dāng)?shù)某蜂N條目并驗證用于 那個動作的條目的能力。撤銷計劃可以把零個、一個或多個條目生成到撤銷日志中。條目 的數(shù)量,以及那些條目的類型(動作對驗證)完全依靠用于給定操作類型(例如,查詢器、 賦值器、構(gòu)造器、析構(gòu)器,等等)的撤銷計劃。每個撤銷計劃可以獲得對用于給定目標(biāo)的元 數(shù)據(jù)的訪問。利用這種元數(shù)據(jù),撤銷計劃可以尋求生成適當(dāng)?shù)某蜂N條目。此外,查詢可以用 來收集對小撤銷會有用的數(shù)據(jù)。以下是小撤銷的一個例子:
      [0072] rewind. addEntryToUndoLog (metadatald,// 用于查找元數(shù)據(jù)的鍵 undoLogID, //用于撤銷日志的鍵 "setter", //識別操作的類型
      [0073] //從而允許查找實際的撤銷計劃 " setX",//開始調(diào)用操作 args,//該操作的變元 adapter, //要使用的適配器 targetlnfo //識別目標(biāo)的信息);
      [0074] 對于在以上例子中使用的"賦值器"操作類型,撤銷計劃可以查找用于setX操作 的"獲得器"字段的值。這個數(shù)據(jù)將在用于這個目標(biāo)類型的元數(shù)據(jù)中找到。獲得器字段將 具有值"getX",沒有變元。然后,撤銷計劃將調(diào)用關(guān)于適配器的命令,該命令提供目標(biāo)信息、 操作("getX")和變元(無)。這個對適配器的調(diào)用會例如返回零。然后,這個撤銷計劃 會查找用于這個操作的"賦值器";即,它可以查找它應(yīng)當(dāng)使用什么操作來寫入用于撤銷條 目的值。在這里,用于操作"setX"的元數(shù)據(jù)可以指示賦值器是"setX"本身,因此撤銷條目 將利用目標(biāo)-信息"setX"創(chuàng)建。因而,對于可撤銷的撤銷引擎120的每種類型的操作,存 在專用于生成用于那個動作的適當(dāng)撤銷條目(或多個條目)的小撤銷。小撤銷的實際計劃 可以相對簡單,如由以上對賦值器的小撤銷的描述所說明的,或者可以生成更復(fù)雜的計劃。 保持不變的是小撤銷提供使用元數(shù)據(jù)、數(shù)據(jù)收集和決策可以為那個動作適當(dāng)?shù)厣闪銈€、 一個或多個撤銷條目的計劃。
      [0075] 3. 4執(zhí)行元數(shù)據(jù)驅(qū)動的撤銷
      [0076] 在一個實施例中,諸如數(shù)據(jù)庫260的元數(shù)據(jù)存儲庫存儲與操作關(guān)聯(lián)的元數(shù)據(jù)。例 如,元數(shù)據(jù)可以識別操作的類型,諸如操作是否是賦值器、獲得器、構(gòu)造器、析構(gòu)器、加法器、 去除器,還是其它類型的操作。與每個操作關(guān)聯(lián)的屬性也存儲在元數(shù)據(jù)中。
      [0077] 在一個實施例中,每個操作都與包括用于生成撤銷條目的指令的小撤銷關(guān)聯(lián)。在 一個實施例中,小撤銷可以處理對屬于操作類型或操作分類而不關(guān)于目標(biāo)系統(tǒng)的任何操作 的調(diào)用。例如,用于析構(gòu)器的小撤銷將對任何析構(gòu)器工作,包括用于Mbean的析構(gòu)器和用于 web服務(wù)的析構(gòu)器。例如,用于析構(gòu)器的小撤銷包括用于重新創(chuàng)建那個對象并且適當(dāng)?shù)卦O(shè)置 其屬性的指令。例如,如果刪除了名稱為"John"且頭發(fā)顏色為"灰色"的人對象,并且這個 刪除操作具有操作類型"析構(gòu)器",則與操作類型"析構(gòu)器"關(guān)聯(lián)的小撤銷可以收集這些屬性 的兩個值,連同關(guān)于人對象設(shè)置它們的適當(dāng)操作,然后小撤銷可以生成重新創(chuàng)建人對象的 撤銷條目。如果曾經(jīng)以逆序執(zhí)行過,則人對象將首先被創(chuàng)建,然后指定屬性值,從而完全恢 復(fù)被刪除的對象。用于操作類型"賦值器"的小撤銷還使得對那種操作類型"賦值器"的任 何操作生成條目。賦值器小撤銷包括對賦值器操作的引用,并且包括代表為其改變值的對 象的屬性,以及代表改變之前那個對象的值的另一個屬性。在一個實施例中,賦值器小撤銷 可以在元數(shù)據(jù)存儲庫中查找用于賦值器操作的元數(shù)據(jù),從而允許賦值器小撤銷識別可以用 來查詢屬性當(dāng)前值的相關(guān)聯(lián)的獲得器操作。然后,如所需要的,賦值器小撤銷將使用附加的 元數(shù)據(jù)來確定什么變元(如果有的話)將在這個查詢中被使用。然后,這個構(gòu)造好的查詢將 利用適配器來執(zhí)行,以提取這個當(dāng)前值。這個查詢的結(jié)果將提供這個屬性的當(dāng)前值。然后, 賦值器小撤銷將在元數(shù)據(jù)存儲庫中查找用于賦值器操作的元數(shù)據(jù),從而確定什么操作將用 來設(shè)置這個值。然后,賦值器小撤銷將在撤銷日志中生成適當(dāng)?shù)臈l目,諸如首先生成撤銷條 目,然后生成驗證條目。
      [0078] 在一個實施例中,撤銷邏輯240配置為基于元數(shù)據(jù)存儲庫中的元數(shù)據(jù)以及小撤 銷在撤銷日志中生成一個或多個條目。撤銷日志中的條目可以基于被系統(tǒng)截獲的第一 請求中的操作,并且可以包括用于與該操作關(guān)聯(lián)的第一屬性的第一屬性值。例如,用于 setColor(userl23,red)的小撤銷是賦值器小撤銷,在一個實施例中它可以是一般性的賦 值器小撤銷。利用小撤銷中的指令以及元數(shù)據(jù),撤銷邏輯240生成為用戶123存儲當(dāng)前顏 色值(例如,藍(lán)色)的條目,并且,如果顏色當(dāng)前被設(shè)置成紅色,則生成用于恢復(fù)到那個顏色 的指令。即使顏色已經(jīng)變成另一種顏色,諸如黃色,撤銷策略也可以允許把顏色變回藍(lán)色。 舊的顏色是在新的顏色設(shè)置之前通過使用獲得器,諸如getColor(userl23),確定的。在這 種情況下,驗證器將驗證getColor (Userl23)返回"紅色",并且撤銷日志中用于撤銷該操 作的指令可以看起來像setColor (user 123, blue)。如果撤銷策略指示驗證器應(yīng)當(dāng)被忽略, 則驗證器可以被撤銷引擎120忽略。在本發(fā)明的實施例中,更具體而言,Mbean服務(wù)器320 和SOAP路由器330是撤銷邏輯240中配置為基于元數(shù)據(jù)存儲庫中的元數(shù)據(jù)以及小撤銷在 撤銷日志中生成一個或多個條目的部件。
      [0079] 以上段落中描述的偽代碼可以用實現(xiàn)相同任務(wù)的任何指令代替。例如,在一個實 施例中,調(diào)用web服務(wù)并且識別要驗證的值和要設(shè)置的值的SQL查詢或URL可以用作撤銷 日志條目。在一個實施例中,這些指令是響應(yīng)于在撤銷引擎120接收到撤銷getColorO操 作的請求而執(zhí)行的。
      [0080] 當(dāng)操作與相同的業(yè)務(wù)事務(wù)關(guān)聯(lián)時,會話在一個實施例中用來把操作集合到一起。 例如,第一業(yè)務(wù)事務(wù)可以包括20個操作并且第二業(yè)務(wù)事務(wù)可以包括15個操作。這些操作可 以在不同的目標(biāo)系統(tǒng)或服務(wù)器,諸如服務(wù)器130,之上執(zhí)行。每個操作是作為還識別會話的 請求的一部分接收的。例如,請求可以包括一個或多個要執(zhí)行的操作,連同會話標(biāo)識符值。 在一個實施例中,即使撤銷引擎120在與第一業(yè)務(wù)事務(wù)關(guān)聯(lián)的兩個其它請求之間接收到與 第二業(yè)務(wù)事務(wù)關(guān)聯(lián)的請求,第一業(yè)務(wù)事務(wù)和第二業(yè)務(wù)事務(wù)也將具有不同的會話標(biāo)識符。即, 請求被接收的次序不一定影響請求和請求中的操作與其關(guān)聯(lián)的會話。在一個實施例中,單 個請求可以識別由不同的對應(yīng)會話標(biāo)識符關(guān)聯(lián)的多個操作。
      [0081] 在一個實施例中,與相同業(yè)務(wù)事務(wù)關(guān)聯(lián)的不同操作不一定與同一個目標(biāo)系統(tǒng)關(guān) 聯(lián)。撤銷日志是用于撤銷指令的存儲機(jī)制,并且可以包括多組指令。每組指令都可以與會 話關(guān)聯(lián)。每組撤銷指令可以包括針對多個目標(biāo)系統(tǒng)的指令或條目。當(dāng)撤銷命令被調(diào)用時, 即使指令跨多個目標(biāo)系統(tǒng),與該會話關(guān)聯(lián)的所有指令也都可以被執(zhí)行。在一個實施例中,與 第一會話關(guān)聯(lián)的一組指令的執(zhí)行不造成與不同會話關(guān)聯(lián)的指令的執(zhí)行。
      [0082] 在一個實施例中,會話管理邏輯230管理由客戶端提供的會話信息,其中客戶端 可以控制業(yè)務(wù)事務(wù)的邊界。換句話說,客戶端可以作出全都是同一業(yè)務(wù)事務(wù)的部分的幾個 請求。會話管理邏輯通過讀取與這些請求關(guān)聯(lián)的會話標(biāo)識信息來確定業(yè)務(wù)事務(wù)的邊界。會 話標(biāo)識符,以及會話邊界標(biāo)識符,在一個實施例中可以用來識別哪些請求與特定的會話關(guān) 聯(lián)。此外,會話中的每個請求可以包括序列號標(biāo)識符,并且邊界請求可以包括定義可以被撤 銷引擎120接收或者應(yīng)當(dāng)已經(jīng)被其接收的請求的數(shù)量或類型的附加元數(shù)據(jù)。通過識別請求 與哪個會話關(guān)聯(lián),基于該請求生成的撤銷指令可以放在合適的撤銷日志中。然后,通過識別 僅特定的會話,客戶端可以請求該會話被撤銷。
      [0083] 如以上所討論的,關(guān)于維護(hù)撤銷日志,實施例可以定義指示業(yè)務(wù)操作完成的處理 的撤銷日志條目。例如,賦值器小撤銷可以生成把變量恢復(fù)成其之前的值的動作,然后還添 加驗證器條目;撤銷引擎隨后將把業(yè)務(wù)-操作-邊界(business-operation-boundary)條 目添加到撤銷日志,表示業(yè)務(wù)操作已經(jīng)關(guān)于維護(hù)撤銷日志而完全被處理了。這個業(yè)務(wù)-操 作-邊界條目表示單個業(yè)務(wù)操作的這些條目和與任何其它業(yè)務(wù)操作相關(guān)的那些條目之間 的邊界。
      [0084] 類似地,實施例可以定義要包括在撤銷日志中的業(yè)務(wù)-事務(wù)-邊界條目。這個業(yè) 務(wù)-事務(wù)-邊界條目指示業(yè)務(wù)操作的所有操作已經(jīng)錄入到撤銷日志中了。撤銷日志中表示 業(yè)務(wù)事務(wù)完成的信息會是有用的,尤其是在從諸如斷電的嚴(yán)重故障中恢復(fù)時。如果檢測到 不具有業(yè)務(wù)-事務(wù)-邊界條目的撤銷日志,則業(yè)務(wù)-事務(wù)-邊界條目的缺失指示整個業(yè)務(wù) 事務(wù)過程沒有成功完成。然后,可以作出適當(dāng)?shù)臎Q定,基于這個信息,諸如決定撤銷未完成 的業(yè)務(wù)事務(wù)的所有改變。
      [0085] 這里是具有這些附加類型條目的撤銷日志的一個例子。每個條目都用一個數(shù)字標(biāo) 記,使得文字可以指這個撤銷日志中的各個條目。
      [0086] {動作[1]驗證器[2]操作-邊界[3]動作[4]動作[5]動作[6]驗證器[7]操 作-邊界[8]業(yè)務(wù)-事務(wù)[9]}
      [0087] 業(yè)務(wù)-事務(wù)[9]的存在顯示業(yè)務(wù)事務(wù)已經(jīng)完成。現(xiàn)在假定管理員想個別地撤銷最 后一個業(yè)務(wù)操作的動作。實施例可以提供一次一個地撤銷業(yè)務(wù)操作的能力。經(jīng)以上的撤銷 日志,本發(fā)明的實施例可以利用驗證器[7]驗證系統(tǒng)狀態(tài),然后應(yīng)用動作[6]、動作[5]和動 作[4]的動作。操作-邊界[3]的存在表示用于不同業(yè)務(wù)操作的條目的開始,并且因此撤 銷引擎已經(jīng)撤銷了單個業(yè)務(wù)操作的更新。如果期望,則撤銷引擎可以通過首先利用驗證器
      [2]驗證系統(tǒng)狀態(tài)然后應(yīng)用動作[1]繼續(xù)去撤銷第一業(yè)務(wù)操作的更新。
      [0088] 這個例子說明總體上撤銷日志中多清楚的邊界允許從最后一個業(yè)務(wù)操作到倒數(shù) 第二個等等一次一個地撤銷個別業(yè)務(wù)操作的效果。在一個實施例中,其它邊界或標(biāo)記可以 在撤銷日志中實現(xiàn)。例如,"保存點"可以添加到撤銷日志。保存點可以添加,以允許依靠那 個保存點執(zhí)行撤銷操作。這對于測試目的是特別有用的。
      [0089] 在一個實施例中,客戶端可以對撤銷會話具有明確的或者隱含的控制。例如,如果 使用BPEL(業(yè)務(wù)過程執(zhí)行語言)引擎,則過程的開始可以隱含地開始撤銷會話。如果撤銷 命令在BPEL過程的上下文內(nèi)部發(fā)布,則整個過程將被撤銷(或者嘗試被撤銷)。如果使用 客戶端API,則客戶端將提供開始撤銷會話、結(jié)束撤銷會話而不執(zhí)行撤銷操作以及在撤銷會 話內(nèi)執(zhí)行撤銷操作的基礎(chǔ)設(shè)施。
      [0090] 在一個實施例中,撤銷引擎120還使用會話邏輯230來管理客戶端和服務(wù)器之間 的異步請求。首先,客戶端向撤銷引擎120發(fā)消息。撤銷引擎120采取適當(dāng)?shù)膭幼鳎ɡ纾?使用小撤銷在撤銷日志中生成撤銷條目)。然后,撤銷引擎120對服務(wù)器作出異步請求。撤 銷引擎120等待來自服務(wù)器的應(yīng)答,諸如指示成功或失敗的通知或回調(diào),或者有效載荷中 的其它信息。撤銷引擎120基于響應(yīng)采取適當(dāng)?shù)膭幼?,并且向客戶端返回響?yīng)。
      [0091] 3. 5撤銷策略
      [0092] 在一個實施例中,撤銷策略用來處理撤銷引擎120可能面對的預(yù)計場景。例如,撤 銷策略可以用來防止不能撤銷的操作發(fā)生,諸如類型為不可撤銷(N0T-UND0ABLE)的操作。 通過定義指示撤銷引擎120防止不可逆操作的執(zhí)行的策略,為抵御對系統(tǒng)發(fā)生不可撤銷的 潛在災(zāi)難性改變提供了附加的安全性。雖然這個例子討論了影響初始操作的策略,但是其 它撤銷策略也可以實現(xiàn),來處理在請求履行之后或者在撤銷請求過程中發(fā)生的場景。
      [0093] 撤銷策略可以用在許多情況下,諸如故障場景。例如,撤銷引擎120可以接收撤銷 與會話123456關(guān)聯(lián)的所有操作的請求,該會話包括六個操作。雖然對于每個操作都存在合 適的撤銷日志條目,但是與其中一個操作關(guān)聯(lián)的撤銷指令的執(zhí)行可能失敗。例如,驗證操作 可能由于不相關(guān)的請求造成與撤銷會話關(guān)聯(lián)的值改變而失敗。雖然,如以上所描述的,可以 使用用戶接口為用戶提供從中選擇的選項,但是對于管理員來說,定義確定是否繼續(xù)撤銷 請求的撤銷策略可能更方便。例如,策略可以指示在撤銷操作過程中發(fā)生的任何故障都將 造成撤銷操作停止并且生成詢問用戶操作是否應(yīng)當(dāng)繼續(xù)的用戶界面元素。不同的策略可以 指示撤銷命令總是要執(zhí)行,并且失敗的驗證器在為那個會話生成的日志文件中報告。
      [0094] 策略還可以用來指示撤銷日志中所有驗證器都要在撤銷操作開始之前被檢查。例 如,撤銷與會話123456關(guān)聯(lián)的所有操作的請求可以由撤銷引擎120接收。在一個實施例 中,撤銷引擎120首先執(zhí)行所有驗證器指令來確定與業(yè)務(wù)事務(wù)關(guān)聯(lián)的數(shù)據(jù)的當(dāng)前狀態(tài)是否 與事務(wù)之前的數(shù)據(jù)一致,或者沒有其它操作改變該數(shù)據(jù)(例如,通過檢查與數(shù)據(jù)關(guān)聯(lián)的時 間戳)。如果數(shù)據(jù)一致,則策略可以指示撤銷操作繼續(xù)。如果數(shù)據(jù)不一致,則策略可以指示 撤銷操作異常中止,并且通知用戶。
      [0095] 3. 6掛起撤銷引擎
      [0096] 存在幾種掛起撤銷引擎的操作可能有用的情況。例如,系統(tǒng)管理員可以對多個系 統(tǒng)作出改變,并且會感覺到他可以在沒有撤銷引擎120提供的安全性的情況下操作,并且 將更喜歡通過禁用來釋放由撤銷引擎120使用的資源。在一個實施例中,撤銷引擎120支 持掛起或關(guān)掉撤銷日志生成、其它特征或完全關(guān)閉撤銷引擎120的請求。依賴于實現(xiàn),被關(guān) 掉的效果可以變化。如果撤銷引擎實現(xiàn)為中間方,則它將簡單地取得每個請求并且把它傳 遞到目標(biāo)。如果撤銷引擎實現(xiàn)為嵌入式覆蓋區(qū)(footprint),則它將更改其邏輯,使得嵌入 式撤銷引擎120組件完全不再被調(diào)用。在一個實施例中,不是整個撤銷引擎120都需要掛 起,而是掛起撤銷引擎120的一部分。撤銷引擎120的任何部分都可以為任何原因單獨掛 起。例如,在單用戶/非并發(fā)環(huán)境中,掛起所有驗證機(jī)制會是適當(dāng)?shù)模驗?,?dāng)很少或者沒有 機(jī)會對系統(tǒng)做中間改變時,用驗證步驟交換性能增加會讓用戶感到舒服。
      [0097] 4. 0實現(xiàn)機(jī)制-硬件概述
      [0098] 根據(jù)一種實施例,本文所述的技術(shù)是由一個或多個專用計算設(shè)備實現(xiàn)的。專用計 算設(shè)備可以為執(zhí)行所述技術(shù)而硬連線,或者可以包括持久性編程為執(zhí)行所述技術(shù)的諸如一 個或多個專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)的數(shù)字電子設(shè)備,或者可以包 括按照固件、內(nèi)存、其它儲存器或者其組合中的程序指令編程為執(zhí)行所述技術(shù)的一個或多 個通用硬件處理器。這種專用計算設(shè)備還可以結(jié)合具有實現(xiàn)所述技術(shù)的定制編程的定制硬 連線邏輯、ASIC或FPGA。專用計算設(shè)備可以是臺式計算機(jī)系統(tǒng)、便攜式計算機(jī)系統(tǒng)、手持式 設(shè)備、聯(lián)網(wǎng)設(shè)備或者為了實現(xiàn)所述技術(shù)而結(jié)合硬連線和/或程序邏輯的任何其它設(shè)備。
      [0099] 例如,圖5是說明本發(fā)明實施例可以在其上實現(xiàn)的計算機(jī)系統(tǒng)500的框圖。計算 機(jī)系統(tǒng)500包括用于傳送信息的總線502或者其它通信機(jī)制,以及與總線502耦合的、用于 處理信息的硬件處理器504。硬件處理器504可以是例如通用微處理器。
      [0100] 計算機(jī)系統(tǒng)500還包括耦合到總線502用于存儲信息和要由處理器504執(zhí)行的指 令的主存儲器,諸如隨機(jī)存取存儲器(RAM)或者其它動態(tài)存儲設(shè)備。主存儲器506還可以 用于在要由處理器504執(zhí)行的指令的執(zhí)行過程中存儲臨時變量或其它中間信息。當(dāng)存儲在 處理器504可訪問的存儲介質(zhì)中時,這種指令使計算機(jī)系統(tǒng)500成為定制成執(zhí)行指令中所 規(guī)定的操作的專用機(jī)器。
      [0101] 計算機(jī)系統(tǒng)500還包括耦合到總線502的、用于存儲用于處理器504的靜態(tài)信息 和指令的只讀存儲器(ROM) 508或者其它靜態(tài)存儲設(shè)備。存儲設(shè)備510,諸如磁盤或光盤,被 提供并耦合到總線502,用于存儲信息和指令。
      [0102] 計算機(jī)系統(tǒng)500可以經(jīng)總線502耦合到顯示器512,諸如陰極射線管(CRT),用于 向計算機(jī)用戶顯示信息。包括字母數(shù)字和其它鍵的輸入設(shè)備514耦合到總線502,用于向處 理器504傳送信息和命令選擇。另一種類型的用戶輸入設(shè)備是光標(biāo)控制516,諸如鼠標(biāo)、軌 跡球,或者光標(biāo)方向鍵,用于向處理器504傳送方向信息和命令選擇并且用于控制顯示器 512上的光標(biāo)運動。這種輸入設(shè)備通常具有兩個軸中的兩個自由度,第一個軸(例如,X)和 第二個軸(例如,y),這允許設(shè)備在平面中規(guī)定位置。
      [0103] 計算機(jī)系統(tǒng)500可以利用定制的硬連線邏輯、一個或多個ASIC或FPGA、固件和/ 或程序邏輯實現(xiàn)本文所述的技術(shù),這些與計算機(jī)系統(tǒng)系統(tǒng)結(jié)合,使計算機(jī)系統(tǒng)500或者編 程計算機(jī)系統(tǒng)500成為專用機(jī)器。根據(jù)一種實施例,響應(yīng)于處理器504執(zhí)行主存儲器506中 所包含的一條或多條指令的一個或多個序列,本文所述的技術(shù)由計算機(jī)系統(tǒng)500執(zhí)行。這 種指令可以從另一個存儲介質(zhì),諸如存儲設(shè)備510,讀到主存儲器506中。主存儲器506中 所包含的指令序列的執(zhí)行使處理器504執(zhí)行本文所述的步驟。在備選實施例中,硬連線的 電路系統(tǒng)可以代替軟件指令或者與之結(jié)合使用。
      [0104] 如在本文中所使用的,術(shù)語"存儲介質(zhì)"指存儲使機(jī)器以特殊方式操作的數(shù)據(jù)和/ 或指令的任何介質(zhì)。這種存儲介質(zhì)可以包括非易失性介質(zhì)和/或易失性介質(zhì)。非易失性 介質(zhì)包括,例如,光或磁盤,諸如存儲設(shè)備510。易失性介質(zhì)包括動態(tài)存儲器,諸如主存儲器 506。存儲介質(zhì)的常見形式包括,例如,軟盤、柔性盤、硬盤、固態(tài)驅(qū)動器、磁帶、或者任何其 它磁性數(shù)據(jù)存儲介質(zhì),CD-ROM、任何其它光學(xué)數(shù)據(jù)存儲介質(zhì),任何具有孔模式的物理介質(zhì), RAM、PR0M及EPROM、FLASH-EPROM、NVRAM,任何其它存儲器芯片或磁帶盒。
      [0105] 存儲介質(zhì)與傳輸介質(zhì)不同但是可以與其結(jié)合使用。傳輸介質(zhì)參與在存儲介質(zhì)之間 傳輸信息。例如,傳輸介質(zhì)包括同軸電纜、銅線和光纖,包括包括總線502的電線。傳輸介質(zhì) 還可以采取聲波或光波的形式,諸如在無線電波和紅外線數(shù)據(jù)通信過程中生成的那些波。
      [0106] 各種形式的介質(zhì)可以在把一個或多個指令的一個或多個序列攜帶到處理器504 以供執(zhí)行的時候涉入其中。例如,指令可以最初在磁盤或遠(yuǎn)端計算機(jī)的固態(tài)驅(qū)動器上攜帶。 遠(yuǎn)端計算機(jī)可以把指令加載到其動態(tài)存儲器中并且利用調(diào)制解調(diào)器經(jīng)電話線發(fā)送指令。計 算機(jī)系統(tǒng)500本地的調(diào)制解調(diào)器可以在電話線上接收數(shù)據(jù)并且使用紅外線發(fā)送器把數(shù)據(jù) 轉(zhuǎn)換成紅外線信號。紅外線探測器可以接收在紅外線信號中攜帶的數(shù)據(jù)并且合適的電路系 統(tǒng)可以把數(shù)據(jù)放到總線502上??偩€502把數(shù)據(jù)攜帶到主存儲器506,處理器504從其檢索 并執(zhí)行指令。在被處理器504執(zhí)行之前或之后,主存儲器506接收到的指令可以可選地存 儲在存儲設(shè)備510上。
      [0107] 計算機(jī)系統(tǒng)500還包括耦合到總線502的通信接口 518。通信接口 518提供耦合 到網(wǎng)絡(luò)鏈路520的雙向數(shù)據(jù)通信,其中網(wǎng)絡(luò)鏈路520連接到本地網(wǎng)絡(luò)522。例如,通信接口 518可以是綜合業(yè)務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡、電纜調(diào)制解調(diào)器、衛(wèi)星調(diào)制解調(diào)器,或者向?qū)?yīng)類 型的電話線路提供數(shù)據(jù)通信連接的調(diào)制解調(diào)器。作為另一個例子,通信接口 518可以是向 兼容的LAN提供數(shù)據(jù)通信連接的局域網(wǎng)(LAN)卡。無線鏈路也可以實現(xiàn)。在任何這種實現(xiàn) 中,通信接口 518發(fā)送并接收攜帶代表各種類型信息的數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號。
      [0108] 網(wǎng)絡(luò)鏈路520通常通過一個或多個網(wǎng)絡(luò)向其它數(shù)據(jù)設(shè)備提供數(shù)據(jù)通信。例如,網(wǎng) 絡(luò)鏈路520可以通過局域網(wǎng)522向主機(jī)計算機(jī)524或者向由互聯(lián)網(wǎng)服務(wù)提供商(ISP) 526運 營的數(shù)據(jù)設(shè)備提供鏈接。ISP526又通過全球范圍的分組數(shù)據(jù)通信網(wǎng)絡(luò),現(xiàn)在通常稱為"互 聯(lián)網(wǎng)"528,提供數(shù)據(jù)通信服務(wù)。局部網(wǎng)522和互聯(lián)網(wǎng)528都使用攜帶數(shù)字?jǐn)?shù)據(jù)流的電、電磁 或光信號。通過各種網(wǎng)絡(luò)的信號和網(wǎng)絡(luò)鏈路520上并且通過通信接口 518的信號是傳輸介 質(zhì)的示例形式,其中通信接口把數(shù)字?jǐn)?shù)據(jù)攜帶到計算機(jī)系統(tǒng)500并且從其攜帶數(shù)字?jǐn)?shù)據(jù)。
      [0109] 計算機(jī)系統(tǒng)500可以通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路520和通信接口 518發(fā)送消息和接收數(shù) 據(jù),包括程序代碼。在互聯(lián)網(wǎng)例子中,服務(wù)器530可以通過互聯(lián)網(wǎng)528、ISP526、局部網(wǎng)522 和通信接口 518發(fā)送所請求的用于應(yīng)用程序的代碼。
      [0110] 所接收到的代碼可以由處理器504在接收到的時候執(zhí)行,和/或存儲在存儲設(shè)備 510或其它非易失性儲存器中,用于以后執(zhí)行。
      [0111] 在以上說明書中,已經(jīng)參考眾多具體細(xì)節(jié)描述了本發(fā)明的實施例,對于不同的實 現(xiàn),這些細(xì)節(jié)會有所變化。因此,說明書和附圖要在說明性而不是約束性的意義上考慮。本 發(fā)明范圍的唯一和排它指示,以及本 申請人:預(yù)期要作為本發(fā)明范圍的內(nèi)容,是以權(quán)利要求 發(fā)布的具體形式從本申請發(fā)布的權(quán)利要求集合的文字及其等效范圍,包括任何后續(xù)的修 正。應(yīng)當(dāng)指出,對各種實施例的修改和變化是預(yù)期的。修改可以基于,例如,不同期望的或 所需的操作特性。變化可以包括所要求保護(hù)的特征的組合。
      【權(quán)利要求】
      1. 一種系統(tǒng),包括: 一個或多個處理器; 計算機(jī)可讀的非暫時性存儲介質(zhì),包括用于維護(hù)元數(shù)據(jù)存儲庫和用于提供撤銷邏輯的 指令; 其中元數(shù)據(jù)存儲庫用于存儲與多個操作關(guān)聯(lián)的元數(shù)據(jù),其中每個操作與一操作類型關(guān) 聯(lián),其中與每個操作關(guān)聯(lián)的元數(shù)據(jù)識別至少:a)與那個操作關(guān)聯(lián)的一個或多個屬性,及b) 與對應(yīng)操作的操作類型關(guān)聯(lián)的小撤銷,其中小撤銷包括用于生成撤銷條目的指令; 其中撤銷邏輯用于至少部分地基于元數(shù)據(jù)存儲庫中的元數(shù)據(jù)以及小撤銷在撤銷日志 中生成一個或多個條目,其中撤銷日志中的第一條目基于被系統(tǒng)截獲的第一請求中的第一 操作,并且包括用于與該操作關(guān)聯(lián)的第一屬性的第一屬性值; 其中小撤銷是能夠撤銷與操作類型關(guān)聯(lián)的操作的對象。
      2. 如權(quán)利要求1所述的系統(tǒng),其中第一請求是把目標(biāo)系統(tǒng)上的第一對象的值從第二個 值改變成第三個值的請求,并且撤銷邏輯還配置為,響應(yīng)于截獲該請求,向目標(biāo)系統(tǒng)生成用 于在第二個值響應(yīng)于第一請求而被改變之前從目標(biāo)系統(tǒng)檢索第二個值的第二請求。
      3. 如權(quán)利要求2所述的系統(tǒng),其中撤銷日志中的第一條目中的第一屬性值與第二個值 相同,其中該條目包括第一指令,第一指令當(dāng)被一個或多個處理器執(zhí)行時,使第一對象的值 被設(shè)置成第一屬性值。
      4. 如權(quán)利要求3所述的系統(tǒng),其中撤銷日志中的第一條目還包括第二指令,第二指令 當(dāng)被一個或多個處理器執(zhí)行時,使撤銷邏輯確定目標(biāo)系統(tǒng)上的第一對象的值是否與第三個 值相同,并且,響應(yīng)于確定目標(biāo)系統(tǒng)上的第一對象的值與第三個值相同,執(zhí)行使第一對象的 值被設(shè)置成第一屬性值的指令。
      5. 如權(quán)利要求4所述的系統(tǒng),其中撤銷邏輯還配置為: 基于被系統(tǒng)截獲的第二請求中的第二操作在撤銷日志中生成第二條目,其中第二請求 是把第二目標(biāo)系統(tǒng)上的第二對象的值從第四個值改變成第五個值的請求,其中第二條目包 括第四個值; 其中第一請求和第二請求包括把第一和第二請求都與第一會話關(guān)聯(lián)的會話-識別信 息; 其中第二條目包括第二指令,第二指令當(dāng)被一個或多個處理器執(zhí)行時,使第二對象的 值被設(shè)置成第四個值; 其中該系統(tǒng)配置為把第一請求發(fā)送到第一目標(biāo)系統(tǒng)并且把第二請求發(fā)送到第二目標(biāo) 系統(tǒng); 其中撤銷邏輯配置為響應(yīng)于接收到執(zhí)行與第一會話關(guān)聯(lián)的撤銷操作的第三請求而使 第一、第二和第三指令在一個或多個處理器上執(zhí)行。
      6. 如權(quán)利要求5所述的系統(tǒng),其中撤銷邏輯還配置為: 基于在第二請求之前并且在第一請求之后被截獲的第三請求中的第三操作在第二撤 銷日志中生成第三條目,其中第三請求是改變第一目標(biāo)系統(tǒng)上的第三對象的值的請求,并 且第三請求與第二會話關(guān)聯(lián); 其中撤銷邏輯配置為使第一、第二和第三指令在一個或多個處理器上執(zhí)行,而不改變 第三對象的值。
      7. 如權(quán)利要求1至6中任何一項所述的系統(tǒng),其中第一操作是構(gòu)造器操作,并且第一屬 性值是響應(yīng)于請求而要在目標(biāo)系統(tǒng)上構(gòu)造的對象的名稱,其中撤銷日志中的第一條目包括 當(dāng)其被一個或多個處理器執(zhí)行時使對象從目標(biāo)系統(tǒng)被除去的指令。
      8. -種存儲指令的計算機(jī)可讀的非暫時性存儲介質(zhì),所述指令當(dāng)被一個或多個處理器 執(zhí)行時,使一個或多個處理器執(zhí)行: 維護(hù)存儲與多個操作關(guān)聯(lián)的元數(shù)據(jù)的元數(shù)據(jù)存儲庫,其中每個操作與一操作類型關(guān) 聯(lián),其中與每個操作關(guān)聯(lián)的元數(shù)據(jù)識別至少:a)與那個操作關(guān)聯(lián)的一個或多個屬性,及b) 與對應(yīng)操作的操作類型關(guān)聯(lián)的小撤銷,其中小撤銷包括用于生成撤銷條目的指令; 至少部分地基于元數(shù)據(jù)存儲庫中的元數(shù)據(jù)以及小撤銷在撤銷日志中生成一個或多個 條目; 其中撤銷日志中的第一條目基于被系統(tǒng)截獲的第一請求中的第一操作,并且包括用于 與該操作關(guān)聯(lián)的第一屬性的第一屬性值; 其中小撤銷是能夠撤銷與操作類型關(guān)聯(lián)的操作的對象。
      9. 如權(quán)利要求8所述的計算機(jī)可讀的非暫時性存儲介質(zhì),其中第一請求是把目標(biāo)系統(tǒng) 上的第一對象的值從第二個值改變成第三個值的請求,并且所述指令還包括用于以下的指 令: 響應(yīng)于截獲該請求,向目標(biāo)系統(tǒng)生成用于在第二個值響應(yīng)于第一請求而被改變之前從 目標(biāo)系統(tǒng)檢索第二個值的第二請求。
      10. 如權(quán)利要求9所述的計算機(jī)可讀的非暫時性存儲介質(zhì),其中撤銷日志中的第一條 目中的第一屬性值與第二個值相同,其中該條目包括第一指令,第一指令當(dāng)被一個或多個 處理器執(zhí)行時,使第一對象的值被設(shè)置成第一屬性值。
      11. 如權(quán)利要求10所述的計算機(jī)可讀的非暫時性存儲介質(zhì),其中撤銷日志中的第一條 目還包括第二指令,第二指令當(dāng)被一個或多個處理器執(zhí)行時,使撤銷邏輯確定目標(biāo)系統(tǒng)上 的第一對象的值是否與第三個值相同,并且,響應(yīng)于確定目標(biāo)系統(tǒng)上的第一對象的值與第 三個值相同,執(zhí)行使第一對象的值被設(shè)置成第一屬性值的指令。
      12. 如權(quán)利要求11所述的計算機(jī)可讀的非暫時性存儲介質(zhì),其中所述指令還包括用于 以下的指令: 基于截獲的第二請求中的第二操作在撤銷日志中生成第二條目,其中第二請求是把第 二目標(biāo)系統(tǒng)上的第二對象的值從第四個值改變成第五個值的請求,其中第二條目包括第四 個值; 其中第一請求和第二請求包括把第一和第二請求都與第一會話關(guān)聯(lián)的會話識別信 息; 其中第二條目包括第二指令,第二指令當(dāng)被一個或多個處理器執(zhí)行時,使第二對象的 值被設(shè)置成第四個值; 把第一請求發(fā)送到第一目標(biāo)系統(tǒng)并且把第二請求發(fā)送到第二目標(biāo)系統(tǒng); 響應(yīng)于接收到執(zhí)行與第一會話關(guān)聯(lián)的撤銷操作的第三請求,使第一、第二和第三指令 在一個或多個處理器上執(zhí)行。
      13. 如權(quán)利要求12所述的計算機(jī)可讀的非暫時性存儲介質(zhì),其中撤銷邏輯還配置為: 基于在第二請求之前并且在第一請求之后被截獲的第三請求中的第三操作在第二撤 銷日志中生成第三條目,其中第三請求是改變第一目標(biāo)系統(tǒng)上的第三對象的值的請求,并 且第三請求與第二會話關(guān)聯(lián); 其中撤銷邏輯配置為使第一、第二和第三指令在一個或多個處理器上執(zhí)行,而不改變 第三對象的值。
      14. 如權(quán)利要求8至13中任何一項所述的計算機(jī)可讀的非暫時性存儲介質(zhì),其中第一 操作是構(gòu)造器操作,并且第一屬性值是響應(yīng)于請求而要在目標(biāo)系統(tǒng)上構(gòu)造的對象的名稱, 其中撤銷日志中的第一條目包括當(dāng)其被一個或多個處理器執(zhí)行時使對象從目標(biāo)系統(tǒng)被除 去的指令。
      15. -種方法,包括: 維護(hù)存儲與多個操作關(guān)聯(lián)的元數(shù)據(jù)的元數(shù)據(jù)存儲庫,其中每個操作與一操作類型關(guān) 聯(lián),其中與每個操作關(guān)聯(lián)的元數(shù)據(jù)識別至少:a)與那個操作關(guān)聯(lián)的一個或多個屬性,及b) 與對應(yīng)操作的操作類型關(guān)聯(lián)的小撤銷,其中小撤銷包括用于生成撤銷條目的指令; 至少部分地基于元數(shù)據(jù)存儲庫中的元數(shù)據(jù)以及小撤銷在撤銷日志中生成一個或多個 條目; 其中撤銷日志中的第一條目基于被系統(tǒng)截獲的第一請求中的第一操作,并且包括用于 與該操作關(guān)聯(lián)的第一屬性的第一屬性值; 其中該方法是由一個或多個計算設(shè)備執(zhí)行的; 其中小撤銷是能夠撤銷與操作類型關(guān)聯(lián)的操作的對象。
      16. 如權(quán)利要求15所述的方法,還包括: 其中第一請求是把目標(biāo)系統(tǒng)上的第一對象的值從第二個值改變成第三個值的請求;及 響應(yīng)于截獲該請求,向目標(biāo)系統(tǒng)生成用于在第二個值響應(yīng)于第一請求而被改變之前從 目標(biāo)系統(tǒng)檢索第二個值的第二請求。
      17. 如權(quán)利要求16所述的方法,其中撤銷日志中的第一條目中的第一屬性值與第二個 值相同,其中該條目包括第一指令,第一指令當(dāng)被一個或多個處理器執(zhí)行時,使第一對象的 值被設(shè)置成第一屬性值。
      18. 如權(quán)利要求17所述的方法,其中撤銷日志中的第一條目還包括第二指令,第二指 令當(dāng)被一個或多個處理器執(zhí)行時,使撤銷邏輯確定目標(biāo)系統(tǒng)上的第一對象的值是否與第三 個值相同,并且,響應(yīng)于確定目標(biāo)系統(tǒng)上的第一對象的值與第三個值相同,執(zhí)行使第一對象 的值被設(shè)置成第一屬性值的指令。
      19. 如權(quán)利要求18所述的方法,還包括: 基于被截獲的第二請求中的第二操作在撤銷日志中生成第二條目,其中第二請求是把 第二目標(biāo)系統(tǒng)上的第二對象的值從第四個值改變成第五個值的請求,其中第二條目包括第 四個值; 其中第一請求和第二請求包括把第一和第二請求都與第一會話關(guān)聯(lián)的會話識別信 息; 其中第二條目包括第二指令,第二指令當(dāng)被一個或多個處理器執(zhí)行時,使第二對象的 值被設(shè)置成第四個值; 把第一請求發(fā)送到第一目標(biāo)系統(tǒng)并且把第二請求發(fā)送到第二目標(biāo)系統(tǒng); 響應(yīng)于接收到執(zhí)行與第一會話關(guān)聯(lián)的撤銷操作的第三請求,使第一、第二和第三指令 在一個或多個處理器上執(zhí)行。
      20. 如權(quán)利要求15至19中任何一項所述的方法,其中第一操作是構(gòu)造器操作,并且第 一屬性值是響應(yīng)于請求而要在目標(biāo)系統(tǒng)上構(gòu)造的對象的名稱,其中撤銷日志中的第一條目 包括當(dāng)其被一個或多個處理器執(zhí)行時使對象從目標(biāo)系統(tǒng)被除去的指令。
      21. -種計算機(jī)程序,用于使一個或多個處理器執(zhí)行如權(quán)利要求15至20中任何一項所 述的方法。
      【文檔編號】G06F7/00GK104272247SQ201280060770
      【公開日】2015年1月7日 申請日期:2012年10月30日 優(yōu)先權(quán)日:2011年11月3日
      【發(fā)明者】S·戈爾 申請人:甲骨文國際公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1