專利名稱:模型效果分析的制作方法
本申請要求1998年10月16日提交的題為“建模工具的系統(tǒng)和方法”的美國專利申請No.60/104,682的申請日的權益。
本申請涉及共同待審的題為“用于建模工具的裝置和方法”的美國專利申請No.__(代理人卷號#22074661-25535),在此將其全部引入作為參考。
本申請涉及共同待審的題為“確定兩個或多個模型之間區(qū)別的方法”的美國專利申請No.__(代理人卷號#22074661-25531),在此將其全部引入作為參考。
本申請涉及共同待審的題為“可擴展宏語言的方法和系統(tǒng)”的美國專利申請No.__(代理人卷號#22074661-25533),在此將其全部引入作為參考。
本申請涉及共同待審的題為“用于通過SQL輸入對分級數(shù)據(jù)存儲進行訪問的方法及裝置”的美國專利申請No.__(代理人卷號#22074661-25534),在此將其全部引入作為參考。
圖2顯示了本發(fā)明一個典型實施例的功能框圖。
圖3顯示了根據(jù)本發(fā)明元模型的一個典型實施例的數(shù)據(jù)模型。
圖4的流程圖顯示了根據(jù)本發(fā)明的用于啟動一個對象語義的方法的典型實施例。
圖5的流程圖顯示了根據(jù)本發(fā)明的用于啟動一個特性語義的方法的典型實施例。
圖6的流程圖顯示了根據(jù)本發(fā)明的用于構筑一個建模工具的方法的典型實施例。
圖7的流程圖顯示了根據(jù)本發(fā)明的執(zhí)行示范功能的典型實施例。
圖8的流程圖顯示了根據(jù)本發(fā)明的用于確定作為事務結果的模型凈變化的方法的典型實施例。
圖9的流程圖顯示了根據(jù)本發(fā)明用于從作為事務結果的模型變化記錄中確定凈操作類型變化的方法的典型實施例。
圖10顯示了根據(jù)本發(fā)明用于從事務的模型變化記錄中確定凈操作類型變化的規(guī)則的一個示范集。
圖11的流程圖顯示了根據(jù)本發(fā)明用于從為事務結果的模型變化記錄中確定作凈數(shù)據(jù)變化的方法的典型實施例。
圖12顯示了根據(jù)本發(fā)明用于從事務的模型變化記錄中確定凈數(shù)據(jù)變化的規(guī)則的一個示范集。
詳細說明圖1顯示了一個采用了本發(fā)明的傳統(tǒng)計算機系統(tǒng)101。在一個典型實施例中,本發(fā)明在例如由SUN MICROSYSTEMSTM制造的SUNTM工作站上得以實現(xiàn)。另外的實施例可在例如由IBM公司制造的IBMTM個人電腦或由APPLETM計算機公司制造的MACINTOSHTM計算機上實現(xiàn)。本領域技術人員應該理解,也可以采用其它的計算機系統(tǒng)結構。一般來說,這種如圖1所示的計算機系統(tǒng)包括用于傳送信息的總線102、與總線102相連用于處理信息的處理器103(如中央處理器)、以及與總線102相連用于為處理器103存儲信息和指令的主存儲器104。只讀存儲器105被連接在總線102上,用于保存處理器103的信息和指令。與總線102相連的顯示設備106用于為例如開發(fā)者顯示信息。
一字母數(shù)字輸入設備107(如鍵盤)與總線102相連,用于將信息和命令選擇發(fā)送給處理器103。調(diào)制解調(diào)器110與總線102相連,用于提供例如與其它計算機系統(tǒng)或數(shù)據(jù)庫以及海量存儲介質108(如與總線102相連用于保存信息和指令的磁盤或相應的磁盤驅動器)之間的通信。含有數(shù)字信息的數(shù)據(jù)存儲介質109被設置成例如能夠與海量存儲介質協(xié)同工作以允許處理器103通過總線102存取數(shù)據(jù)存儲介質109上的數(shù)字信息。另外,也可采用一個用于保存高分辨率圖像的CD-ROM(未示出)以供在顯示設備106上顯示圖像。
本發(fā)明的一個實施例是由(例如)一種用C++編程語言編寫的軟件模塊實現(xiàn)的,該軟件模塊可在如計算機系統(tǒng)101的計算機系統(tǒng)中以傳統(tǒng)的方式得到執(zhí)行。利用眾所周知的技術,應用軟件可被保存在數(shù)據(jù)存儲介質109中,隨后被調(diào)入計算機系統(tǒng)101中并得到執(zhí)行。一旦被啟動,本優(yōu)選實施例所述的軟件將以如下說明的方式進行操作。統(tǒng)一建模結構(UMA)是一種數(shù)據(jù)驅動建模引擎,它能夠在各種基于元模型外部定義的問題域中工作,上述元模型可由開發(fā)者提供并擴充以提供一個基于UMA的產(chǎn)品。元模型的外部定義是例如對要在問題域中被尋找的對象類型以及與各對象相關的特性的一系列說明。這些說明可通過調(diào)用一套由具體實現(xiàn)(implementation)所公開的功能來提供,并且可通過函數(shù)參數(shù)傳入說明性信息。典型的問題域可包括數(shù)據(jù)建模,如數(shù)據(jù)庫列表、數(shù)列以及索引;過程建模,如活動和箭頭;訪問建模,如數(shù)據(jù)控制語言語句和文件;以及組件建模,如接口、實現(xiàn)以及從屬關系。
在本發(fā)明的一個典型實施例中,基于UMA的產(chǎn)品是一種建模工具。該基于UMA的產(chǎn)品可以是一個基于UMA的應用程序,如一個含有UMA的用戶接口?;赨MA的產(chǎn)品也可含有一個例如由開發(fā)者提供的基于元模型的外部定義的對象/特性模型的一個例子。
如圖2所示,在本發(fā)明的一個典型實施例中,UMA200包括一個元模型210、對象和特性廠家注冊表260、對象/特性接口280、事務管理程序285、日志文件295以及對象/特性模型290。元模型210可包括含有多個語義集230的語義注冊表220以及一個含有對象/特性說明250的元數(shù)據(jù)管理程序240。對象/特性說明250是多套用于描述對象或特性的特征的信息。在描述對象的情況下,它包括了對象的名稱、可由人讀取的說明性文本、一般化信息以及與其中可能包含的其它類型的對象有關的信息。一般化信息描述了例如細化部分/子分類,如同義詞信息。
對象/特性說明可由開發(fā)者或用戶提供以作為外部定義的元模型。元模型210是對求解問題域的對象和特性以及多套語義集230的描述說明,這些語義集對在對象和特性被請求改變時,要被分別調(diào)用以改變這些對象和特性。
圖3顯示了本發(fā)明元模型210的一個典型實施例。如圖3所示,該元模型201包括多個類,如對象、特性和語義,并且建立了對象、特性以及語義之間的關系。類型310與一個類型代碼鍵、名稱屬性以及定義屬性相關。類型310可以是例如一個目錄330或者也可是一個項目320。目錄330與類型代碼鍵相關并且包括多個項目。目錄成員340與目錄鍵和成員鍵相關。項目320與類型代碼鍵相關并且可以是特性或對象。
特性350與類型代碼鍵、缺省值屬性以及數(shù)據(jù)類型屬性相關。特性350也與特性用途375相關。對象360與類型代碼鍵、對象實現(xiàn)屬性以及超類型屬性相關。超類型屬性為對象360提供了進一步的規(guī)定性。對象360可以擁有(例如,含有一個組件)其它對象也可被其它對象擁有。對象所有權370與擁有者鍵和被擁有者鍵相關。特性用途375與特性鍵和對象鍵相關。
特性用途375也將特性350和對象360關聯(lián)起來。對象語義用途390與類型代碼鍵和身份(ID)鍵相關聯(lián)。對象語義用途390將對象360和對象語義395關聯(lián)起來。對象語義395與ID鍵相關聯(lián)。特性語義用途380與ID鍵、特性鍵以及對象鍵相關聯(lián)。對象語義用途390將特性語義385與特性用途375關聯(lián)起來。特性語義385與語義ID鍵相關聯(lián)。
如圖2所示,元模型210的元數(shù)據(jù)管理程序240通過一個基于UMA的應用程序225接收例如從開發(fā)者發(fā)出的元數(shù)據(jù)(例如,對象和特性的描述)。元數(shù)據(jù)由開發(fā)者提供用來解決其問題域的對象和特性。元數(shù)據(jù)管理程序240從對象和特性廠家注冊表260中接收有效創(chuàng)建請求。
如圖2所示,元模型210的語義注冊表220包括多個語義集230,這些語義集230可以含有例如一個預定集以及由開發(fā)者通過基于UMA的應用程序所提供的附加集。語義230是封裝進語義對象的建模規(guī)則,語義對象對外有一個接口,如一個純粹虛擬的類,它從語義230的細節(jié)中隱含了建模引擎。預定義語義集可提供規(guī)則以加強建模工具基礎的完整性,而且在本發(fā)明的一個典型實施例中,預定語義集不能夠被開發(fā)者改動。由開發(fā)者提供的額外語義集可以被開發(fā)者改動。語義的一個例子是一個對規(guī)則“單一數(shù)據(jù)庫中的兩個列不能具有相同的名稱”進行加強的語義。
語義230通過對象/特性接口280獲取對于對象/特性模型290的訪問。語義注冊表220可以包括一個對象語義注冊表以用于確定是否有一個特定的對象語義集存在、以及在存在該語義集的情況下對各對象語義集進行定位。語義注冊表220也可包括一個特性語義注冊表以用于確定是否有一個特定的特性語義集存在、并在當存在該語義集的情況下對各特性語義集進行定位。語義注冊表220通過例如對象/特性接口280找出被請求使用的各個語義集。語義注冊表220根據(jù)調(diào)入的語義來對各個對象和特性做出修改,并向對象/特性接口280提供經(jīng)修改的對象和特性。語義注冊表220還提供了對對象/特性接口280的處理操作的狀態(tài)。例如,被調(diào)入用于一個操作的語義之一可能被違反,這就表示該操作已經(jīng)失敗。
對象和特性廠家注冊表260可以包括廠家270,如對象廠家和特性廠家。對象和特性廠家注冊表260通過一基于UMA的應用程序225接收(例如)開發(fā)者所發(fā)出的創(chuàng)建對象和特性的請求。廠家270能夠創(chuàng)建對象和特性。對象和特性廠家注冊表260能夠確定是否有一個特定的廠家存在,并且能夠在當存在該廠家的情況下找出各個廠家以創(chuàng)建被請求的各個對象和特性。對象和特性廠家注冊表260還可向元數(shù)據(jù)管理程序240提供一個有效創(chuàng)建請求。其有效性可以包括(例如)創(chuàng)建對象或特性的請求是否成功。對象和特性廠家注冊表260能夠舉例分別說明對象和特性,并能夠將這些對象和特性提供給對象/特性接口280。
如圖2所示,對象/特性280通過基于UMA的應用程序225接收(例如)開發(fā)者所發(fā)出的用于修改和刪除對象及特性的請求。這些請求調(diào)用可使從元模型210的語義注冊表220提供給對象/特性接口280的對象和特性發(fā)生改變的元模型210中的各個語義。對象/特性280可以從多個分立事件(例如,在表1中所顯示的多個事件)中識別一個分立的事件,并且能夠確定應該調(diào)用一個語義或者一個語義集。上述分立事件指的是其中對象/特性模型290可被修改的情況。在本發(fā)明的一個典型實施例中,UMA的作者可以提供多個分立事件。
表1常量 說明PostCreation 正在創(chuàng)建一個對象PreDestmction正在破壞一個對象PreEdit 將創(chuàng)建和/或修改一個特性PostEdit 剛創(chuàng)建和/或修改一個特性PreNull 將破壞一個特性PreOwnerDestruction 將破壞擁有一個特性的對象對象/特性接口280可根據(jù)調(diào)入的各個語義集的結果而提供由語義注冊表220處理操作的狀態(tài)。例如,如果一個操作使得任何一套調(diào)入的語義集被違反,則語義注冊表220將提供一個指示以說明操作是失敗的。但是,如果一個操作并未使得任何一套調(diào)入的語義集被違反,則語義注冊表220將提供一個指示以說明操作是成功的。對象/特性接口280向事務管理程序285提供對象和特性的變化,并且如果對象/特性接口280確定一個操作已失敗,則它將提供一個指示以說明該操作不能處理管理程序285。對象/特性接口280還向對象/特性模型290提供了對象和特性。對象/特性接口280接口還能從對象/特性模型290中檢索對象和特性,從而例如根據(jù)請求將這些對象和特性提供給一個基于UMA的應用程序225。
圖4顯示了對象/特性接口280用于啟動一個對象語義的典型方法的流程圖。在410中,對象/特性接口280打開與事務管理程序285的事務處理。對模型的各個變化都要打開一個事務處理,如果變化被發(fā)現(xiàn)是無效的,則它將被取消。在415中,對象/特性接口280與對象本身進行通信。所有的對象都獲知它們的類型用以確定此對象的類型。在420中,對象/特性接口280從元模型210中以(例如)從上向下的順序為一個對象獲取完整的超類型路徑。在425中,第一對象類型(最終超類型)被對象/特性接口280從元模型中獲取。在430中,對象/特性接口280從對象語義注冊表220中為對象類型獲取語義列表。在435中,對象/特性接口280與語義注冊表進行交流以確定列表中是否還有更多的語義。如果是,則對象/特性接口280將在455中獲取并在460中啟動下一個語義。在465中,對象/特性接口280確定語義是否失敗。如果是,則在470中,事務處理將按照對象/特性接口280所發(fā)出的請求而被事務管理程序285重新運行(roll back)。但是,如果語義并未失敗,則在435中,對象/特性接口280將再次確定列表中是否還有更多的語義。
如果列表中沒有更多的語義,則在440中,對象/特性接口280將與元模型進行通信,并且確定父路徑中是否還有更多的對象類型。如果確定為沒有,則在450中,事務處理將被省略。如果在父路徑中還有更多的對象類型,則在445中,下一個對象類型將被獲取并且對象/特性接口280將再次在430中從對象語義注冊表中為對象類型獲取語義列表。
圖5的流程圖顯示了對象/特性接口280用于啟動一個特性語義的典型方法的流程圖。在510中,對象/特性接口280打開與事務管理程序285的事務處理。在515中,對象/特性接口280與對象進行通信以確定對象的類型。在520中,對象/特性接口280從元模型210中以(例如)從上向下的順序為各個對象獲取完整的超類型路徑。在525中,第一對象類型(最終超類型)被對象/特性接口280從元模型中獲取。在527中,對象/特性接口280為對象和特性類型構筑一個對象/特性對。在530中,對象/特性接口280從特性語義注冊表530中為對象/特性對類型獲取語義列表。
在535中,對象/特性接口280確定列表中是否有更多的語義。如果是,則對象/特性接口280將在555中獲取并在560中啟動下一個語義。在565中,如果對象/特性接口280確定語義已經(jīng)失敗,則在570中,事務處理將被重新運行。但是,如果語義并未失敗,對象/特性接口280將返回至535以再次確定列表中是否還有更多的語義。
如果列表中沒有更多的語義,則在540中,對象/特性接口280將與元模型進行通信并確定父路徑中是否還有更多的對象類型。如果沒有,則在550中,事務處理將被省略。如果父路徑中還有更多的對象類型,則在545中,下一個對象類型將被獲取并且對象/特性接口280將再次在527中為對象和特性類型構筑一個對象特性對。
在本發(fā)明的一個典型實施例中,對象/特性模型290包括預先定義的對象和特性集。該預先定義的對象和特性集可以由例如UMA的開發(fā)者來提供以減少產(chǎn)品開發(fā)者的工作量。對象/特性模型290還從對象/特性接口280檢索對象特性。從對象/特性接口接收到的對象和特性是以由開發(fā)者提供的元數(shù)據(jù)的外部定義為根據(jù)的。在對象/特性模型290中包含的是由例如開發(fā)者請求創(chuàng)建和修改的對象和特性。另外,對象/特性模型290通過對象/特性接口280將事務管理程序285的模型改變記錄下來。
但是,在本發(fā)明的一個典型實施例中,對象/特性模型290中作為操作失敗結果的對象和特性被從對象/特性模型290中刪除。因此,在本發(fā)明的一個典型實施例中,由開發(fā)者提供的保留在對象/特性模型290之中的對象和特性是作為操作成功結果的對象和特性。這樣,開發(fā)者就不需要直接訪問并且也不能夠直接改變對象/特性模型290。所以,對模型的改變就被建模引擎獲知,并且一致性和有效狀態(tài)也可在所有時間上得到保證。如果開發(fā)者已經(jīng)直接訪問基本數(shù)據(jù)結構,則不正確的修改將會在模型中產(chǎn)生無效的狀態(tài)。
事務管理程序285將各個對象和特性置于它們被一個錯誤操作改變之前的狀態(tài)。例如,當對象/特性接口280的操作失敗時,事務管理程序285將被提供一個標志以表明操作已經(jīng)失敗。任何失敗的操作都會被撤銷或清除。事務管理程序285可以通過例如將對象/特性模型290的改變記錄進日志文件295、從日志文件295中獲取撤銷數(shù)據(jù)、并根據(jù)事務處理中由對象/特性接口280所確定的操作成功和失敗狀態(tài)來執(zhí)行撤銷操作,從而完成上述工作。因此對象/特性模型290就被保持處于有效狀態(tài)。在本發(fā)明的一個典型實施例中,事務管理程序285也可接收一個從基于UMA的應用程序225所發(fā)出的請求以撤銷或重復一個操作。如果一個重復操作被請求執(zhí)行,則事務管理程序285可以請求從日志文件295中獲取重復信息并且按照已知的方式來執(zhí)行重復操作。
事務處理可由例如開發(fā)者通過用一個基于UMA的應用程序225識別出各個事務的開始和結尾而被提供。事務處理包括一個或多個活動,每個活動都可改變例如基于UMA的應用程序225的對象/特性模型290。事務管理程序285能夠通過例如建立一個起始位置而在事務日志文件295中識別出事務處理的開始。在本發(fā)明的一個典型實施例中,事務管理程序285將事務中各個改變對象/特性模型290的活動都作為一個模型變化而記錄在事務日志文件295中。事務管理程序285還能夠通過例如建立一個結束位置而在事務日志文件295中識別出事務處理的結尾。在本發(fā)明的一個典型實施例中,各個事務的起始和結束位置都被保存在一個位置上,通過對該位置進行搜索就可獲取各個事務的所在位置以及它們在事務日志文件295中的相應模型變化記錄。因此,就可在事務日志文件295中識別出一個或多個事務。這樣,作為一個或多個事務處理結果的對象/特性模型290的凈變化就可被確定。
在本發(fā)明的一個典型實施例中,UMA工作于一個訪問建模問題域(例如數(shù)據(jù)控制語言語句(DML)和文件)中。對象/特性模型290可以包括例如多個對象、表A、表B,DML語句(例如從A、B中選取A.X+B.Y,其中,A為表A,A.X指的是表A中的第X列,B為表B,B.Y指的是表B中的第Y列)以及文件C(一個使用DML語句“從A、B中選取A.X+B.Y”的文件)。這些對象將被例如包含在對象/特性模型290之中。元數(shù)據(jù)210的語義230將包括例如說明對象/特性模型290的變化是如何影響各個DML語句的語義。例如,語義(1)可提供這樣一個說明,即,對一個表格的刪除將導致所有與該表格有關的內(nèi)容都被刪除,并且應對各個DML語句進行語法修正。語義(2)可提供這樣一個說明,即,對象/特性模型290中的所有代表使用被修改或刪除了的DML語句的文件的對象都被指定為正在接觸的對象。一個正在接觸的對象或特性被標記為經(jīng)過邏輯修改,即使它并未受到實際修改。
向對象/特性接口280提供一個包含有破壞一個對象(如DELETETable A刪除表A)的事務是一個分立的事件(PreDestruction)。因此,各個語義(例如,語義(1)和語義(2))都將被調(diào)用。所以,根據(jù)語義(1),對象的內(nèi)容(從A、B中選取A.X+B.Y)被修改為從B中選取B.Y。另外,根據(jù)語義(2),含有文件C的對象被指定為正在接觸的對象。這樣,對象/特性模型290就被改變。當語義獲得成功時,變化將不被重新運行。作為“刪除表A”這個事務處理的結果,以下各個活動(1)刪除表A、(2)含有“從A、B中選取A.X+B.Y”內(nèi)容的對象被修改以及(3)含有文件C的對象被指定為正在接觸一都被包含在事務日志文件295當中,作為模型變化記錄。另外,事務和開頭和結尾也在事務日志文件295中被指定。
在本發(fā)明的一個典型實施例中,UMA200還可包括一個內(nèi)部服務單元以及一個外部服務接口。內(nèi)部服務單元可以含有例如公開給開發(fā)者用以協(xié)助創(chuàng)建和控制一個模型并且用于解決開發(fā)者的問題域的服務或功能。在本發(fā)明的一個典型實施例中,內(nèi)部服務可以包括附錄1中所描述的那些服務或功能。
外部服務接口是一個允許外部服務與UMA200進行通信的接口。外部服務接口可以是例如一個連接和植入有一個附加應用程序接口的對象,它允許第三方模塊擴展工具的建模能力,從而通過擴展建模環(huán)境和建模規(guī)則來增加功能(如可自動由用戶定義的功能)。因此,開發(fā)者也可訪問UMA200的內(nèi)部服務之外的服務。外部服務可以是例如一個以由用戶輸入的全部姓名為基礎的用于增強協(xié)作命名標準的模塊。另外,當用戶接口(如基于UMA的應用程序225)被和語義分離開之后,UMA200是可測量的。
圖6顯示了根據(jù)本發(fā)明用于構筑建模工具的方法的一個典型實施例。在610中,通過為開發(fā)者所提供的對象/特性定義一個第一類集以作為元數(shù)據(jù),完成對一個對象/特性模型290構筑。在本發(fā)明的一個典型實施例中,對象/特性模型290可以包括一套預定的一個或多個對象和特性。對象為施加給它的特性提供存儲機制。在本發(fā)明的一個典型實施例中,一個用于對象的接口類可以是(例如)UMEObjectI。特性可以被用作一個基本類,它需要編程人員再進行細分類。在本發(fā)明的一個典型實施例中,基本類可以提供不含數(shù)據(jù)存儲的管理服務。在本發(fā)明的一個典型實施例中,開發(fā)者可以提供一個子類以說明用于創(chuàng)建一個訪問程序所需的數(shù)據(jù)單元和方法。
在620中,元模型210是(例如)通過定義一個第二類集而被構筑成的。該第二類集被設計用來保存對特性、對象和語義的說明。例如,在本發(fā)明的一個典型實施例中,有兩個語義接口類被指定。第一個語義接口類(例如UMEObjectSemanticI)是用于能夠影響一個對象的創(chuàng)建或破壞的任何語義的接口。第二個語義接口類(例如UMEPropertySemanticI)則是用于能夠影響一個特性的創(chuàng)建、破壞或修改的任何語義的接口。在本發(fā)明的一個典型實施例中,元模型210的表示的實現(xiàn)包括一個單元素對象集合,它公開了用于注冊元數(shù)據(jù)和語義的靜態(tài)方法。
建模規(guī)則(例如,語義230)可被結合進元模型210的語義注冊表220中,以象在640中那樣,作為一個預定語義集和/或是附加語義集,該附加語義集例如由開發(fā)者在啟動時或者在啟動之后的任何時間提供。為了將一個建模規(guī)則結合進元模型210以用于一個對象,開發(fā)者可對適當?shù)恼{(diào)用(例如,用于對象建模規(guī)則的UMEObjectSemanticI以及用于特性建模規(guī)則的UMEPropertySemanticI)進行細分類。開發(fā)者還能夠利用一種啟動方法來對對象/特性模型290執(zhí)行所需的操作和檢查。一個數(shù)值將被返回以說明操作是否成功。例如,一個TRUE(真)返回值說明操作已經(jīng)成功,而一個FALSE(假)返回值則說明該操作不能被成功地執(zhí)行或者是模型正處于一種無效狀態(tài)。訪問點(例如,對象/特性模型修改點)也可被包含進元模型210以用于調(diào)用語義230。各個模型修改點(例如,CreateObject)都能夠在適當?shù)狞c上調(diào)用各個語義。如果從語義的啟動中接收到表明有一個或多個語義不能成功完成的標志(例如,F(xiàn)ALSE),則操作將退出。
在630中,類型代碼被與第一和第二類集相關聯(lián)起來。類型代碼是一個獨特的標識符,它指定了元數(shù)據(jù)所代表的類型。元模型中所規(guī)定的每個項目(對象和特性)都只有一個唯一的類型代碼。在本發(fā)明的一個典型實施例中,UMA200含有一個變量類型TypeCode_t,它被聲明用來保存類型代碼。在640中,一個預定義的語義集被提供給元模型210的語義注冊表220。
在650中,多個分立的事件(例如,如表1中所示)被識別出來。這些分立事件表示對象/特性模型290可能被修改的情況。在本發(fā)明的一個典型實施例中,各個分立事件都被分配了一個代表其自身的常量,而且聲明了一個變量類型(例如,Event_t)用來保存事件常量。
在660中,提供對象/特性接口280。對象/特性接口280能夠例如防止開發(fā)者直接訪問對象/特性模型290,并且可以限制開發(fā)者修改對象/特性模型290時必須使用的代碼路徑數(shù)。例如,如果一個開發(fā)者想要破壞對象/特性模型290中的一個對象,則必須向對象/特性接口280發(fā)出一個請求,例如附錄1中所列出的UMEObjectI:DestroyObject。
圖7顯示了對象/特性接口280執(zhí)行DestroyObject(對象破壞)請求的一個典型實施例,如圖7所示,對對象/特性模型290的訪問受到控制著DestroyObject請求的對象/特性接口280的限制。例如,在710中,在接收到一個破壞對象的請求之后,對象/特性接口280將與事務管理程序285進行通信以打開一個事務處理進程(例如,DestroyObject功能)。在715中,對象/特性接口280與對象/特性模型290進行通信以找出被請求破壞的對象。在720中,對象/特性接口280將確定是否已找到這個對象。如果沒有,則在725中,事務管理程序285將按照對象/特性接口280的請求重新運行事務處理,并且在730中,事務管理程序將向調(diào)用模塊(例如,用戶界面)返回一個故障代碼。但是,在735中,如果該對象被找到,則對象/特性接口280將為事務管理程序285提供對象破壞信息,并且事務管理程序285會將對象破壞情況記錄進事務處理日志295。在740中,對象/特性接口280在各個對象的所有特性上啟動PreOwnerDestruetion語義。在745中,對象/特性接口280確定是否全部語義都已成功。如果沒有,則在725中,事務管理程序285將按照對象/特性接口280的請求撤回事務處理,并且在730中,事務管理程序將向調(diào)用模塊返回一個故障代碼。
如果所有的PreOwnerDestruction語義都已成功,則在750中,對象/特性接口280將啟動PreDestruction語義。在755中,對象/特性接口280確定是否全部PreDestruction語義都已成功。如果是,則對象將在760中被破壞,然后,在765中,對象/特性接口280與事務管理程序285進行通信以結束該事務處理,并且在770和730中,事務管理程序285將向調(diào)用模塊返回一個成功代碼。但是,如果PreDestruction語義失敗,則在725中,事務管理程序285將按照對象/特性接口280的請求撤回事務處理,并且在730中,事務管理程序將向調(diào)用模塊返回一個故障代碼。
為了限制對象的構筑和破壞,例如,對象的構筑者或破壞者將受到保護以防止開發(fā)者直接啟用或破壞對象。為了限制特性的創(chuàng)建、破壞及修改,例如,特性的數(shù)據(jù)組成將被做成私人性的。在本發(fā)明的一個典型實施例中,UMA200包括一個被稱為訪問程序的類,它含有一個接口類,例如,UMEAccessorI。訪問程序接口類是一個對特性友好的類,而且正是通過訪問程序才使數(shù)據(jù)成員獲得訪問。訪問程序裝有數(shù)據(jù)值以及指令(例如,“設定數(shù)值”或“刪除特性”),并且被植入到特性當中。訪問程序執(zhí)行它們的活動并且返回一個說明活動成功或失敗的標志。訪問程序是通過要求特性提供一個訪問程序而被形成的。這樣就允許用特性來構筑一個能夠控制特性的數(shù)據(jù)類型的訪問程序。一個特性上的所有操作都是通過訪問程序來執(zhí)行的。因此,語義所需的任何代碼都可被放置在所提供的訪問程序基本類中。對訪問程序進行細分的開發(fā)者只需簡單地提供一個數(shù)據(jù)單元和方法就可對其執(zhí)行讀和寫。方法是被提供到訪問程序基本類上的,這樣就允許將其與一個特性捆綁在一起。
如圖6所示,在670中,提供一個事務管理程序285。該事務管理程序285管理著事務處理的活動,而且如果活動失敗,則可使該活動被撤銷或清除。通過在模型操縱的初始階段啟動一個事務處理,然后對各個語義的出錯狀態(tài)進行監(jiān)視,事務管理程序285就可使對象/特性模型290保持在一個有效狀態(tài)中。在本發(fā)明的一個典型實施例中,事務管理程序285在根據(jù)活動而實現(xiàn)修改之前記錄下了對象/特性模型290的一個確切圖像。如果活動已獲成功,則各個變化就被允許保留。如果出現(xiàn)錯誤,則事務管理程序285將恢復舊的圖像。事務管理程序285可以隨著模型的變化而遞增地保存圖像。
作為一個例子,在一個用戶將要創(chuàng)建一個對象并為其設定名稱的單一事務處理中,當對象創(chuàng)建成功時,對象被創(chuàng)建的實事以及對該對象的控制被保存進事務處理日志295。如果用戶隨后將該對象的名稱設定為“Customer”,則特性的創(chuàng)建也被記錄下來,并且舊的數(shù)值(空數(shù)值)被保存進日志。如果用戶隨后又將名稱設定為“Cust”,則舊的數(shù)值(“Customer”)也會被保存進日志。如果這一切全部成功,則會存在一個名為“Cust”的對象。但是,如果對象創(chuàng)建失敗,則事務管理程序285將開始重新運行首先,將名稱從“Cust”改回“Customer”;其次,將已存在的名稱特性一起刪除;最后,刪除對象。此舉可將對象/特性模型290恢復至失敗的事務處理運行之前所處的狀態(tài)。
在本發(fā)明的一個典型實施例中,作為一次活動結果的被改動的對象和特性通過對象/特性接口280被提供給對象/特性模型290。如果該活動所涉及到的語義出錯,則對象/特性接口280將通知事務管理程序285以撤銷該操作。結果,對象/特性模型290被恢復至作為失敗操作結果的受改動的對象和特性被從對象/特性接口280提供給對象/特性模型290之前所處的狀態(tài)。
圖8的流程圖顯示了根據(jù)本發(fā)明用于確定作為事務處理結果的對象/特性模型290凈變化的方法的一個典型實施例。在810中,事務管理程序285例如為作為事務處理結果的對象/特性模型290的凈變化接收一個請求。該作為事務處理結果的對象/特性模型290的凈變化指的是例如對象/特性模型290在事務處理結束時與開始事務處理之前的差異。在820中,事務管理程序285識別出與該事務有關的多個模型變化記錄。在830中,事務管理程序285根據(jù)與該事務有關的多個模型變化記錄中的每一個記錄來確定對象/特性模型290的凈變化。在本發(fā)明的一個典型實施例中,在840中,對象/特性模型290的凈變化可通過顯示在一顯示器上而被提供給一個請求者,如基于UMA的應用程序225。事務管理程序285可以例如通過為事務的多個模型變化記錄中的每一個,記錄確定一個與對象交互作用的各模型變化記錄中活動的凈活動類型變化、以及確定一個與該對象相關的數(shù)據(jù)的凈數(shù)據(jù)變化,從而確定對象/特性模型290的凈變化。
活動的類型是例如一個用于識別一個事務的活動的數(shù)字代碼。各模型變化記錄中活動的凈活動類型變化是由事務管理程序285的一個功能(即,活動一類型功能)所確定的活動類型名稱,它與各個模型變化記錄的活動相關聯(lián),并且被保存在與該事務相關的delta位置中。在本發(fā)明的一個典型實施例中,delta位置中含有對象/特性模型290的凈模型變化,該凈模型變化是事務的各個模型變化記錄中每個記錄的事務管理程序285都完成檢查所得到的事務處理結果。
與對象相關的數(shù)據(jù)指的是保存在delta位置中的數(shù)據(jù),它可包括對象本身、執(zhí)行與對象交互作用的各模型變化記錄的活動之前對象的圖像(pre-image)、執(zhí)行與對象交互作用的各模型變化記錄的活動之后對象的圖像(post-image)、以及對象的特性。對象的凈數(shù)據(jù)變化指的是由事務管理程序285的一個功能(例如,數(shù)據(jù)功能)所確定的數(shù)據(jù),它通過各模型變化記錄的活動而與有關的對象相關聯(lián)起來,并且被保存在與該事務有關的delta位置中。在本發(fā)明的一個典型實施例中,delta位置中含有對象/特性模型290的凈模型變化,該凈模型變化是事務的各個模型變化記錄中每個記錄的事務管理程序285都完成檢查所得到的事務處理結果。務管理程序285將前進至940。但是,如果有與該對象有關的先前活動被記錄在delta位置中,則在930中,事務管理程序285將在(例如)該delta位置中識別出此先前活動的先前活動類型。先前活動類型指的是與先前活動有關的活動類型。先前活動則指的是與同一對象有關并且在執(zhí)行各個模型變化記錄的活動之前受到事務管理程序285檢查的模型變化記錄的活動。
在940中,事務管理程序285根據(jù)當前活動類型、先前活動是否被記錄入delta位置以及先前活動類型而執(zhí)行一個活動類型功能。該活動類型功能可以包括以下內(nèi)容中的至少一項,即為各模型變化記錄確定一個新的活動類型,在delta位置中記錄新的活動類型,從delta位置中刪除先前活動類型,在delta位置中保留先前活動類型,在delta位置中記錄當前活動類型以及在delta位置中記錄活動無效。
delta位置可以是例如一個其中保存有模型變化信息的對象或文件,它可用于例如一個事務或多個事務。在事務管理程序285檢查各事務的每個模型變化記錄時,delta位置的內(nèi)容可以發(fā)生變化。在事務管理程序285完成對所有的模型變化的檢查之后,delta位置的內(nèi)容可導致對象/特性模型290發(fā)生作為事務處理結果的凈變化。在本發(fā)明的一個典型實施例中,事務管理程序285對事務的各個模型變化記錄重復執(zhí)行910至940。在本發(fā)明的一個典型實施例中,當事務的所有模型變化記錄完成之后,delta位置的內(nèi)容就包含了作為事務處理結果的活動類型變化。
圖10顯示了根據(jù)本發(fā)明用于從事務的模型變化記錄中確定凈操作類型變化的規(guī)則的一個示范集。在圖10中,列A、行b、c和d含有示范性的當前活動類型(添加、更新、刪除),它們可以分別對應于與一個對象交互作用的各個模型變化記錄的活動。行a、列C、D和E含有先前活動類型,它們可以分別對應于記錄在與該對象交互作用的delta位置中的先前活動。行a、列B含有先前活動是否存在于delta位置之中。行b、列B、C、D和E;行c、列B、C、D和E;行d、列B、C、D和E包括了一個可由事務管理程序285執(zhí)行的活動類型功能的示范集。
在對作為上述示范性DELETE表A事務處理結果的凈活動變化的確定過程中,事務管理程序285檢查“DELETE Table A”事務的第一模型變化記錄(刪除表A)以識別當前活動類型(如添加、更新或刪除之一)。因為活動是刪除A,所以當前活動類型就是刪除。事務管理程序285確定是否一個與對象(表A)相匹配的先前活動被記錄在與“DELETE Table A”事務相關的delta位置中。由于delta位置當前是空的,所以先前活動并不存在于delta位置中。因此,參考圖10,事務管理程序285將執(zhí)行一個活動類型功能(列B、行d),從而為該活動確定一個新的類型“刪除”,并將“DELETE Table A”記錄入delta位置。
這個功能是根據(jù)作為一個刪除(列A、行d)類型的當前活動類型以及先前活動未被記錄入delta位置(列B、行a)中而完成的。事務管理程序285對“DELETE Table A”事務中剩余的兩個模型變化記錄重復進行分析。當事務管理程序285對最后一個模型變化記錄完成分析之后,delta位置的內(nèi)容中將包含對象/特性模型290的凈活動類型變化以作為“DELETE Table A”事務的處理結果。
圖11的流程圖顯示了根據(jù)本發(fā)明用于從模型變化記錄中確定作為事務處理結果的凈數(shù)據(jù)變化的方法的一個典型實施例。在圖11中,事務管理程序285為與對象有關的數(shù)據(jù)確定凈數(shù)據(jù)變化。在1110中,事務管理程序285為與對象交互作用的各個模型變化記錄的活動確定一個當前活動類型。
在1120中,事務管理程序285確定出是否有先前活動被記錄在與該事務有關的delta位置中。如果沒有,則事務管理程序285將前進至1150。如果有先前活動被記錄在delta位置中,則在1130中,事務管理程序285將在delta位置中識別出此先前活動的先前活動類型。如果有先前活動被記錄在與該事務相關的delta位置中,則在1140中,事務管理程序285還將在與對象相關聯(lián)的delta位置中識別出先前活動所產(chǎn)生的數(shù)據(jù)。
在1150中,事務管理程序285根據(jù)delta位置中的當前活動類型、先前活動是否被記錄在delta位置中、先前活動類型以及與對象有關的數(shù)據(jù)來執(zhí)行一個數(shù)據(jù)功能。數(shù)據(jù)功能可包含以下內(nèi)容中的至少一項,即從delta位置中刪除與對象有關的數(shù)據(jù)、在delta位置中記錄該活動無效、在delta位置中替換與對象有關的數(shù)據(jù)、以及在delta位置中記錄與對象相對應的新的數(shù)據(jù)。
新的數(shù)據(jù)可以包括(例如)pre-image(當前受到檢查的模型變化記錄活動執(zhí)行之前的對象圖像)和post-image(當前受到檢查的模型變化記錄活動執(zhí)行之后的對象圖像)中的至少一個。在本發(fā)明的一個典型實施例中,事務管理程序285對事務的各個模型變化記錄重復執(zhí)行1110至1150。在本發(fā)明的一個典型實施例中,當事務的全部模型變化記錄完成之后,delta位置的內(nèi)容中將包含凈數(shù)據(jù)變化以作為事務處理的結果。
圖12顯示了根據(jù)本發(fā)明用于從事務的模型變化記錄中確定凈數(shù)據(jù)變化的規(guī)則的一個示范集。在圖12中,列V、行w、x和y包含了示范性的當前活動類型(添加、更新、刪除),它們可以分別對應于與一個對象交互作用的各模型變化記錄的活動。行v、列X、Y和Z包含有先前活動的類型,它們分別被與記錄在和對象交互作用的delta位置中的先前活動相關聯(lián)。行v、列W包含有與各模型變化記錄的對象有關的先前活動是否存在于delta位置中。行w、列W、X、Y和Z;行x、列W、X、Y和Z;行y、列W、X、Y和Z包含了可由事務管理程序285執(zhí)行的數(shù)據(jù)功能的一個示范集。
在對作為上述示范性“DELETE Table A”事務處理結果的凈活動變化的確定過程中,事務管理程序285檢查“DELETE Table A”事務的第一模型變化記錄(刪除表A)以識別當前活動類型(如添加、更新或刪除之一)。因為活動是刪除A,所以當前活動類型就是刪除。事務管理程序285確定是否一個與對象(表A)交互作用的先前活動被記錄在與“DELETE Table A”事務相關的delta位置中。由于delta位置中并不存在與表A有關的先前活動已被確定,因此,參考圖12,事務管理程序285將執(zhí)行一個數(shù)據(jù)類型功能(列W、行y),從而在delta位置中為該活動記錄一個“DELETE Table A”的pre-image。
這個功能是根據(jù)當前活動類型是一個刪除(列V、行y)類型以及先前活動未被記錄入delta位置(列W、行v)中而完成的。事務管理程序對“DELETE Table A”事務中剩余的兩個模型變化記錄重復進行分析。當事務管理程序285對最后一個模型變化記錄完成分析之后,delta位置的內(nèi)容中將包含對象/特性模型290的凈數(shù)據(jù)變化以作為“DELETE Table A”事務的處理結果。
上述實施例是本發(fā)明的說明性范例,不應將這些特定實施例看作是對本發(fā)明的限制。本領域的技術人員可對其做出各種變換和修改,但它們都不會脫離由所附權利要求所定義的本發(fā)明的精神或范圍。
權利要求
1.一種方法,包括以下步驟接收一個對作為事務結果的模型凈變化的請求;對與事務相關的多個模型變化記錄進行識別;根據(jù)與事務相關的多個模型變化記錄中的各個記錄來確定模型的凈變化。
2.如權利要求1所述的方法,還包括以下步驟顯示模型的凈變化。
3.如權利要求1所述的方法,其中上述對與事務相關的多個模型變化記錄進行識別的步驟包括在事務日志上找出與事務的開頭相對應的起始位置;在事務日志上找出與事務的結尾相對應的結束位置;以及對起始位置與結束位置之間的多個模型變化記錄之中的每個記錄進行識別。
4.如權利要求3所述的方法,其中上述為事務的多個模型變化記錄中的每個記錄確定模型凈變化的步驟包括為與對象有關的各模型變化記錄的活動確定凈活動類型變化;和為與該對象有關的數(shù)據(jù)確定凈數(shù)據(jù)變化。
5.如權利要求4所述的方法,其中上述為事務的多個模型變化記錄中的每一個記錄的活動確定凈活動類型變化的步驟包括為與對象有關的各模型變化記錄的活動識別出一個當前活動類型;確定與該對象有關的先前活動是否被記錄在與該事務有關的delta位置之中,如果是的話,在delta位置中為先前活動識別出先前活動類型;以及根據(jù)當前活動類型、先前活動是否被記錄在delta位置中以及先前活動類型來執(zhí)行一個活動類型功能。
6.如權利要求5所述的方法,其中上述活動類型功能包括以下內(nèi)容中的至少一項為各模型變化記錄的活動確定一個新的活動類型,在delta位置中記錄新的活動類型,從delta位置中刪除先前活動類型,在delta位置中保留先前活動類型,在delta位置中記錄當前活動類型以及在delta位置中記錄活動無效。
7.如權利要求4所述的方法,其中上述為事務的多個模型變化記錄中的每一個記錄中與該對象有關的數(shù)據(jù)確定凈數(shù)據(jù)變化的步驟包括為與對象交互作用的各模型變化記錄的活動識別當前活動類型;確定與該對象有關的先前活動是否被記錄在與該事務有關的delta位置之中,如果是的話,在delta位置中為先前活動識別出先前活動類型;在與對象有關的delta位置中識別出先前活動所產(chǎn)生的數(shù)據(jù);以及根據(jù)當前活動類型、先前活動是否被記錄在delta位置中、先前活動類型以及delta位置中與對象有關的數(shù)據(jù)來執(zhí)行數(shù)據(jù)功能。
8.如權利要求7所述的方法,其中上述數(shù)據(jù)功能包括以下內(nèi)容中的至少一項從delta位置中刪除與對象有關的數(shù)據(jù),在delta位置中記錄該活動無效,在delta位置中替換與對象有關的數(shù)據(jù),以及在delta位置中記錄與對象相對應的新的數(shù)據(jù)。
9.如權利要求8所述的方法,其中上述記錄在delta位置中的新的數(shù)據(jù)至少包括活動執(zhí)行之前對象的pre-image和活動執(zhí)行之后對象的post-image之中的一個。
全文摘要
本發(fā)明提供了一種方法以用來確定作為事務結果的模型的凈變化。該方法包括接收一個對于作為事務結果的模型凈變化的請求的步驟(圖中,250)。該方法還包括對與事務相關的多個模型變化記錄進行識別的步驟。該方法還包括根據(jù)與事務相關的多個模型變化記錄中的各個記錄來確定并顯示模型的凈變化的步驟(圖中,225)。
文檔編號G06F17/30GK1323416SQ99812225
公開日2001年11月21日 申請日期1999年10月15日 優(yōu)先權日1998年10月16日
發(fā)明者塔德A·德弗勒, 馬克A·魯索, 托馬斯R·比爾博維爾 申請人:聯(lián)合想象計算機公司