專利名稱:面向服務(wù)的商務(wù)構(gòu)架的服務(wù)管理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字計算機(jī)的數(shù)據(jù)處理,尤其涉及面向服務(wù)的商務(wù)構(gòu)架的服務(wù)管理。本發(fā)明涉及數(shù)字計算機(jī)的數(shù)據(jù)處理,特別涉及自述(self describing)商務(wù)對象。
背景技術(shù):
大規(guī)模商務(wù)軟件應(yīng)用有時被用“前端構(gòu)件(front end component)”的術(shù)語來分類,其包括圖形用戶界面(GUI)以便向用戶展示數(shù)據(jù)并從用戶接收數(shù)據(jù)輸入。這樣的前端構(gòu)件是為了特定的用戶定制的(customize)。這樣的軟件應(yīng)用的另一個構(gòu)件有時被稱為“后端構(gòu)件(back end component)”,其存儲商務(wù)數(shù)據(jù)并根據(jù)商務(wù)邏輯處理商務(wù)數(shù)據(jù)。所述后端構(gòu)件檢索、產(chǎn)生和維護(hù)商務(wù)數(shù)據(jù)。所述后端構(gòu)件通常負(fù)責(zé)數(shù)據(jù)的一致性(consistency)和正確性。所述后端構(gòu)件還能夠存儲在各種數(shù)據(jù)之間的關(guān)系。在一個典型的商務(wù)軟件應(yīng)用中,前端構(gòu)件包括應(yīng)用代碼以顯示和集合(aggregate)后端的數(shù)據(jù),并提供幫助以產(chǎn)生請求給所述后端用于更新操作。
后端的數(shù)據(jù)能夠使用關(guān)系數(shù)據(jù)庫術(shù)語(relational database terminology)來表示。在關(guān)系數(shù)據(jù)庫術(shù)語中,實體(entity)是記錄,并且實體類型(entitytype)是一組具有共同屬性的實體,而一個唯一的名稱和一個唯一的描述被指派給所述實體類型。典型地,數(shù)據(jù)庫具有多個二維表,其中每個表表示一種實體類型,而每個表的每一行表示一個實體。屬性(attribute)是對實體或?qū)嶓w類型的特性的描述。典型地,屬性被規(guī)定在數(shù)據(jù)庫的字段(field)或列中。實體類型還可以具有能夠鏈接(link)一個實體類型的一個或多個實體和另一個實體類型的其它實體的關(guān)系。這個鏈接可以使用外來關(guān)鍵字(foreignkey)、通過將一個表中的一個或多個字段指向(pointing to)第二個表的主關(guān)鍵字來建立(done)。這使得從一個表中的一組實體遍歷(traversing)到另一個表中的相關(guān)實體。
發(fā)明內(nèi)容
在一個方面,本發(fā)明的特征在于一種用應(yīng)用服務(wù)器提供服務(wù)的方法,該方法包括從消費者軟件構(gòu)件(software component)收集對來自供應(yīng)商軟件構(gòu)件的服務(wù)的請求;以及用由供應(yīng)商軟件構(gòu)件中的對象提供的方法清單(amanifest of methods)中的一組語義說明(semantic description)來檢查所述請求。
實施例可以包括一個或多個以下特征。所述清單從數(shù)據(jù)庫中的對象的描述的儲存庫(a repository of descriptions)中導(dǎo)出。所述方法還包括執(zhí)行由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法,并基于具有一個或多個方法的語義說明的軟件請求與儲存庫中的對象的匹配組合一個或多個方法的結(jié)果。在一些情況下,該方法還包括為了軟件調(diào)試給供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法的執(zhí)行提供追蹤功能。該方法包括在執(zhí)行期間收集由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法發(fā)送的一個或多個消息。該方法還包括防止在提供的軟件構(gòu)件中的對象為第二消費者軟件構(gòu)件執(zhí)行一個或多個方法,直到完成了與第一消費者軟件構(gòu)件的交易(transaction)。
在一個方面,本發(fā)明提供一種系統(tǒng),其包括第一計算機(jī),用于執(zhí)行客戶程序;第二計算機(jī),用于執(zhí)行服務(wù)器程序;和網(wǎng)絡(luò),用于鏈接第一和第二計算機(jī),以便服務(wù)器程序執(zhí)行以下操作。從客戶程序收集對來自服務(wù)器程序的服務(wù)的請求,并用由服務(wù)器程序提供的對象提供的方法清單中的一組語義說明來檢查該請求。
實施例可以包括一個或多個以下特征。所述清單從數(shù)據(jù)庫中的對象的描述的儲存庫導(dǎo)出。服務(wù)器程序還被配置來執(zhí)行以下操作執(zhí)行由服務(wù)器程序中的對象提供的一個或多個方法,并基于具有一個或多個方法的語義說明的軟件請求與儲存庫中的對象的匹配組合一個或多個方法的結(jié)果。服務(wù)器程序還包括為了軟件調(diào)試給服務(wù)器程序提供的對象提供的一個或多個方法的執(zhí)行提供追蹤功能。服務(wù)器程序還被配置來在執(zhí)行期間收集由服務(wù)器程序中的對象提供的一個或多個方法發(fā)送的一個或多個消息。服務(wù)器程序還被配置來防止由服務(wù)器程序提供的對象為第二客戶程序執(zhí)行一個或多個方法,直到完成了與第一客戶程序的交易。
這些以及其它實施例具有一個或多個以下優(yōu)點。由基于服務(wù)的體系結(jié)構(gòu)中的應(yīng)用服務(wù)器外部提供的服務(wù)可以在應(yīng)用服務(wù)器構(gòu)件以外被靈活地構(gòu)建,并且還以一致的方式由應(yīng)用服務(wù)器提供了各種額外的功能。這就允許了在各種應(yīng)用構(gòu)件之間(cross)以一致方式提供許多功能。橫截(cross cutting)功能,諸如交易和并行(concurrency)管理、追蹤和調(diào)試、錯誤處理,能夠由來自應(yīng)用服務(wù)器的普通代碼(generic code)來進(jìn)行,其由應(yīng)用代碼獨立地提供。在儲存庫模型以外構(gòu)造新的和更好的適合的服務(wù),而不需要來自(from)由應(yīng)用服務(wù)器構(gòu)件提供的基本方法(elementary method)的附加編碼。
本發(fā)明的一個或多個實施方式的細(xì)節(jié)將在下面附圖和說明書中描述。通過說明書、附圖和權(quán)利要求書,本發(fā)明的其它特征和優(yōu)點將更加清楚。
圖1是商務(wù)軟件應(yīng)用的示例邏輯表示的框圖。
圖2是商務(wù)軟件應(yīng)用的網(wǎng)絡(luò)配置的視圖。
圖3是圖1的商務(wù)軟件應(yīng)用的框圖。
圖4是元模型儲存庫的結(jié)構(gòu)的統(tǒng)一建模語言(Unified ModelingLanguage,UML)表示。
圖5是商務(wù)處理的流程圖。
圖6是表示在商務(wù)軟件應(yīng)用的不同方面之間的關(guān)系的圖。
具體實施例方式
圖1說明了商務(wù)軟件體系結(jié)構(gòu)2的概覽的邏輯表示,其包括客戶3、分離層(separation layer)5、儲存庫7和后端數(shù)據(jù)9和9′。客戶3提供用戶界面(UI),其使得用戶能夠與后端數(shù)據(jù)9和/或9′交互(interact)。后端數(shù)據(jù)9和9′可以與不同的后端應(yīng)用相關(guān)聯(lián),和/或具有相互不同的安排和格式。分離層5將客戶3提供的前端用戶界面與后端數(shù)據(jù)9和9′分離開。這種分離使得客戶3能夠以一致和相似的方式與后端數(shù)據(jù)9和9′交互,而不管在后端數(shù)據(jù)9和9′之間的與格式或與應(yīng)用相關(guān)聯(lián)的不同。換句話說,分離層5給后端數(shù)據(jù)9和9′提供了一個規(guī)范的接口,所以客戶3被配置與分離層5交互,并且只有在分離層5改變時才需要進(jìn)行更新。對后端數(shù)據(jù)9和9′的改變并不會必然地導(dǎo)致對客戶3的更新。而且,分離層5是可以伸縮的(scalable),并被配置成處理后端數(shù)據(jù)9和9′、任何其它異類的(disparate)后端數(shù)據(jù)、以及同樣連接到分離層5的后端服務(wù)的改變和增長。
如在下面更具體描述的,分離層5基于一種元模型(meta model),其定義了后端數(shù)據(jù)(例如,9和9′)如何被表示在分離層5中。元數(shù)據(jù)被存儲在儲存庫7中,其描述了后端數(shù)據(jù)9和9′如何適應(yīng)于元模型表示??蛻?利用由分離層5定義的普通命令集(generic command set)與后端數(shù)據(jù)9和9′交互。如下面更具體地描述的,分離層5使用儲存庫7中的元數(shù)據(jù)訪問服務(wù)供應(yīng)商,以便實現(xiàn)(effect)所請求的對后端數(shù)據(jù)9和9′的處理(manipulation),其中所述服務(wù)供應(yīng)商執(zhí)行來自客戶3的普通命令。服務(wù)供應(yīng)商是可配置的,以便對不同的后端數(shù)據(jù)9和9′可以使用不同的服務(wù)供應(yīng)商。分離層5包括一個接口(例如,服務(wù)管理器),其隱藏了相應(yīng)的后端數(shù)據(jù)9和9′的特性以及實施(即,服務(wù)供應(yīng)商)的均勻度(granularity)和分布。
圖2說明了商務(wù)軟件體系結(jié)構(gòu)2的示例實施。如圖2所示,商務(wù)軟件體系結(jié)構(gòu)2包括第一計算機(jī)4和第二計算機(jī)6。計算機(jī)4和6的每一個都包括處理器、隨機(jī)存取存儲器(RAM)、程序存儲器(例如,如閃速只讀存儲器(ROM)的可寫ROM)、硬盤驅(qū)動器控制器、視頻控制器、以及由處理器(CPU)總線耦合的輸入/輸出(I/O)控制器。例如,計算機(jī)4和6可以在ROM中被預(yù)編程,或者計算機(jī)4和6可以通過將程序從另一個來源(例如,從軟盤、CD-ROM、或另一臺計算機(jī))載入到RAM中用于被處理器執(zhí)行來進(jìn)行編程(以及重新編程)。硬盤驅(qū)動控制器被耦合到硬盤,所述硬盤適于存儲可執(zhí)行的計算機(jī)程序,包括具體實現(xiàn)本發(fā)明的程序以及數(shù)據(jù)。I/O控制器被I/O總線耦合到I/O接口。I/O接口通過通信鏈路以模擬或數(shù)字形式接收和傳輸數(shù)據(jù),例如,通過串行鏈路、局域網(wǎng)、無線鏈路、或并行鏈路。I/O總線還耦合了顯示器和鍵盤?;蛘撸蛛x的連接(分離的總線)可以被用于I/O接口、顯示器和鍵盤。
網(wǎng)絡(luò)20連接計算機(jī)4和6。網(wǎng)絡(luò)20是任何形式或介質(zhì)的數(shù)字?jǐn)?shù)據(jù)通信,例如,通信網(wǎng)絡(luò)。通信網(wǎng)絡(luò)20的例子包括局域網(wǎng)(“LAN”)和廣域網(wǎng)(“WAN”),例如,因特網(wǎng)。
計算機(jī)4執(zhí)行前端應(yīng)用程序12的指令。應(yīng)用程序12表示商務(wù)軟件體系結(jié)構(gòu)2的前端構(gòu)件。在計算機(jī)6上運(yùn)行的服務(wù)管理器16是在前端應(yīng)用程序12和一組后端服務(wù)供應(yīng)商26之間的服務(wù)層。服務(wù)管理器16給前端應(yīng)用程序12提供服務(wù)接口,以啟動與在計算機(jī)6上運(yùn)行的后端服務(wù)供應(yīng)商26集的間接交互。這個服務(wù)接口允許對于前端應(yīng)用程序12和后端服務(wù)供應(yīng)商26集的軟件開發(fā)的部分分離。
計算機(jī)6包括數(shù)據(jù)存儲設(shè)備22,其存儲后端數(shù)據(jù)庫24,而后端數(shù)據(jù)庫24包含能夠被后端服務(wù)供應(yīng)商26集使用的數(shù)據(jù)。計算機(jī)6還包括數(shù)據(jù)存儲設(shè)備8,其包含信息儲存庫18,其定義和描述了由后端服務(wù)供應(yīng)商26集提供的服務(wù)。儲存庫18中的元數(shù)據(jù)根據(jù)元模型來進(jìn)行組織。
一般,元模型是作為用來描述特定領(lǐng)域(domain)的詞匯(vocabulary)的“概念(concept)”的集合。典型的,元模型根據(jù)嚴(yán)格規(guī)則集(rule set)來建立,所述嚴(yán)格規(guī)則集在大多數(shù)情況下是從實體關(guān)系屬性或面向?qū)ο蟮慕?dǎo)出的。前端應(yīng)用程序12可以經(jīng)由服務(wù)管理器16訪問(以及根據(jù)該嚴(yán)格規(guī)則集來解釋)儲存庫18的內(nèi)容。這些服務(wù)支持應(yīng)用程序12的功能,并且除了修改所存儲的數(shù)據(jù)以外還包括檢索和讀取數(shù)據(jù)。服務(wù)供應(yīng)商26能夠訪問或修改在后端數(shù)據(jù)庫24中存儲的數(shù)據(jù),以便向前端應(yīng)用程序12提供服務(wù)。當(dāng)接收到來自前端應(yīng)用程序12的請求時,為了提供服務(wù),后端服務(wù)供應(yīng)商26集或者訪問或修改在后端數(shù)據(jù)庫24中存儲的數(shù)據(jù),或者計算新的數(shù)據(jù)。
儲存庫18定義用于請求由后端服務(wù)供應(yīng)商26集提供的服務(wù)的句法,在語義上描述所述服務(wù)。前端應(yīng)用程序12執(zhí)行時,前端應(yīng)用程序12可以使用來自儲存庫18的這種句法和語義說明(通過服務(wù)管理器16訪問)來確定什么服務(wù)前端應(yīng)用程序12能夠使用以滿足其需要。用于存儲的或計算的后端數(shù)據(jù)的這種句法和語義說明可以被稱為“元數(shù)據(jù)”。這種存儲的或計算的后端數(shù)據(jù)概念上使用面向?qū)ο蟮男g(shù)語按照商務(wù)對象(business object)來組織,其中每個商務(wù)對象是類別或數(shù)據(jù)實體類型的一個實例。在一個例子中,一個類別的商務(wù)對象參考(refer to)關(guān)系數(shù)據(jù)庫表,其中表中的每行數(shù)據(jù)表示一個特定商務(wù)對象的數(shù)據(jù)。在這個例子中,表中的每個字段表示商務(wù)對象類別的一個屬性。在另一個例子中,存在一種類別的商務(wù)對象,其部分地參考關(guān)系數(shù)據(jù)庫表,這樣表中的一些字段表示商務(wù)對象的屬性,而其它字段在請求時計算。
在商務(wù)軟件體系結(jié)構(gòu)2中,提供給前端應(yīng)用程序12的服務(wù)焦點在于(focus on)在于數(shù)據(jù)(即,以數(shù)據(jù)為中心(data-centric)),所以儲存庫18中的這些服務(wù)的描述也是以數(shù)據(jù)為中心的。因此,儲存庫18中的元數(shù)據(jù)圍繞著對這些商務(wù)對象的類別的表現(xiàn)來構(gòu)建。這種元數(shù)據(jù)包括方面(aspects)、或這些商務(wù)對象類別表現(xiàn)的描述、以及對這些方面的可能操作的描述,諸如選擇、插入、更新、刪除、按照關(guān)系選擇、以及更新服務(wù)供應(yīng)商26提供的字段。這些方面的每個描述包括數(shù)據(jù)屬性,以及可以請求的、由服務(wù)供應(yīng)商26集對這些方面的實例執(zhí)行的動作(actions)。
數(shù)據(jù)的分類、數(shù)據(jù)類別之間的關(guān)系、訪問數(shù)據(jù)的預(yù)建查詢(pre-builtqueries)、以及其它由后端服務(wù)供應(yīng)商26集提供的數(shù)據(jù)的描述都由儲存庫18來表現(xiàn)。這種由后端服務(wù)供應(yīng)商26集提供的數(shù)據(jù)(例如,存儲在后端數(shù)據(jù)庫24中)的表現(xiàn)或元數(shù)據(jù)描述了后端數(shù)據(jù)庫24中的不同的抽象類型或類別的數(shù)據(jù),以及不同的數(shù)據(jù)類別如何相互關(guān)聯(lián)。對象是這些不同抽象類型的實例。元數(shù)據(jù)是關(guān)于數(shù)據(jù)而不是數(shù)據(jù)內(nèi)容的信息。元數(shù)據(jù)還定義了可以對數(shù)據(jù)庫24中的數(shù)據(jù)執(zhí)行的一組預(yù)建查詢。
儲存庫18中的語義說明能夠使前端應(yīng)用程序12確定從服務(wù)管理器16請求哪些服務(wù)。這些服務(wù)通常采用請求數(shù)據(jù)的形式來顯示。前端應(yīng)用程序12讀取儲存庫18中的元數(shù)據(jù),并且能夠靈活地請求以元數(shù)據(jù)所指定的不同方式組織的數(shù)據(jù)。例如,具有兩個不同儲存庫18的兩個服務(wù)管理器16處理確定公司A和B的書價的服務(wù)。對于A和B,書價用具有不同數(shù)據(jù)字段的不同方面來表現(xiàn)。前端應(yīng)用程序12讀取A的儲存庫18,以獲得關(guān)于對來自A的服務(wù)供應(yīng)商26的特定書籍的數(shù)據(jù)描述(包括價格)。前端應(yīng)用程序12讀取B的儲存器18,以獲得關(guān)于對來自B的服務(wù)供應(yīng)商26的特定書籍的數(shù)據(jù)描述(包括價格)。前端應(yīng)用程序12能夠請求和顯示來自A的服務(wù)供應(yīng)商26的信息,并且該信息是與來自B的服務(wù)供應(yīng)商26的信息不同的方式組織的,以展示書價信息給用戶。
對于請求儲存庫18中的語義說明所描述的服務(wù),服務(wù)管理器16給后端商務(wù)對象的服務(wù)提供了規(guī)范接口。這種規(guī)范接口包括一組對商務(wù)對象的標(biāo)準(zhǔn)操作。這樣的對商務(wù)對象的標(biāo)準(zhǔn)操作包括選擇、插入、更新、刪除、按照關(guān)系選擇、以及更新字段。這些標(biāo)準(zhǔn)操作是為了容易理解和使用。這些標(biāo)準(zhǔn)操作的使用通過儲存庫18的元模型的嚴(yán)格規(guī)則集來理解。而且,儲存庫18還包括對操作使用的副作用的有記錄的建模(documented modeling)。存儲商務(wù)對象的操作模型的副作用受到執(zhí)行所述方法的影響。例如,“刪除”通常對與被刪除對象有關(guān)的其它存儲的商務(wù)對象有副作用。其它標(biāo)準(zhǔn)操作執(zhí)行更多特殊任務(wù),并支持在前端應(yīng)用程序12和服務(wù)管理器16之間的交易功能(例如,鎖定操作)。
服務(wù)管理器16提供的規(guī)范接口還包括為特定類別的商務(wù)對象定義的特殊動作,以及針對商務(wù)對象類別群集定義的查詢。所述群集被作為元數(shù)據(jù)中的服務(wù)模塊(以下將更具體地描述)建模。這些動作和查詢也被定義在儲存庫18的元數(shù)據(jù)中。
在執(zhí)行期間,前端應(yīng)用程序12發(fā)出服務(wù)請求給服務(wù)管理器16,服務(wù)管理器16檢查所述請求與儲存庫18中元數(shù)據(jù)的一致性,然后服務(wù)管理器16根據(jù)儲存庫數(shù)據(jù)庫18中的元數(shù)據(jù)將所述請求傳給后端服務(wù)供應(yīng)商26。由于后端服務(wù)供應(yīng)商26和數(shù)據(jù)庫24符合儲存庫18中的元數(shù)據(jù)的定義和描述,后端服務(wù)供應(yīng)商26集以及數(shù)據(jù)庫24中的數(shù)據(jù)的實施方式獨立于應(yīng)用12。數(shù)據(jù)庫24可以是關(guān)系數(shù)據(jù)庫。然而,數(shù)據(jù)庫24可以被修改以使用除關(guān)系數(shù)據(jù)庫以外的不同形式的數(shù)據(jù)組織(data organization),并且如果后端服務(wù)供應(yīng)商26和數(shù)據(jù)庫24仍然符合儲存庫18中的元數(shù)據(jù),則前端應(yīng)用程序12就不需要被修改。一個這樣的不同模式的數(shù)據(jù)庫24的數(shù)據(jù)結(jié)構(gòu)可以是面向?qū)ο蟮臄?shù)據(jù)庫。
前端應(yīng)用程序12提供顯示在監(jiān)視器10上的用戶界面。前端應(yīng)用程序12提供應(yīng)用代碼以顯示和集合從后端服務(wù)供應(yīng)商26集接收的數(shù)據(jù)。前端應(yīng)用程序12經(jīng)由服務(wù)管理器16產(chǎn)生請求給后端服務(wù)供應(yīng)商26集,用于除了更多的特殊操作以外的標(biāo)準(zhǔn)操作,諸如選擇、插入、更新、刪除、和執(zhí)行,。前端應(yīng)用程序12是以交互為中心的,焦點在于集合后端服務(wù)供應(yīng)商26的數(shù)據(jù)以及將交互(interactive)步驟組合為屏幕和聯(lián)合企業(yè)的屏幕元素(syndicated screenelements)的流程。
前端應(yīng)用程序12包含面向用戶界面(UI)的應(yīng)用的屏幕流程(screen-flow)邏輯,并且前端應(yīng)用程序12將UI綁定到儲存庫18的元數(shù)據(jù)。前端應(yīng)用程序12可以通過儲存庫18中的元數(shù)據(jù)的服務(wù)描述被后端服務(wù)供應(yīng)商26間接綁定到特定后端服務(wù)集。前端應(yīng)用程序12還可以由各種普通的以交互為中心的前端層(front-end layers)來形成,這些前端層只通過配置被服務(wù)管理器16綁定到到高度標(biāo)準(zhǔn)化的服務(wù)層,所述服務(wù)管理器16擔(dān)當(dāng)?shù)胶蠖朔?wù)供應(yīng)商26的中介。
在一些實施方式中,服務(wù)管理器代理14為前端應(yīng)用程序12給出了對由服務(wù)管理器16提供的服務(wù)接口的緩沖的訪問。服務(wù)管理器代理14是計算機(jī)4上的服務(wù)器,其作為在前端應(yīng)用程序12和服務(wù)管理器16之間的中介,以便商務(wù)軟件體系結(jié)構(gòu)2能夠保證安全性、管理控制、和高速緩存服務(wù)。服務(wù)管理器16提供排隊功能,這被前端應(yīng)用程序12用來將若干服務(wù)請求或命令(導(dǎo)致服務(wù)方法)捆扎(bundie)為單一的服務(wù)方法隊列,以便節(jié)省往返周期(round trip)。服務(wù)管理器代理14允許前端應(yīng)用程序12和服務(wù)管理器16分開在不同的計算機(jī)4和6上。而且,服務(wù)管理器代理14的使用可以允許服務(wù)管理器16和后端服務(wù)供應(yīng)商26集分布在多臺計算機(jī)上。
在一個例子中,服務(wù)管理器代理14利用SOAP(簡單對象訪問協(xié)議,Simple Object Access Protocol)通過網(wǎng)絡(luò)20與服務(wù)管理器16進(jìn)行通信。SOAP是一種用于使運(yùn)行在一種類型的操作系統(tǒng)(諸如可從華盛頓州雷蒙德的微軟公司得到的WindowsXP操作系統(tǒng))中的程序與相同或其它類型的操作系統(tǒng)(諸如Linux)中的程序進(jìn)行通信的方式,其利用了萬維網(wǎng)的超文本傳輸協(xié)議(HTTP)和可擴(kuò)展標(biāo)記語言(XML)作為信息交換的機(jī)制。由于安裝了網(wǎng)絡(luò)協(xié)議,并且它們可以被所有主要操作系統(tǒng)平臺使用,HTTP和XML就為針對網(wǎng)絡(luò)中運(yùn)行在不同操作系統(tǒng)上的程序如何進(jìn)行相互通信的問題提供了一個解決方案。SOAP準(zhǔn)確地規(guī)定了如何編碼HTTP消息頭和XML文件,以便在一臺計算機(jī)中的程序能夠調(diào)用(call)和傳送信息給另一臺計算機(jī)中的程序。SOAP還規(guī)定了被調(diào)用的程序如何返回一個響應(yīng)。
如圖3所示,服務(wù)管理器16為前端應(yīng)用程序12提供了一個接口(由儲存庫18中的元數(shù)據(jù)定義),其隱藏了來自后端服務(wù)供應(yīng)商26集的相應(yīng)后端服務(wù)供應(yīng)商和數(shù)據(jù)庫24中的數(shù)據(jù)的特性。前端應(yīng)用程序12利用這個接口從后端數(shù)據(jù)庫24檢索數(shù)據(jù)以顯示在圖形用戶界面(GUI)28中用于與用戶交互。
服務(wù)管理器16通過接收和執(zhí)行來自前端應(yīng)用程序12的對后端服務(wù)供應(yīng)商26的請求來為前端應(yīng)用程序12提供所述接口。在每次服務(wù)管理器16接收到請求之后,服務(wù)管理器16將該請求委派給服務(wù)供應(yīng)商30、32、34、40、42、44和46。服務(wù)供應(yīng)商30是軟件類別儲存庫服務(wù)供應(yīng)商的一個實例。服務(wù)供應(yīng)商32、34、40、42、44和46表示軟件類別的實例,諸如查詢服務(wù)供應(yīng)商類別(32)、方面(aspect)服務(wù)供應(yīng)商類別(34)、交易服務(wù)供應(yīng)商類別(40)、鎖定服務(wù)供應(yīng)商類別(42)、動作服務(wù)供應(yīng)商類別(44)、和查詢關(guān)系服務(wù)供應(yīng)商類別(46)。服務(wù)供應(yīng)商32、34、40、42、44和46的軟件類別可被實施成由ABAP類別庫維護(hù)的ABAP全局類別(global class),所述類別庫使用可從德國Walldorf的SAP公司得到的ABAP開發(fā)環(huán)境。它們也可以由在任何其它平臺上的任何其它編程語言來實現(xiàn),例如,Linux平臺的Java或Windows平臺的C#。
儲存庫服務(wù)供應(yīng)商30處理請求以取得(get)或修改來自儲存庫18的元數(shù)據(jù)。查詢服務(wù)供應(yīng)商32處理來自前端應(yīng)用程序12的、對于后端數(shù)據(jù)庫24中的數(shù)據(jù)的查詢。方面服務(wù)供應(yīng)商34處理訪問和修改數(shù)據(jù)、根據(jù)關(guān)系導(dǎo)航、以及調(diào)用動作。方面服務(wù)供應(yīng)商34具有對應(yīng)可以從服務(wù)管理者16請求的方面的標(biāo)準(zhǔn)操作的標(biāo)準(zhǔn)方法集。這些標(biāo)準(zhǔn)操作包括選擇、插入、更新、刪除、按照關(guān)系選擇、以及更新字段。交易服務(wù)供應(yīng)商40允許商務(wù)邏輯(businesslogic)作用在前端應(yīng)用程序12和服務(wù)供應(yīng)商26之間的交易的不同狀態(tài)。鎖定服務(wù)供應(yīng)商42使能后端數(shù)據(jù)庫24中的數(shù)據(jù)類型的并行訪問的分離。動作服務(wù)供應(yīng)商44使能對方面的動作的執(zhí)行。查詢關(guān)系服務(wù)供應(yīng)商46是關(guān)系的目標(biāo)方面的接口。在一些例子中,服務(wù)管理器16可以具有用于表現(xiàn)服務(wù)的儲存庫18中的不同元素的多個不同的服務(wù)供應(yīng)商實例32、34、40、42、44和46。當(dāng)接收到對于由儲存庫18中的元素所表示的服務(wù)的請求時,服務(wù)管理器16可以在儲存庫18中元素的元數(shù)據(jù)中查找服務(wù)供應(yīng)商的名稱(例如,32、34、40、42、44和46)。例如,描述儲存庫18中的方面的元數(shù)據(jù)定義了哪個方面服務(wù)供應(yīng)商34被指派來處理用于所述方面的服務(wù)。服務(wù)管理器16使用元數(shù)據(jù)中的這個信息將請求從前端應(yīng)用程序12指向適當(dāng)?shù)姆矫娣?wù)供應(yīng)商34。類似地,描述儲存庫18中的查詢的元數(shù)據(jù)定義了哪個查詢服務(wù)供應(yīng)商32被指派來處理用于所述查詢的服務(wù)。
服務(wù)管理器16提供的接口向前端應(yīng)用程序12提供請求或命令。如前所述,標(biāo)準(zhǔn)命令的選擇、插入、更新、刪除、按照關(guān)系選擇、以及更新字段是對于儲存庫18中方面的標(biāo)準(zhǔn)操作。這些標(biāo)準(zhǔn)操作由方面服務(wù)供應(yīng)商34提供,并對應(yīng)一些前端應(yīng)用程序12可用的請求或命令?!斑x擇”命令提供了一種能力,以便如果知道了由方面服務(wù)供應(yīng)商34提供的數(shù)據(jù)類型(例如,存儲在數(shù)據(jù)庫24中)的實例的標(biāo)識符(或關(guān)鍵字),前端應(yīng)用程序12可以選擇并讀取這些實例的屬性?!安迦搿泵钤试S前端應(yīng)用程序12添加方面服務(wù)供應(yīng)商34提供的數(shù)據(jù)類型(例如,存儲器數(shù)據(jù)庫24中)的新的實例。“按照關(guān)系選擇”命令提供了一種能力,以便如果知道數(shù)據(jù)類型,前端應(yīng)用程序12可以如儲存庫18中所定義的、找出與這個數(shù)據(jù)類型有關(guān)的其它數(shù)據(jù)類型?!案隆泵钐峁┝艘环N能力,以便修改由方面服務(wù)供應(yīng)商34提供的數(shù)據(jù)類型(例如,存儲在后端數(shù)據(jù)庫24中)的實例?!皠h除”命令提供了一種功能,以便刪除由方面服務(wù)供應(yīng)商34提供的一種或多種數(shù)據(jù)類型(例如,存儲在后端數(shù)據(jù)庫24中)的一個或多個選擇的實例。
“執(zhí)行”動作命令提供了一種功能,以便對由方面服務(wù)供應(yīng)商34提供的一種或多種數(shù)據(jù)類型(例如,存儲在數(shù)據(jù)庫24中)的一個或多個實例執(zhí)行語義定義的動作?;蛘咚龇矫娣?wù)供應(yīng)商34,或者所述動作服務(wù)供應(yīng)商44執(zhí)行所述執(zhí)行動作命令。“查詢(query)”命令提供一種能力,以便搜索和找到感興趣的特定數(shù)據(jù)。查詢命令是一種方法,具有固定的搜索參數(shù)集以及具有定義的結(jié)構(gòu)的結(jié)果集合。查詢是針對特定服務(wù)模塊、或儲存庫18的元數(shù)據(jù)中的方面群集來定義的。查詢服務(wù)供應(yīng)商32執(zhí)行查詢命令。
儲存庫18中的元數(shù)據(jù)被分類為數(shù)據(jù)類型或類別。表現(xiàn)儲存庫18中的數(shù)據(jù)類型分類的元模型類別的名稱具有后綴“描述符”,以表達(dá)它們屬于所述元模型,以及將它們與服務(wù)管理器16使用的運(yùn)行時間類別相區(qū)分。儲存庫18的元數(shù)據(jù)類別的描述符以及它們的類別關(guān)系在圖4中使用統(tǒng)一建模語言(UML)類圖50來說明。
比較元數(shù)據(jù)與由關(guān)系數(shù)據(jù)庫術(shù)語所描述的數(shù)據(jù),儲存庫18中的方面可以表現(xiàn)完全或部分地存儲在后端數(shù)據(jù)庫24中的類別或?qū)嶓w類型,并且方面描述符56除了關(guān)于實體類型的其它信息以外還包括實體類型的屬性。儲存庫18中的元數(shù)據(jù)還可以包括關(guān)系描述符84,其將可以在數(shù)據(jù)庫24中實施的方面之間的關(guān)系定義為利用關(guān)系數(shù)據(jù)庫中的外鍵碼的關(guān)系。元數(shù)據(jù)還可以包括服務(wù)模塊描述符54,其表示方面集合的服務(wù)模塊和具有預(yù)先確定的查詢用于訪問數(shù)據(jù)庫24中的數(shù)據(jù)。
儲存庫18中定義的服務(wù)模塊是用于特定應(yīng)用領(lǐng)域或產(chǎn)業(yè)的商務(wù)軟件體系結(jié)構(gòu)的應(yīng)用集的構(gòu)建塊(例如前端應(yīng)用程序12)。服務(wù)模塊對實施和商務(wù)邏輯進(jìn)行封裝并用一種統(tǒng)一的規(guī)范方法來提供對數(shù)據(jù)和功能性的訪問。用于儲存庫18中的服務(wù)模塊的例子是“商務(wù)伙伴”、“雇員”、“銷售訂單”或“商務(wù)活動”。服務(wù)模塊描述54描述存儲庫18中的元數(shù)據(jù)的數(shù)據(jù)模型中的服務(wù)模塊以及如何通過來自應(yīng)用程序12的查詢來訪問服務(wù)模塊。
在儲存庫18中,每個定義的查詢都是一個入口點,以經(jīng)由服務(wù)管理器16搜索由服務(wù)供應(yīng)商26提供的數(shù)據(jù)類型實例(由方面來表示)。“關(guān)鍵字(key)”是服務(wù)供應(yīng)商26提供的數(shù)據(jù)類型的實例的標(biāo)識符?!皠幼?action)”是關(guān)于方面的一個或多個實例的特殊方法?!敖Y(jié)構(gòu)(structure)”是表現(xiàn)方面的數(shù)據(jù)的屬性的集合。“關(guān)系”是源和目標(biāo)方面的對象之間的關(guān)系。服務(wù)模塊組與服務(wù)模塊相關(guān)聯(lián),并且是方面、關(guān)系、和查詢的集合。方面組與方面相關(guān)聯(lián),并且是關(guān)系、方面動作、和字段描述符86的集合。儲存庫18中的元數(shù)據(jù)還包括對每個包括在可用后端(例如,后端數(shù)據(jù)庫24)中的方面、查詢、關(guān)鍵字、動作、結(jié)構(gòu)、關(guān)系、服務(wù)模塊組、以及方面組的文字描述。所以,儲存庫18中的元數(shù)據(jù)的組織可以用那些數(shù)據(jù)類型(例如,方面、查詢、關(guān)鍵字、動作、結(jié)構(gòu)、關(guān)系、服務(wù)模塊組、以及方面組)來描述。
方面、查詢、關(guān)鍵字、以及動作的屬性的數(shù)據(jù)模型是基于結(jié)構(gòu)描述符74的。在一個例子中,每個方面具有一個結(jié)構(gòu)描述符74,其定義了方面的數(shù)據(jù)屬性。結(jié)構(gòu)描述符74參考儲存庫18中的數(shù)據(jù)字典。數(shù)據(jù)字典是為了程序員以及其他需要參考數(shù)據(jù)字典的人的利益,對于數(shù)據(jù)模型中數(shù)據(jù)對象或項目的描述的收集。結(jié)構(gòu)描述符74可以用XML模式,或者儲存庫18中的一個或多個數(shù)據(jù)庫表來定義。
在一個例子中,定義在儲存庫18中的結(jié)構(gòu)描述符74包括數(shù)據(jù)庫表中的扁平(flat)結(jié)構(gòu)。扁平結(jié)構(gòu)為一序列屬性名稱和簡單數(shù)值類型的字段描述符86對,所述簡單數(shù)值類型諸如實型、整型、字符串、以及布爾(Boolean)。例如,定義二維點的結(jié)構(gòu)描述符74可以為列表{X,real,Y,real},其中X和Y是具有實數(shù)值的屬性名稱。
在儲存庫18的另一個例子中,結(jié)構(gòu)描述符74可以包括其它結(jié)構(gòu)描述符74的嵌套和收集。當(dāng)使用定義較小方面的子結(jié)構(gòu)(sub-structure)的關(guān)鍵字不再有意義時,其它結(jié)構(gòu)描述符74或子結(jié)構(gòu)的嵌套使得產(chǎn)生較大的方面是有用的。
對于前端應(yīng)用程序12通過服務(wù)管理器16訪問來自服務(wù)供應(yīng)商26的數(shù)據(jù)(例如,存儲在后端數(shù)據(jù)庫24中的數(shù)據(jù)),商務(wù)對象類別的實例被由服務(wù)模塊中唯一的關(guān)鍵字來識別,例如訂單的數(shù)量或產(chǎn)品的ID。為了為服務(wù)模塊中的不同方面區(qū)分不同的關(guān)鍵字類型,關(guān)鍵字描述符64定義了不同類型的關(guān)鍵字。關(guān)鍵字描述符64與可以包括多于一個數(shù)據(jù)屬性的結(jié)構(gòu)描述符74相關(guān)聯(lián)。在一個例子中,每個關(guān)鍵字具有一個字符串屬性。服務(wù)模塊可以與不同方面的不同關(guān)鍵字描述符64相關(guān)聯(lián),例如,一個訂單關(guān)鍵字可以具有另一個關(guān)鍵字描述符64作為訂單項目關(guān)鍵字。
服務(wù)模塊描述符54包括對方面描述符56的收集。方面描述符56指的是一個結(jié)構(gòu)描述符74和一個關(guān)鍵字描述符64。結(jié)構(gòu)描述符74包括相應(yīng)關(guān)鍵字描述符64的所有關(guān)鍵字屬性。關(guān)鍵字描述符64是特殊的方面描述符56。關(guān)鍵字的關(guān)鍵字描述符64屬性參考自身為自引用。在簡單銷售訂單服務(wù)模塊中的方面描述符56的例子可以包括訂單、訂單細(xì)節(jié)、發(fā)貨地址、收費地址、以及諸如OrderId和訂單項目關(guān)鍵字的關(guān)鍵字方面的描述符的訂單項目。服務(wù)模塊描述符54規(guī)定支持的方面描述符56的收集。多個服務(wù)模塊描述符54可以與相同的方面描述符56相關(guān)聯(lián)。
方面描述符56相互相關(guān),其由關(guān)系描述符84來規(guī)定。關(guān)系描述符84有一個源方面描述符56和一個目標(biāo)方面描述符56。從這個意義上來講,關(guān)系描述符84被定向。關(guān)系描述符84還具有可選基數(shù)(cardinality)(例如,1…n)和范疇(category)。例如,支持的范疇為父輩-子輩或子輩-父輩。
關(guān)系描述符84定義在源方面A和目標(biāo)方面B之間的關(guān)系,其意味著能夠從方面A的實例遍歷到方面B的實例。例如,給出方面A和B被在后端數(shù)據(jù)庫24中實施為關(guān)系數(shù)據(jù)庫表,其意味著從對應(yīng)方面A的表中的一個或多個字段指向?qū)?yīng)方面B的表中的主關(guān)鍵字(primary key)。關(guān)系描述符84定義了來自源方面A和目標(biāo)方面B的父輩-子輩關(guān)系,這意味著方面B依賴于方面A的存在。例如,給出方面A和B被在后端數(shù)據(jù)庫24中實施為關(guān)系數(shù)據(jù)庫表,這意味著對應(yīng)方面B的表中的主關(guān)鍵字是從對應(yīng)方面A的表中導(dǎo)出的。關(guān)系描述符84被提出來描述從相同服務(wù)模塊中的一個方面到另一個的內(nèi)部導(dǎo)航,例如,在銷售訂單服務(wù)模塊中從訂單到發(fā)貨地址(基數(shù)1…1)或到訂單項目(基數(shù)1…n)。關(guān)系描述符84獨立于服務(wù)模塊,并且能夠被不同服務(wù)模塊重新使用。對于內(nèi)部導(dǎo)航或在后端數(shù)據(jù)庫24中從一個數(shù)據(jù)類型到另一個的遍歷(traversal),源方面描述符56的可見的(可用的)關(guān)系描述符由服務(wù)模塊描述符54來定義,其具有一個支持的關(guān)系描述符84的列表。對于那些具有目標(biāo)方面描述符56的關(guān)系描述符84可以允許導(dǎo)航,并且所述目標(biāo)方面描述符56也由服務(wù)模塊描述符54支持。
用于訪問以及用于作用于后端數(shù)據(jù)庫24中的數(shù)據(jù)類型的操作在操作描述符70中描述。結(jié)構(gòu)描述符74定義了操作描述符70的輸入?yún)?shù)。這個結(jié)構(gòu)描述符70還包括使能海量操作和過濾操作的輸入關(guān)鍵字描述符64。海量操作(mass operation)是由前端應(yīng)用程序12指定的、對后端數(shù)據(jù)庫24中的數(shù)據(jù)類型的多個實例的操作。過濾操作利用由輸入關(guān)鍵字描述符定義的關(guān)鍵字對例如查詢的操作的結(jié)果進(jìn)行過濾。用于操作描述符70的輸入?yún)?shù)是可選的。
這里有三種類型的操作描述符70,即查詢描述符104、方面動作描述符92、和動作描述符96。前述命令查詢和執(zhí)行動作由操作描述符70定義。
查詢描述符104描述了允許對服務(wù)模塊中的方面的實例進(jìn)行搜索的查詢方法。查詢描述符104包括輸入?yún)?shù)、輸入關(guān)鍵字描述符64、和結(jié)果方面描述符56。輸入?yún)?shù)是定義了查詢的搜索參數(shù)結(jié)構(gòu)的結(jié)構(gòu)描述符74。輸入關(guān)鍵字描述符64定義了哪些關(guān)鍵字可以被用于過濾。例如,執(zhí)行由具有過濾關(guān)鍵字的查詢描述符104定義的查詢,得到滿足第一輸入的標(biāo)準(zhǔn)的關(guān)鍵字列表。這個關(guān)鍵字的列表被輸入關(guān)鍵字描述符64的過濾關(guān)鍵字集過濾,以便返回一個關(guān)鍵字列表的一個子集。查詢描述符104的結(jié)果方面描述符56規(guī)定了查詢結(jié)果的類型,其可以是與服務(wù)模塊相關(guān)聯(lián)的任何方面描述符56。
每個服務(wù)模塊描述符54具有一組支持的查詢描述符104。服務(wù)模塊描述符54不能使用定義在其它服務(wù)模塊描述符54中的查詢描述符104,因為查詢描述符104屬于一個服務(wù)模塊描述符。
方面以動作的形式提供附加的操作(在選擇、插入、更新、刪除、按照關(guān)系選擇、以及更新字段的標(biāo)準(zhǔn)操作以外),其用方面動作描述符92來描述。方面動作描述符92是關(guān)于方面的特殊操作描述符70。方面描述符56可以具有一組支持的方面動作描述符92。方面描述符96的輸入?yún)?shù)定義了動作的參數(shù)結(jié)構(gòu)。輸入關(guān)鍵字描述符64規(guī)定了哪個關(guān)鍵字用于海量操作,例如,電子郵件動作可以具有作為輸入的表示多個電子郵件的關(guān)鍵字的列表。
動作描述符96能夠定義多個動作的動作,如打印、電子郵件、傳真、批準(zhǔn)、清除、剪切、復(fù)制、粘貼和取消。但是更多的只能夠用于一個或少數(shù)方面的方面特定的動作。動作描述符96被引入以強(qiáng)制執(zhí)行(enforce)重新使用。每個方面動作描述符92都與動作描述符96相關(guān)聯(lián),其中定義了名稱和意義(meaning)(原文描述,textual description)。
動作描述符96規(guī)定了動作的名稱和意義(原文描述)。它們不規(guī)定參數(shù),并且不用于描述操作的多形態(tài)行為(polymorphic behavior)。它們可以被用于分類(taxonomies)。
服務(wù)模塊組描述符58可以與方面描述符56、關(guān)系描述符84、和查詢描述符104相關(guān)聯(lián)。方面組描述符78可以與關(guān)系描述符84、方面動作描述符92、和字段描述符86相關(guān)聯(lián)。
圖50包括在服務(wù)模塊描述符54和方面描述符56之間的零或多對零或多的關(guān)系52,因為多個方面的實例可以與多個服務(wù)模塊的實例相關(guān)聯(lián)。服務(wù)模塊組描述符58具有對方面描述符56的零或多對零或多的指向關(guān)系60,因為方面可以集合(grouped together in)在服務(wù)模塊組中。服務(wù)模塊組描述符58還具有與服務(wù)模塊描述符54的零或多對一的復(fù)合集合關(guān)系62,因為服務(wù)模塊組可以被集合在服務(wù)模塊中。作為方面描述符56的特殊化的關(guān)鍵字描述符64具有與方面描述符56的繼承關(guān)系66。關(guān)鍵字描述符64也具有與方面描述符56的一對零或多的關(guān)系68,因為每個方面都具有與該方面相關(guān)聯(lián)的關(guān)鍵字,以唯一地識別所述方面的實例。操作描述符70具有與關(guān)鍵字描述符64指向的零或多對零或多的關(guān)系72,因為操作可以包括輸入關(guān)鍵字。方面描述符56具有與結(jié)構(gòu)描述符74的零或多對一的關(guān)系76,因為每個方面描述符56都具有定義其屬性的結(jié)構(gòu)描述符74。方面組描述符78具有與方面描述符56的零或多對一的復(fù)合集合(composite aggregation)關(guān)系80,因為方面可以是方面組的集合。方面組描述符78還具有與關(guān)系描述符84指向的零或多對零或多關(guān)系82,因為方面組還具有關(guān)系。結(jié)構(gòu)描述符74具有與字段描述符86的一對零或一對多的所有權(quán)關(guān)系90,因為結(jié)構(gòu)可以使用許多數(shù)據(jù)字段來定義其自身。方面組描述符78還具有與字段描述符86的零或多對零或多關(guān)系88。
方面動作描述符92具有與方面描述符56的零或多對一的集合關(guān)系100,因為方面可以提供能夠?qū)Ψ矫鎴?zhí)行的動作。方面動作描述符92具有與其上級類別操作描述符70的繼承關(guān)系102。查詢描述符104也具有與其上級類別操作描述符70的繼承關(guān)系106。服務(wù)模塊描述符54具有與查詢描述符104的一對零或一對多關(guān)系108。因為服務(wù)模塊可以包括零或多個查詢。服務(wù)模塊組描述符58具有與查詢描述符104的零或多對零或多的指向關(guān)系110,因為查詢還可以集合在服務(wù)模塊組中。
操作描述符70具有與結(jié)構(gòu)描述符74的零或多對零或一關(guān)系112,因為每個操作包括結(jié)構(gòu)形式的輸入?yún)?shù)。查詢描述符104具有與方面描述符56的零或多對零或一關(guān)系114,因為查詢包括結(jié)果(resulting)方面。關(guān)系描述符84具有與方面描述符56的零或多對一的關(guān)系116和118,因為關(guān)系具有源和目標(biāo)方面。
為了說明定義儲存庫18中的元數(shù)據(jù)的組織的這些描述符,下面例子使用了一組固定的關(guān)系數(shù)據(jù)庫表。其它持續(xù)機(jī)制(例如,XML)也可以被使用。關(guān)系數(shù)據(jù)庫表被定義在表1-6中,其中表1-6中的每一行定義了關(guān)系數(shù)據(jù)庫表的一個字段或列。儲存庫18的主數(shù)據(jù)類型是方面。描述方面的數(shù)據(jù)庫表是表1SCOL_ASPECT和表2SCOL_ASP_ACTION。表1包括方面的性質(zhì)描述。表1SCOL_ASPECT的關(guān)鍵字字段是ASPECT_NAME字段,因為方面的名稱對于方面是唯一的。ASPECT_CATEGORY字段指示方面是非關(guān)鍵字(non-key)方面還是關(guān)鍵字方面。STRUCTURE字段指示方面的數(shù)據(jù)屬性的數(shù)據(jù)結(jié)構(gòu)名稱。通過將關(guān)鍵字的名稱放在KEY_ASPECT字段將關(guān)鍵字與方面相關(guān)聯(lián)。SERVICE_PROVIDER字段定義了方面的方面服務(wù)供應(yīng)商34。TRANSAC_PROVIDER字段定義了方面的交易服務(wù)供應(yīng)商40。LOCKING_PROVIDER字段定義了方面的鎖定服務(wù)供應(yīng)商42。儲存器18還可以具有相應(yīng)的用于方面描述的表。
表1,SCOL_ASPECT定義
方面可以提供能夠?qū)Ψ矫鎴?zhí)行的動作。動作的描述存儲在表2,SCOL_ASP_ACTION中。動作被用方面名稱和動作名稱來唯一地表示,因此ASPECT_NAME和ACTION_NAME字段是SCOL_ASP_ACTION表的關(guān)鍵字字段。字段PARAM_STRUCTURE指的是保存動作的輸入數(shù)據(jù)參數(shù)的數(shù)據(jù)結(jié)構(gòu)。字段INPUT_KEY_ASPECT指的是定義了關(guān)鍵字類型的關(guān)鍵字方面的名稱,所述關(guān)鍵字類型用于指派在動作時儲存庫18中的哪些數(shù)據(jù)類型實例被作用。字段PROVIDER_CLASS指的是動作服務(wù)供應(yīng)商的名稱,其從實施在ASPECT_NAAE字段命名的方面的服務(wù)供應(yīng)商提供動作。
表2,SCOL_ASP_ACTION定義
方面可以互相相關(guān)。方面之間的關(guān)系的描述被存儲在表3,SCOL_RELATION中。關(guān)系用其名稱來唯一地定義,所以關(guān)系表的關(guān)鍵字是規(guī)定在字段RELATION_NAME中的關(guān)系名稱。對于每個關(guān)系,字段SOURCE_ASPECT定義了指向關(guān)系的源的方面,字段TARGET_ASPECT定義了指向關(guān)系的目標(biāo)的方面,字段TARGET_PROVIDER定義了目標(biāo)方面的查詢關(guān)系服務(wù)供應(yīng)商,字段REL_PARAM_TYPE定義了關(guān)系的類型(父輩-子輩或者子輩-父輩),而字段REL_PARAMETER定義了關(guān)系的基數(shù)。儲存庫18還具有用于關(guān)系的描述的相應(yīng)的表。
表3,SCOL_RELATION定義
服務(wù)模塊的屬性(properties)被存儲在表4,SCOL_SVC_MODULE中。每個服務(wù)模塊用其名稱來唯一地定義,所以SVC_MODULE_NAME字段是SCOL_SVC_MODULE表的關(guān)鍵字字段。對于每個服務(wù)模塊,字段TRANSAC_PROVIDER規(guī)定了服務(wù)模塊的交易供應(yīng)商40的名稱。儲存庫18還具有用于服務(wù)模塊的描述的相應(yīng)的表。
表4,SCOL_SVC_MODULE定義
每個服務(wù)模塊都與可以在服務(wù)模塊中使用的方面相關(guān)聯(lián)??梢栽诿總€服務(wù)模塊中使用的方面的名稱被存儲在表5,SCOL_ASPECT_USE中。由于每個方面服務(wù)模塊的使用(usage)是唯一地由服務(wù)模塊的名稱和方面的名稱來描述的,因此字段SVC_MODULE_NAME和ASPECT_NAME是SCOL_ASPECT_USE表的關(guān)鍵字。
表5,SCOL_ASPECT_USE定義
服務(wù)模塊可以提供查詢來檢索數(shù)據(jù)。服務(wù)模塊查詢的描述被存儲在下面表6的SCOL_QUERY表中。數(shù)據(jù)庫表的結(jié)構(gòu)被定義在表6中。由于每個查詢都由服務(wù)模塊和查詢名稱來唯一地定義,所以字段SVC_MODULE_NAME和QUERY_NAME是SCOL_QUERY表的關(guān)鍵字段。其它字段包括規(guī)定了定義由查詢返回的數(shù)據(jù)類型的方面名稱的RESULT_ASPECT,和規(guī)定了包含查詢的輸入?yún)?shù)的數(shù)據(jù)結(jié)構(gòu)的PARAM_STRUCTURE。例如,對與服務(wù)模塊相關(guān)聯(lián)的特定方面(例如,規(guī)定在RESULT_ASPECT中)進(jìn)行的查詢包括與特定方面的實例屬性相匹配的輸入?yún)?shù),并且所述匹配的實例被作為參考那些實例的關(guān)鍵字的數(shù)據(jù)集而返回。字段INPUT_KEY_ASPECT被用于定義描述可以被用作查詢的過濾(filter)關(guān)鍵字的關(guān)鍵字方面。PROVIDER_CLASS規(guī)定了與每個查詢相關(guān)聯(lián)的查詢服務(wù)供應(yīng)商32的名稱。儲存庫18還具有用于查詢的描述的相應(yīng)的表。
表6,SCOL_QUERY定義
如前所述,體系結(jié)構(gòu)38包括六個服務(wù)供應(yīng)商類別(即,交易40、查詢32、方面34、動作44、查詢關(guān)系46、和鎖定42),用于處理來自前端應(yīng)用程序12的請求,而不是從儲存庫18請求元數(shù)據(jù),而這是由儲存庫服務(wù)供應(yīng)商類別30處理的。為了在前端應(yīng)用程序12請求時提供服務(wù),服務(wù)管理器16直接調(diào)用服務(wù)供應(yīng)商類別的實例。這些服務(wù)供應(yīng)商的實例可以位于如服務(wù)管理器16的同一計算機(jī)(例如,6),或位于不同的計算機(jī)。
鎖定服務(wù)供應(yīng)商42可以被用于實施普通鎖定管理器,其用于單個方面或一組方面。每個鎖定服務(wù)供應(yīng)商42需要被登記一個方面。鎖定服務(wù)供應(yīng)商42的名稱被設(shè)置在SCOL_ASPECT表中每個方面的LOCKING_PROVIDER字段。鎖定服務(wù)供應(yīng)商類別具有可以被服務(wù)管理器16調(diào)用的兩種方法。這些方法是LOCK和UNLOCK。LOCK將表示要被鎖定的商務(wù)對象的關(guān)鍵字的集合、表示商務(wù)對象的類別的方面的名稱、以及鎖定模式作為輸入。取決于目標(biāo)系統(tǒng)的鎖定能力可以有各種鎖定模式。鎖定模式可以有“E”、“S”或“SP”。“E”是指排他的鎖定,或者只有一個客戶能夠獲得該鎖定?!癝”是指共享鎖定,任何客戶都能夠鎖定,并且不能由針對一個客戶的排他性鎖定。“SP”是指與“S”相同,但是能夠隨后升級到排他鎖定。
LOCK方法輸出指示請求是否被拒絕的布爾值,并輸出一個返回代碼。UNLOCK將表示要被解鎖的商務(wù)對象的關(guān)鍵字的集合,以及表示要被解鎖的商務(wù)對象的類別的方面的名稱作為輸入。UNLOCK方法也輸出指示請求是否被拒絕的布爾值,并輸出一個返回代碼。如果交易緩沖器已經(jīng)處在“骯臟(dirty)”狀態(tài)則拒絕對UNLOCK的調(diào)用,即自從上一個CLEANUP調(diào)用之后已經(jīng)發(fā)出了任何更新、插入、刪除操作或者沒有被標(biāo)記為COL_AFFECTS_NOTHING的動作。如果交易服務(wù)供應(yīng)商類別的CLEANUP方法(下面描述)被以原因“END”調(diào)用,則去除所有的鎖定。
交易是一序列信息交換和相關(guān)工作(諸如數(shù)據(jù)庫更新),其被作為為了滿足從前端應(yīng)用程序12到服務(wù)管理器16的請求的目的、以及保證后端數(shù)據(jù)庫24的完整性的單元來對待。對于要完成的交易以及將要對數(shù)據(jù)庫24進(jìn)行的永久改變,交易必須被完整地完成。在交易成功之前,完成交易的所有的步驟,而數(shù)據(jù)庫實際上被改變來反映所有被請求的變化。如果在交易成功完成之前發(fā)生了什么事情,對后端數(shù)據(jù)庫24的任何改變都必須被記錄(keep trackof)以便可以撤銷所述改變。
為了處理交易,交易服務(wù)供應(yīng)商40接收對服務(wù)管理器16、另一個非交易服務(wù)供應(yīng)商(例如,32、34、44、46)以及前端應(yīng)用程序12(或者在某些情況下服務(wù)管理器代理14)之間的交易的各種狀態(tài)的通知。這些通知是交易服務(wù)供應(yīng)商40的方法BEFORE_SAVE、CLEANUP和SAVE,它們在交易期間被服務(wù)管理器16調(diào)用。
服務(wù)管理器16調(diào)用交易服務(wù)供應(yīng)商40的方法BEFORE_SAVE來檢查交易緩沖器是否能被保存。這允許檢查非交易服務(wù)供應(yīng)商的內(nèi)部狀態(tài)是否準(zhǔn)備好被保存。如果不能保存交易緩沖器,則方法BEFORE_SAVE返回假(false),然后交易結(jié)束被中斷。因此,BEFORE_SAVE方法具有BOOLEAN返回參數(shù)。BEFORE_SAVE將布爾作為輸入?yún)?shù)REJECTED。交易服務(wù)供應(yīng)商16通過將REJECTED參數(shù)設(shè)置為非初始值(non-initial value),即設(shè)置為“真”,來防止隨后的保存和提交操作。方法BEFORE_SAVE在由前端應(yīng)用程序12的SAVE方法觸發(fā)的服務(wù)管理器16的序列操作中被調(diào)用。
SAVE方法最后觸發(fā)應(yīng)用來將交易緩沖器保存到數(shù)據(jù)庫24。通過調(diào)用SAVE,非交易服務(wù)供應(yīng)商的所有內(nèi)部狀態(tài)都被永久保留,或者通過直接更新,或者通過創(chuàng)建對更新任務(wù)的適當(dāng)調(diào)用。如果體系結(jié)構(gòu)38中的所有服務(wù)供應(yīng)商都接收到SAVE請求,則服務(wù)管理器16提交所述交易。
CLEANUP方法告知所有非交易服務(wù)供應(yīng)商釋放它們所有的交易緩沖器和基于排隊的(enqueue-based)鎖定。調(diào)用CLEANUP方法通知體系結(jié)構(gòu)38中的所有服務(wù)供應(yīng)商都需要清除它們的內(nèi)部狀態(tài)。CLEANUP將REASON字符串作為輸入?yún)?shù)。REASON字段指示清除操作的原因。這或者可以是由于SAVE操作的“COMMIT”,或者可以是由于系統(tǒng)自動關(guān)閉交易的交易“END”。這并不保證在故障情況下清除被調(diào)用。
動作服務(wù)供應(yīng)商44被服務(wù)管理器16調(diào)用以執(zhí)行用于方面的動作。動作服務(wù)供應(yīng)商44的名稱被設(shè)置在SCOL_ASP_ACTION表的PROVIDER_CLASS字段對應(yīng)于動作的一行。動作服務(wù)供應(yīng)商44具有一個方法EXECUTE。EXECUTE方法將方面名稱(ASPECT)、指定動作作用于哪個方面的實例的一組關(guān)鍵字(INKEYS)、普通輸入?yún)?shù)(INPARAM)、要被執(zhí)行的動作的名稱(ACTION)、作用于關(guān)系的動作的一組關(guān)鍵字(RELATION_INKEY)、以及關(guān)系的名稱(RELATION)作為輸入?yún)?shù)。EXECUTE方法作為輸出參數(shù)返回改變的或新創(chuàng)建的對象(OUTRECORDS),其已經(jīng)被動作改變。OUTRECORDS參數(shù)返回的對象被傳送回客戶構(gòu)架上的調(diào)用方面對象。
方面服務(wù)供應(yīng)商34被服務(wù)管理器16調(diào)用以提供讀取和修改一個或多個方面的內(nèi)容的功能。如前所述,方面用其名稱(該名稱在儲存庫中為全局唯一)、相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)、相關(guān)聯(lián)的關(guān)鍵字(即標(biāo)識符)結(jié)構(gòu)、一組實施的動作、一組輸出(outgoing)的關(guān)系、以及一組輸入(incoming)的關(guān)系來描述。方面服務(wù)供應(yīng)商34具有方法EXECUTE、SELECT、INSERT、UPDATE、DELETE、SELECT_BY_RELATION、以及UPDATE_FIELDS。
方法EXECUTE被從動作服務(wù)供應(yīng)商44導(dǎo)出,并且允許執(zhí)行動作。EXECUTE將要對其執(zhí)行動作的方面的名稱(ASPECT)、要對其執(zhí)行動作的對象的關(guān)鍵字(INKEYS)、動作的參數(shù)(INPARAM)、動作的名稱(ACTION)作為輸入?yún)?shù)。返回的參數(shù)包括修改或者創(chuàng)建的方面行(aspect rows)(OUTRECORDS)、指示對方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)、以及返回代碼(RETURN_CODES)。
方法SELECT讀取與給定方面的輸入關(guān)鍵字相關(guān)聯(lián)的方面數(shù)據(jù)。SELECT將編碼在相關(guān)聯(lián)的關(guān)鍵字結(jié)構(gòu)中以描述要讀取的方面行的關(guān)鍵字列表(INKEYS)和方面的名稱(ASPECT)作為輸入?yún)?shù)。SELECT將編碼在方面數(shù)據(jù)結(jié)構(gòu)中的結(jié)果(OUTRECORDS)、表示對方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)、以及返回代碼(RETURN_CODES)作為輸出參數(shù)。
方法INSERT將新的數(shù)據(jù)插入到方面。INSERT包括含有要插入的記錄的表作為輸入?yún)?shù),如果方面被設(shè)計為用于按行(row wise)寫入操作(INRECORDS)。該方法可以允許插入的記錄根據(jù)方面描述(例如,參數(shù)ExtemalKeys=真或假(true or false))也定義關(guān)鍵字字段。輸入?yún)?shù)還包括方面的名稱(ASPECT)、用于作用于關(guān)系的動作的一組關(guān)鍵字(RELATION_INKEY)、以及關(guān)系的名稱(RELATION)。方法INSERT返回表示插入的記錄的一組記錄(OUTRECORDS),以及它們的關(guān)鍵字和其它可能的方面服務(wù)供應(yīng)商34希望對所插入的記錄進(jìn)行的修改。例如,一個修改可以填入用于所述記錄集計算的字段。OUTRECORDS行的次序必須對應(yīng)于INRECORDS行的次序,其它輸出參數(shù)包括指示對SELECT方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)以及返回代碼(RETURN_CODES)。
UPDATE方法或者按記錄(record wise)或者按字段(field wise)更新現(xiàn)有方面的實例。UPDATE方法的輸入?yún)?shù)包括含有要更新的實例關(guān)鍵字的表(INRECORDS),如果方面被設(shè)計為按行進(jìn)行寫入操作。輸入?yún)?shù)還包括方面的名稱(ASPECT)。UPDATE方法返回的參數(shù)包括更新的紀(jì)錄(OUTRECORDS)以及它們的關(guān)鍵字和其它可能的服務(wù)供應(yīng)商想要進(jìn)行的修改。OUTRECORDS行的次序可以對應(yīng)于INRECORDS行的次序。其它輸出參數(shù)包括指示對SELECT方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)以及返回代碼(RETURN_CODES)。
DELETE方法刪除后端(例如,后端數(shù)據(jù)庫24)中的方面的行或?qū)嵗?。DELETE方法的輸入?yún)?shù)被編碼在相關(guān)聯(lián)的關(guān)鍵字結(jié)構(gòu)中用于描述要被刪除的方面行的關(guān)鍵字列表(INKEYS),和方面的名稱(ASPECT)。DELETE方法返回的參數(shù)包括指示對DELETE方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)以及返回代碼(RETURN_CODES)。
SELECT_BY_RELATION方法取決于關(guān)系參數(shù)描述返回或者依照關(guān)系的屬性或另一個方面,其中源方面具有指向那個其它方面的關(guān)系。SELECT_BY_RELATION的輸入?yún)?shù)是所按照(follow)的關(guān)系的名稱(ASPECT)、源方面的記錄(INRECORDS)、源方面的名稱(ASPECT)和描述用于分頁(paging)的查詢的各種選項的結(jié)構(gòu)(OPTIONS)等。SELECT_BY_RELATION返回的輸出參數(shù)包括編碼在目標(biāo)方面數(shù)據(jù)結(jié)構(gòu)中的結(jié)果(OUTRECORDS)、表示OUTRECORDS參數(shù)的哪行屬于哪個INRECORDS行的索引表(INDEX)、結(jié)果描述(DESCRIPTION)、指示對SELECT_BY_RELATION方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)、以及返回代碼(RETURN_CODES)。
UPDATE_FIELDS方法更新方面的實例的字段。輸入?yún)?shù)包括編碼在相關(guān)聯(lián)的關(guān)鍵字結(jié)構(gòu)中以描述要更新的方面的實例的關(guān)鍵字列表(INRECORDS)。輸入?yún)?shù)還包括含有一對字段名稱和要在一組記錄中更新的相應(yīng)值的表(INFIELDS),如果方面被設(shè)計為按字段進(jìn)行寫入操作。如果多于一個方面的實例要被更新,附加的字段索引INKEY指向相關(guān)聯(lián)的關(guān)鍵字記錄。輸入?yún)?shù)還包括方面的名稱(ASPECT)。UPDATE_FIELDS返回的參數(shù)包括創(chuàng)建或改變的方法的實例(OUTRECORDS)以及它們的關(guān)鍵字和其它可能的由方面服務(wù)供應(yīng)商34執(zhí)行的修改。各個OUTRECORDS行的索引必須要與INFIELDS表中的行索引相關(guān)聯(lián)。其它返回的參數(shù)包括指示對UPDATE_FIELD方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)以及返回代碼(RETURN_CODES)。
查詢服務(wù)供應(yīng)商32執(zhí)行查詢。儲存庫18中的查詢通過字段QUERY_NAME中的查詢名稱、字段PARAM_STRUCTURE中的相關(guān)聯(lián)的參數(shù)結(jié)構(gòu)、字段RESULT_ASPECT中的相關(guān)聯(lián)的結(jié)果方面、以及可選的字段INPUT_KEY_ASPECT中具有唯一的數(shù)據(jù)結(jié)構(gòu)的相關(guān)聯(lián)的方面關(guān)鍵字而描述在表SCOL_QUERY中。查詢服務(wù)供應(yīng)商32具有一個EXECUTE方法,執(zhí)行對一個或多個方面的查詢。輸入?yún)?shù)包括查詢名稱(QUERY)、含有查詢參數(shù)的數(shù)據(jù)結(jié)構(gòu)(INPARAM)、以及可選的含有應(yīng)當(dāng)用來限制查詢的方面行的關(guān)鍵字的表類型參數(shù)(INKEYS)。INKEYS可以但不是必須包括由EXECUTE方法返回的OUTRECORDS的關(guān)鍵字。INKEYS可以是任何關(guān)鍵字方面結(jié)構(gòu)。哪種關(guān)鍵字結(jié)構(gòu)與查詢相關(guān)聯(lián)被規(guī)定在儲存庫18中表SCOL_QUERY的字段INPUT_KEY_ASPECT中。可選的,其它可以被規(guī)定的輸入?yún)?shù)包括描述查詢(例如,用于分頁)的各種選項的結(jié)構(gòu)(OPTIONS)和SELECTIONS。
EXECUTE方法返回的參數(shù)包括查詢描述(DESCRIPTION)、查詢結(jié)果(OUTRECORDS)、以及指示對EXECUTE方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)。
EXECUTE方法返回由查詢參數(shù)規(guī)定的結(jié)果。如果INKEYS表參數(shù)不是空的,則結(jié)果被限制為滿足查詢參數(shù)的對象。INKEYS和INPARAM兩者都限制查詢,但是被以不同的方式使用。例如,查詢可以被定義為返回還未被發(fā)送的訂單的列表。在這樣一個例子中,結(jié)構(gòu)INPARAM可以規(guī)定只有姓氏從A到D的客戶的訂單才被返回。INKEYS是所有還沒有被發(fā)送的訂單的表。OUTRECORDS含有所有來自還沒有被發(fā)送的相關(guān)客戶(在這種情況下為姓氏為A到D的客戶)的訂單。在一個例子中,OUTRECORDS查詢的結(jié)果是一個不連接的(disconnected)方面,也就是所述方面總是只讀的。對這個方面不可以進(jìn)一步執(zhí)行后端操作。在這個例子中,接收的關(guān)鍵字可以被用作選擇使用方面服務(wù)供應(yīng)商34及其例如SELECT方法的其它方面行的參數(shù)。
查詢關(guān)系服務(wù)供應(yīng)商46對于作為關(guān)系目標(biāo)的方面在服務(wù)供應(yīng)商(例如,方面服務(wù)供應(yīng)商34)中實施一個程序(routine)。查詢關(guān)系服務(wù)供應(yīng)商46的方法被從源方面的方面服務(wù)供應(yīng)商34間接地調(diào)用,如果關(guān)系被標(biāo)記為SOURCE_KEYS或ATTRIBUTES。
查詢關(guān)系服務(wù)供應(yīng)商46具有SELECT_TARGET方法。方法SELECT_TARGET具有以下輸入?yún)?shù)。輸入?yún)?shù)包括源方面的名稱(SOURCE_ASPECT)??蛇x地,該方法還包括定義了到目標(biāo)方面的SELECT方法的代理接口(TARGET)的輸入?yún)?shù)。規(guī)定TARGET參數(shù)允許在不直接知道目標(biāo)方面的方面服務(wù)供應(yīng)商34的情況下調(diào)用目標(biāo)方面的方面服務(wù)供應(yīng)商34的SELECT方法。這使得查詢關(guān)系服務(wù)供應(yīng)商46被添加到服務(wù)模塊,而不需要知道目標(biāo)方面的方面服務(wù)供應(yīng)商34。
SELECT_TARGET方法的另一個輸入?yún)?shù)是關(guān)系(RELATION)。另一個輸入?yún)?shù)是描述關(guān)系的字段(INPARAMS)的表。為了允許海量選擇,INPARAMS是個每行都描述了單一選擇的表。INDEX參數(shù)被用于將INPARAMS結(jié)構(gòu)的各行與OUTRECORDS行相關(guān)聯(lián)。另一個可選的輸入?yún)?shù)是描述查詢(例如,用于分頁)的各種選項的結(jié)構(gòu)(OPTIONS)。
SELECT_TARGET方法返回參數(shù),包括以目標(biāo)方面的結(jié)構(gòu)編碼的結(jié)果(OUTRECORDS)、查詢結(jié)果描述(DESCRIPTION)、以及到目標(biāo)方面SELECT方法的代理接口。其它輸出參數(shù)包括描述INPARAMS記錄和OUTRECORDS參數(shù)之間的關(guān)系的索引(INDEX)、指示對SELECT_TARGET方法的請求是否被拒絕的布爾標(biāo)志(REJECTED)和返回代碼(RETURN_CODES)。
服務(wù)供應(yīng)商32、34、40、42、44和46如上所述使能下列用于體系結(jié)構(gòu)38的交易模式。執(zhí)行方面服務(wù)供應(yīng)商34的方法SELECT,從后端數(shù)據(jù)庫24讀取或從存儲在后端的交易緩沖器讀取。方面服務(wù)供應(yīng)商34以一致(consistent)方式合并來自數(shù)據(jù)庫及其交易緩沖器的兩個源的數(shù)據(jù),以致合并數(shù)據(jù)反映了迄今為止在這個交易中的更新。接下來,執(zhí)行方面服務(wù)供應(yīng)商34的UPDATE、INSERT、MODIFY、或DELETE方法建立交易緩沖器。在實際改變交易緩沖器中的數(shù)據(jù)前,服務(wù)管理器16必須獲得對數(shù)據(jù)的交易鎖定并在鎖定的保護(hù)下讀取數(shù)據(jù)。如前所述,可以用排他、共享、以及共享升級鎖定模式來使用鎖定服務(wù)供應(yīng)商42。鎖定必須伴隨選擇在鎖定保護(hù)下的鎖定的功能數(shù)據(jù)。應(yīng)用可以通過提供有時戳的或者有版本的數(shù)據(jù),并在發(fā)生沖突的情況下在前端合并實際和修改的數(shù)據(jù)來支持最佳的(optimistic)鎖定。
交易服務(wù)供應(yīng)商40的BEFORE_SAVE方法使得所有參與的服務(wù)供應(yīng)商都宣布了它們是否準(zhǔn)備好保存交易緩沖器。交易服務(wù)供應(yīng)商40的SAVE方法最后觸發(fā)服務(wù)管理器16來保存交易緩沖器到后端數(shù)據(jù)庫24。
交易服務(wù)供應(yīng)商40的CLEANUP方法通知所有服務(wù)供應(yīng)商(例如,方面服務(wù)供應(yīng)商34)釋放所有它們的交易緩沖器和基于隊列的鎖定。如果CLEANUP被以原因“END”調(diào)用,則所有的鎖定都必須被釋放。如果原因被設(shè)為“COMMIT”,則各個服務(wù)供應(yīng)商可以選擇保留其鎖定。方面服務(wù)供應(yīng)商34不得自己內(nèi)部調(diào)用COMMIT WORK或者ROLLBACK WORK。服務(wù)管理器16通過如果方面服務(wù)供應(yīng)商34試圖提交交易就自動中斷交易來強(qiáng)制執(zhí)行這點。
支持的鎖定方法和鎖定策略如下。使用策略S,許多參與者能獲得共享的鎖定。如果對一個對象獲得的共享的鎖定,則不能獲得排他鎖定或SP鎖定。共享鎖定只能被用于在讀取操作期間達(dá)成對較大數(shù)據(jù)集的一致看法(consistent view)。使用策略E,只能有單個參與者獲得鎖定。使用策略SP(共享升級),許多參與者能夠獲得鎖定。如果存在SP鎖定,排他鎖定只能夠被已經(jīng)具有對對象的SP鎖定的參與者獲得。只有一個參與者能夠?qū)㈡i定升級為排他鎖定。沒有其它在升級之前獲得鎖定的參與者能夠升級到排他,即使第一個參與者釋放了其鎖定。
例子體系結(jié)構(gòu)38(圖3)實施創(chuàng)建新的客戶、經(jīng)由GUI 28接收一個或多個產(chǎn)品的客戶訂單以及提交訂單給商務(wù)處理的簡單的任務(wù)。為了支持這個例子,后端數(shù)據(jù)庫24可以使用根據(jù)上述表1-6中的定義設(shè)計的關(guān)系數(shù)據(jù)庫來實施,以定義客戶、地址、產(chǎn)品類型、貨籃(basket)、每個訂單產(chǎn)品在貨籃中的位置、以及每個訂單的列表。在表7-12中,關(guān)鍵字字段標(biāo)題被標(biāo)有一個星號??蛻舯?定義了客戶,并且每個客戶被唯一地用CustomerId字段來識別??蛻舯?還包括名稱(NAME)字段和外鍵碼字段AddressId,其將地址表中的地址鏈接到客戶。
表7,客戶
地址表8定義了地址,包括城鎮(zhèn)和街道。AddressId本身是地址的一個有效的唯一關(guān)鍵字,而地址和客戶之間的聯(lián)系通過客戶表7來定義(AddressId字段)。
表8,地址
表9定義了產(chǎn)品,包括名稱和關(guān)鍵字ProductId。
表9,產(chǎn)品
表10定義了購物籃,包括客戶和關(guān)鍵字BasketId。
表10,貨籃
表11定義了訂單在貨籃中的位置和具有的產(chǎn)品。位置依賴于貨籃和訂單的存在,因此位置的主關(guān)鍵字就是PositionId、BasketId和OrderId的組合。
表11,位置
表12定義了具有客戶的訂單,并指示每個訂單是否以主關(guān)鍵字OrderId來提交。
表12,訂單
如圖5所示,處理150使用這些表7-12來定義這個簡單任務(wù)所需要的對后端數(shù)據(jù)庫22的數(shù)據(jù)庫操作。處理150包括前端應(yīng)用程序12接收客戶名稱(152)。處理150包括商務(wù)軟件應(yīng)用查詢具有客戶表(表7)的數(shù)據(jù)庫NAME字段中的名稱(154)。處理150包括檢查客戶名稱與客戶表(表7)中的一行是否相匹配(156)。如果沒有匹配,處理150包括商務(wù)軟件應(yīng)用獲得客戶地址(158)、在具有新的AddressId和地址的地址表(表8)中插入新的行(160)、在具有新的CustomerId和AddressId的客戶表(表7)中插入新的行(162)。如果存在匹配,處理150包括商務(wù)軟件獲得含有客戶的訂單的產(chǎn)品名稱(164)。處理150包括商務(wù)軟件在產(chǎn)品表中查詢產(chǎn)品名稱(表9)(166)。
處理150包括檢查產(chǎn)品名稱與產(chǎn)品表(表9)中的行是否相匹配(168)。如果存在匹配,則處理150包括商務(wù)軟件在具有客戶的CustomerId的訂單表(表12)中插入新的訂單以及設(shè)定提交字段為“假”。否則,處理150返回到獲得訂單的產(chǎn)品名稱(164)。處理150包括商務(wù)軟件在具有客戶的CustomerId的貨籃表(表10)中插入新的貨籃。
處理150包括商務(wù)軟件在具有CustomerId、BasketId、和ProductId的位置表(表11)中插入新的位置(174)。處理150包括商務(wù)軟件接收請求以提交訂單(176)。處理150包括商務(wù)軟件以客戶的CustomerId查詢訂單表(表12)(178),而這個查詢返回匹配客戶的CustomerId的訂單。處理150包括在訂單表(表12)中選擇匹配客戶的CustomerId的訂單(180)的商務(wù)軟件。處理150包括商務(wù)軟件將訂單表(表12)中選擇的行的提交的字段設(shè)置為“真”(182)。處理150包括通過商務(wù)軟件在客戶表7中查詢AddressId以及然后在地址表8中查詢匹配的AddressId,來從地址表8中取得用于訂單發(fā)送的客戶地址(184)。
表13-19示出儲存庫18的一個實施中的表,所述儲存庫18表示由表7-12說明的示例數(shù)據(jù)庫的元數(shù)據(jù)。表13-19按照上述表1-6的定義,所以表1-6的行中的定義與表13-19的列或字段相對應(yīng)。與表7-12的情況一樣,表13-19的關(guān)鍵字字段也被標(biāo)注了星號。
表13按照SCOL_ASPECT表(定義在表1中)中的定義,定義了方面A_Customer、A_Address、A_Product、A_Basket、A_Position、和A_OrderHeader。每個方面具有為每個實例定義唯一的關(guān)鍵字的相應(yīng)關(guān)鍵字方面。例如,方面A_Customer具有關(guān)鍵字方面Customer_Key。這個元數(shù)據(jù)儲存庫18中的關(guān)鍵字方面可以對應(yīng)后端數(shù)據(jù)庫24中的關(guān)系數(shù)據(jù)庫表的關(guān)鍵字。例如,客戶表(表7)的關(guān)鍵字是CustomerId字段。STRUCTURE字段中的行對應(yīng)下面表19中的數(shù)據(jù)字典。例如,表19可以定義Customer_Structure,以便具有指示字符串的CHAR類型的NAME字段。SERVICE_PROVIDER字段的行對應(yīng)處理方面的服務(wù)的特定方面服務(wù)供應(yīng)商。在表13中,所有方面被指派給S_provider方面服務(wù)供應(yīng)商(例如,參考圖3的34)。TRANSAC_PROVIDER字段的行對應(yīng)處理方面的交易的特定交易服務(wù)供應(yīng)商40。在表13中,所有方面被指派給T_provider交易服務(wù)供應(yīng)商(例如,參考圖3的40)。LOCKING_PROVIDER字段中的行對應(yīng)處理方面的鎖定的特定鎖定服務(wù)供應(yīng)商。在表13中,所有方面被指派給L_provider鎖定服務(wù)供應(yīng)商(例如,參考圖3的42)。
表13,示例的SCOL_ASPECT表
表14按照SCOL_ASP_ASPECT表(定義在表2中)中的定義,來定義方面A_OrderHeader的動作提交。字段INPUT_KEY_ASPECT用規(guī)定A_OrderHeader的哪個實例應(yīng)當(dāng)被動作來作用來規(guī)定應(yīng)用14發(fā)送的關(guān)鍵字方面。動作提交將提交的后端數(shù)據(jù)庫24的那些實例的字段改變?yōu)檎?True)。對這個動作提交不需要額外的參數(shù),所以表14中的PARAM_STRUCTURE字段為空白。字段PROVIDER_CLASS規(guī)定指派給每個動作的方面服務(wù)供應(yīng)商34(參考圖3)。在表14中,動作提交被指派給方面服務(wù)供應(yīng)商S_provider(例如,參考圖3的34)。
表14,示例的SCOL_ASP_ACTION表
表15按照SCOL_RELATION表(定義在表3中)中的定義,來定義在表13中定義的方面之間的關(guān)系。這些關(guān)系反映在由示例表7-12說明的后端數(shù)據(jù)庫24中的數(shù)據(jù)表之間的關(guān)系。方面之間的這些關(guān)系也說明在圖6中,對于方面A_Customer 202、方面A_Address 204、方面A_Product 206、方面A_Basket 208、方面A_Position 210、以及方面A_OrderHeader 112。這些關(guān)系包括R_Customer_To_Address 212、R_Basket_To_Customer 214、R_OrderHeader_To_Customer 216、R_Position_To_Product 218、R_Position_To_OrderHeader 220、以及R_Position_To_Basket 222。
表15,示例的SCOL_RELATION表
表16按照SCOL_SVC_MODULE表(定義在表4中)的定義,來定義用于在表7-12中給出的后端數(shù)據(jù)庫24的示例定義的示例服務(wù)模塊。表16定義了服務(wù)模塊S_Customer、S_Product、S_Basket、以及S_Order。字段TRANSAC_PROVIDER為每個服務(wù)模塊規(guī)定交易服務(wù)供應(yīng)商40(參考圖3)。在表16中,交易服務(wù)供應(yīng)商T_provider(例如,參考圖3的40)被指派給服務(wù)模塊。
表16,示例的SCOL_SVC_MODULE表
表17按照SCOL_ASPECT_USE表(定義在表5中)中的定義,來將服務(wù)模塊(由表16提供)與方面(由表13提供)相關(guān)聯(lián)。
表17,示例的PECT_USESCOL_ASP表
表18按照SCOL_QUERY表(定義在表6中)中的定義,來定義指派給便利圖5的商務(wù)處理150的查詢。例如,與S_Customer服務(wù)模塊相關(guān)聯(lián)的QueryByName查詢采用Customer_Structure作為查詢的輸入,以及一組定義哪些關(guān)鍵字可以被用于過濾的客戶關(guān)鍵字(Customer_Key)。字段PROVIDER_CLASS規(guī)定哪個查詢服務(wù)供應(yīng)商32(參考圖3)與每個服務(wù)模塊相關(guān)聯(lián)。在表18中,查詢服務(wù)供應(yīng)商Q_provider(例如,32)與每個服務(wù)模塊相關(guān)聯(lián)。
表18,示例的SCOL_QUERY表
表19定義了在表13-18中定義的儲存庫18的實施的數(shù)據(jù)字典。每行定義了具有名稱和多個數(shù)據(jù)項目和它們的類型的結(jié)構(gòu)。例如,結(jié)構(gòu)Customer_Structure具有一個指示字符串的CHAR類型的標(biāo)題為“NAME(名稱)”的數(shù)據(jù)項目。Customer_Key_Table結(jié)構(gòu)定義了每個客戶的CustomerId關(guān)鍵字,并且也是CHAR類型。
表19,示例的SCOL_STRUCT表
上述處理150的數(shù)據(jù)庫操作被如下定義在儲存庫18的這個實施中。包括在處理150中的客戶數(shù)據(jù)庫表(表7)的查詢(154)由與表18中的方面服務(wù)模塊S_Customer相關(guān)聯(lián)的QueryByName查詢在元數(shù)據(jù)儲存庫18中來描述。由于前端應(yīng)用程序12已經(jīng)獲得客戶名稱,并且服務(wù)模塊S_Customer含有具有客戶名稱的方面,因此選擇與方面服務(wù)模塊S_Customer相關(guān)聯(lián)的QueryByName查詢。例如,前端應(yīng)用程序12可以向服務(wù)管理器1提交與服務(wù)模塊S_Customer相關(guān)聯(lián)的查詢QueryByName NAME=“John Smith”,而不規(guī)定Customer_Key的過濾。服務(wù)管理器16檢查儲存庫18以保證定義了查詢。然后,服務(wù)管理器16提交查詢給在數(shù)據(jù)庫24中查詢客戶數(shù)據(jù)庫表(表7)的Q_provider(例如,32),并且被發(fā)送回前端應(yīng)用程序12的輸出是含有CurtomerId={1}的記錄集。
分別用元數(shù)據(jù)儲存庫18中對方面A_Aspect和A_Customer的標(biāo)準(zhǔn)插入操作(前述)來描述包括在處理150中的、在地址數(shù)據(jù)表(表8)上的插入(160)和包括在處理150中的、在客戶數(shù)據(jù)庫表(表7)上的插入(162)。
用與定義在表18中的服務(wù)模塊S_Product相關(guān)聯(lián)的QueryByName查詢描述包括在處理150中的、在產(chǎn)品數(shù)據(jù)庫表(表9)中對產(chǎn)品名稱的查詢(166)。例如,應(yīng)用12可以向服務(wù)管理器16提交與服務(wù)模塊S_Product相關(guān)聯(lián)的查詢QueryByName NAME=“Wrench”,而不規(guī)定Product_Key的過濾。服務(wù)管理器16檢查儲存庫18以保證定義了查詢。然后,服務(wù)管理器16提交查詢給查詢數(shù)據(jù)庫24的Q_provider(例如,32),并且發(fā)送回應(yīng)用12的輸出是含有ProductId={3}的記錄集。
分別用對方面A_OrderHeader、A_Basket、和A_Position的插入操作定義包括在處理150中的插入(170、172和174)。
用與定義在圖18中的服務(wù)模塊S_Order相關(guān)聯(lián)的QueryByCustomer查詢描述包括在處理150中的對訂單數(shù)據(jù)庫表(表12)按照客戶的查詢(178)。例如,前端應(yīng)用程序12可以提交與服務(wù)模塊S_Order相關(guān)聯(lián)的查詢QueryByCustomer Customer_Key(CustomerId)={2},而不過濾OrderHeader_Key。服務(wù)管理器16檢查儲存庫18以保證定義了查詢。然后,服務(wù)管理器16提交查詢給查詢數(shù)據(jù)庫24的Q_provider(例如,32),并且被發(fā)送回應(yīng)用12的輸出是含有OrderHeader_Key={2,3}的記錄集。
用儲存庫18中對方面A_OrderHeader的執(zhí)行提交動作(定義在表14中)定義包括在處理150中的選擇對訂單數(shù)據(jù)庫表(表12)的訂單操作(180)和將選擇的訂單的提交的字段設(shè)置為真(182)。例如,前端應(yīng)用程序12可以以O(shè)rderHeader_Key={2,3}將對方面A_OrderHeader的提交動作發(fā)送給服務(wù)管理器16。然后,服務(wù)管理器16發(fā)送提交操作給S_provider(例如,34),S_provider對于所選擇的對應(yīng)OrderId={2,3}的行將訂單數(shù)據(jù)庫表(表12)中提交的字段改變?yōu)椤罢妗薄?br>
用對A_Customer方面的標(biāo)準(zhǔn)按照關(guān)系選擇動作定義包括在處理150中的從地址數(shù)據(jù)庫表(表8)取得客戶地址(184)。例如,前端應(yīng)用程序12將對規(guī)定關(guān)系R_Customer_To_Addres和Customer_Key={2}的A_Customer方面的按照關(guān)系選擇動作發(fā)送給服務(wù)管理器16。服務(wù)管理器16檢查對儲存庫18的請求,并將請求傳遞給服務(wù)供應(yīng)商S_provider(例如,34),其查詢匹配CustomerId={2}的外鍵碼AddressId,并導(dǎo)航到地址表8。S_provider(例如,34)經(jīng)由服務(wù)管理器16將含有{Louisville,Willow Avenue}的記錄集從地址數(shù)據(jù)庫表(表8)返回到應(yīng)用12。
上述技術(shù)可以在數(shù)字電子電路或計算機(jī)硬件、固件、軟件以及它們的組合中實施。該技術(shù)還可以作為計算機(jī)程序產(chǎn)品實施,即有形地具體化在信息載體中的計算機(jī)程序,例如在機(jī)器可讀的存儲設(shè)備或傳播信號中,并且由例如可編程處理器、計算機(jī)、或多臺計算機(jī)的數(shù)據(jù)處理裝置執(zhí)行或控制這些數(shù)據(jù)處理裝置的操作,。計算機(jī)程序可以以各種編程語言的形式來編寫,包括編譯語言或解釋語言,并且它也可以以各種形式來配備(deploy),包括作為獨立程序或模塊、構(gòu)件、子程序、或其它適于用在計算環(huán)境中的單元。計算機(jī)程序可以被配備來在一臺計算機(jī)上或在一個地點或分布在多個地點而通過通信網(wǎng)絡(luò)相互連接的多臺計算機(jī)上執(zhí)行。
所述技術(shù)的方法步驟可以由一個或多個可編程處理器來執(zhí)行,所述可編程處理器運(yùn)行計算機(jī)程序并通過對輸入數(shù)據(jù)進(jìn)行操作和產(chǎn)生輸出來執(zhí)行本發(fā)明的功能。方法步驟可以由專用邏輯電路來執(zhí)行,并且本發(fā)明的裝置也可以被實施為該專用邏輯電路,例如,F(xiàn)PGA(場可編程門陣列)或ASIC(專用集成電路)。所述方法步驟還可以用除上述次序以外的次序來執(zhí)行。
適于執(zhí)行計算機(jī)程序的處理器包括例如通用和專用微處理器、以及任何種類的數(shù)字計算機(jī)的任意一個或多個處理器。通常,處理器將從只讀存儲器或隨機(jī)存取存儲器或兩者接收指令和數(shù)據(jù)。計算機(jī)的主要元件是執(zhí)行指令的處理器和存儲指令和數(shù)據(jù)的一個或多個存儲器。通常,計算機(jī)還將包括或操作地耦合到一個或多個用于存儲數(shù)據(jù)的海量存儲設(shè)備,以便從其接收數(shù)據(jù)或向其傳輸數(shù)據(jù),例如,磁盤、磁光盤、或光盤。適于具體化計算機(jī)程序指令和數(shù)據(jù)的信息載體包括各種形式的非易失性存儲器,包括例如半導(dǎo)體存儲器設(shè)備,例如EPROM、EEPROM和閃速存儲器設(shè)備;磁盤,例如內(nèi)部硬盤或可移動盤;磁光盤;以及CD-ROM和DVD-ROM盤。處理器和存儲器可以補(bǔ)充有專用邏輯電路或結(jié)合在專用邏輯電路中。
本發(fā)明可以實施在一種計算系統(tǒng)中,其包括后端構(gòu)件,例如數(shù)據(jù)服務(wù)器,或者包括中間件構(gòu)件,例如應(yīng)用服務(wù)器,或者包括前端構(gòu)件,例如具有圖形用戶界面或網(wǎng)絡(luò)瀏覽器的客戶計算機(jī),通過其用戶能夠與本發(fā)明的實施來交互,或者任何這樣的后端、中間件、或前端構(gòu)件的組合。
本發(fā)明已經(jīng)通過特定的實施例進(jìn)行了描述。其它的實施例也在所附權(quán)利要求書的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種計算機(jī)程序產(chǎn)品,有形地具體化在信息載體中,用于從供應(yīng)商軟件構(gòu)件向消費者軟件構(gòu)件提供服務(wù),所述計算機(jī)程序產(chǎn)品可操作,使得數(shù)據(jù)處理裝置執(zhí)行以下操作從消費者軟件構(gòu)件截取軟件請求;和用由供應(yīng)商軟件構(gòu)件中的對象提供的方法清單中的一組語義說明檢查所述軟件請求。
2.如權(quán)利要求1所述的計算機(jī)程序產(chǎn)品,其中所述清單是從數(shù)據(jù)庫中對象的描述的儲存庫中導(dǎo)出的。
3.如權(quán)利要求1或2所述的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品可操作來進(jìn)一步使得數(shù)據(jù)處理裝置執(zhí)行以下操作執(zhí)行由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法,并基于具有一個或多個方法的語義說明的軟件請求與儲存庫中的對象的匹配來組合一個或多個方法的結(jié)果。
4.如權(quán)利要求3所述的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品可操作來進(jìn)一步使得數(shù)據(jù)處理裝置執(zhí)行以下操作為由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法的執(zhí)行添加追蹤功能用于軟件調(diào)試。
5.如權(quán)利要求3或4所述的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品可操作來進(jìn)一步使得數(shù)據(jù)處理裝置執(zhí)行以下操作在執(zhí)行期間收集由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法發(fā)送的一個或多個消息。
6.如權(quán)利要求3、4或5所述的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品可操作來進(jìn)一步使得數(shù)據(jù)處理裝置執(zhí)行以下操作防止在提供的軟件構(gòu)件中的對象為第二消費者軟件構(gòu)件執(zhí)行一個或多個方法,直到與第一消費者軟件構(gòu)件的交易完成。
7.如前面權(quán)利要求之一所述的計算機(jī)程序產(chǎn)品,包括代理構(gòu)件,用于與消費者軟件構(gòu)件連接;和后端構(gòu)件,用于與供應(yīng)商軟件構(gòu)件連接。
8.一種用于通過應(yīng)用服務(wù)器提供服務(wù)的方法,所述方法包括從消費者軟件構(gòu)件收集對來自供應(yīng)商軟件構(gòu)件的服務(wù)的請求;以及用由供應(yīng)商軟件構(gòu)件中的對象提供的方法清單中的一組語義說明來檢查所述軟件請求。
9.如權(quán)利要求8所述的方法,其中所述清單是從數(shù)據(jù)庫中對象的描述的儲存庫中導(dǎo)出的。
10.如權(quán)利要求8或9所述的方法,還包括執(zhí)行由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法;以及基于具有一個或多個方法的語義說明的軟件請求與儲存庫中的對象的匹配來組合一個或多個方法的結(jié)果。
11.如權(quán)利要求8、9或10所述的方法,還包括為由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法的執(zhí)行添加追蹤功能用于軟件調(diào)試。
12.如權(quán)利要求8、9、10或11所述的方法,還包括在執(zhí)行期間收集由供應(yīng)商軟件構(gòu)件中的對象提供的一個或多個方法發(fā)送的一個或多個消息。
13.如權(quán)利要求8、9、10、11或12所述的方法,還包括防止在提供的軟件構(gòu)件中的對象為第二消費者軟件構(gòu)件執(zhí)行一個或多個方法,直到與第一消費者軟件構(gòu)件的交易完成。
14.一種系統(tǒng),包括第一計算機(jī),配置來執(zhí)行客戶程序;第二計算機(jī),配置來執(zhí)行服務(wù)器程序;網(wǎng)絡(luò),鏈接第一和第二計算機(jī)以便服務(wù)器程序被配置來執(zhí)行以下操作從客戶程序收集對來自服務(wù)器程序的服務(wù)的請求;以及用由服務(wù)器程序提供的對象提供的方法清單中的一組語義說明來檢查所述請求。
15.如權(quán)利要求14所述的系統(tǒng),其中所述清單是從數(shù)據(jù)庫中對象的描述的儲存庫中導(dǎo)出的。
16.如權(quán)利要求14或15所述的系統(tǒng),其中所述服務(wù)器程序還被配置來進(jìn)一步執(zhí)行以下操作執(zhí)行由服務(wù)器程序中的對象提供的一個或多個方法;以及基于具有一個或多個方法的語義說明的軟件請求與儲存庫中的對象的匹配來組合一個或多個方法的結(jié)果。
17.如權(quán)利要求16所述的系統(tǒng),其中所述服務(wù)器程序還被配置來進(jìn)一步執(zhí)行以下操作為由服務(wù)器程序提供的對象提供的一個或多個方法執(zhí)行添加追蹤功能用于軟件調(diào)試。
18.如權(quán)利要求14、15、16或17所述的系統(tǒng),其中所述服務(wù)器程序還被配置來進(jìn)一步執(zhí)行以下操作在執(zhí)行期間收集由服務(wù)器程序中的對象提供的一個或多個方法發(fā)送的一個或多個消息。
19.如權(quán)利要求14、15、16、17或18所述的系統(tǒng),其中所述服務(wù)器程序還被配置來進(jìn)一步執(zhí)行以下操作防止由服務(wù)器程序提供的對象為第二客戶程序執(zhí)行一個或多個方法,直到與第一客戶程序的交易完成。
全文摘要
本發(fā)明涉及方法和裝置,包括計算機(jī)程序產(chǎn)品,用于由應(yīng)用服務(wù)器提供服務(wù),所述方法包括從消費者軟件構(gòu)件收集對來自供應(yīng)商軟件構(gòu)件的服務(wù)的請求,以及用由供應(yīng)商軟件構(gòu)件中的對象提供的方法清單中的一組語義說明來檢查所述請求。
文檔編號G06Q10/00GK1836231SQ200480021137
公開日2006年9月20日 申請日期2004年7月6日 優(yōu)先權(quán)日2003年7月22日
發(fā)明者雷納·布倫德里, 弗蘭克·布倫斯威格, 約瑟夫·迪特爾, 拉爾夫·克蘭, 于爾根·雷梅爾, 斯蒂芬·里特, 約翰尼斯·維格納 申請人:Sap股份公司