專利名稱:用于智能元中的動態(tài)命令擴展的方法和裝置的制作方法
發(fā)明的背景本發(fā)明涉及軟件系統(tǒng)結(jié)構(gòu)設(shè)計,尤其是一種提供軟件組件的動態(tài)擴展的方法,如對象類(object classes)。
在傳統(tǒng)的計算環(huán)境中,可執(zhí)行組件需要向其它的可執(zhí)行組件做請求。我們知道在一些情況下,組件所支持的那些請求被直接地建立到可能對它做請求的所有的組件中。在其它情況下,組件可以具有回答關(guān)于它支持的請求的查詢的能力。后面的情況的優(yōu)點是不需要所有潛在的客戶端擁有所有其它的組件所支持的操作的全部知識。這是眾所周知的技術(shù)。
傳統(tǒng)上,當一個組件收到一個它不能識別的請求時,它通過對請求的組件發(fā)送回一個錯誤(error)來響應。這經(jīng)常會導致請求的組件在請求鏈上的錯誤層疊直到應用失敗。
一些系統(tǒng),諸如Common Lisp,SmallTalk和Forth提供了軟件組件的動態(tài)綁定。但是,在組件實際上被請求之前,這些系統(tǒng)在安裝或類定義時間時進行這種動態(tài)綁定。因此,需要巨大的資源覆蓋區(qū)(large resource footprint)。
域名服務器(DNS)具有請求將一個解決域名的請求傳遞到知識更豐富的服務器中的能力。但是,如果DNS收到它們不能處理的格式的請求,它們不具有升級它們的功能的能力,如果域名不在它已存儲的列表中時,就只是簡單地傳遞域名。
CORBA動態(tài)調(diào)用接口Dynamic Invocation Interface(DII)和動態(tài)構(gòu)架接口Dynamic Skeleton Interface(DSI)允許對軟件組件請求的動態(tài)調(diào)度,從而對其它組件的改變可以在運行時被利用;但是,它們沒有包括在服務器組件中的可執(zhí)行內(nèi)容的動態(tài)擴展性。服務器組件如果收到它不能處理的請求就返回一個錯誤。
發(fā)明的評述本發(fā)明提供了一種軟件組件,其可以動態(tài)更新它所支持的請求的方法和裝置,而不是在請求不被理解時發(fā)送一個錯誤。從請求的組件(calling component)的角度來看,請求是以標準的方式填充,不返回錯誤。這就有減少不必要的應用失敗的重大意義。
本發(fā)明還提供了一種方法和裝置,當來自客戶端的請求不被理解時,軟件組件在遠程服務器上檢索可能發(fā)現(xiàn)的合適的升級軟件,從而滿足請求而不返回錯誤。
附圖的簡要說明
圖1表示設(shè)置用于應用本發(fā)明的第一實施例的系統(tǒng)的裝置;圖2是說明第一實施例的控制流程的交互流程圖;圖3A表示根據(jù)本發(fā)明的第二實施例的裝置;圖3B表示圖3A所示的裝置的功能;圖4表示根據(jù)本發(fā)明的第三實施例的裝置;圖5表示根據(jù)本發(fā)明的第四實施例的裝置。
詳細說明本發(fā)明的幾個實施例參見此后的圖1-5的介紹。這些實施例全都是在請求可以由客戶端在運行時動態(tài)構(gòu)成并被發(fā)送給服務器處理的環(huán)境下操作的。這與請求是在編譯時靜態(tài)地建立的語言編譯系統(tǒng)相反,通常被確認為與靜態(tài)定義接口不同。而是,它被認為是在任何時侯相互獨立情況下,服務器可以改變它的接口,客戶端可以改變它的請求。在這種情況下,客戶端必須為服務器拒絕任何請求做準備,即使請求預先成功地被處理。每個實施例增加了一個機構(gòu)以定位和加載應用程序以處理客戶端對前述的未知的命令的請求。這使得否則就會失敗的請求成功地完成。
如圖1和2所示的本發(fā)明的第一實施例。本發(fā)明的這一特殊實施例在一基于對象的操作環(huán)境下操作,雖然本發(fā)明的其它實施例可能在其它的組件可能是在應用客戶端組件的軟件環(huán)境下操作,例如采用參數(shù)、限量或方法?;趯ο蟮能浖h(huán)境是眾所周知的,許多的軟件環(huán)境是基于對象模型的。在這種環(huán)境下,對象類被定義,每個對象類有一組方法(method)。對象類的分級會經(jīng)常被提供,子類具有它們的父類的所有方法和特性以及進一步的方法和特性。軟件組件可以產(chǎn)生定義的類的對象實例,其可以獨立地起作用。相同對象的許多實例可能同時存在并且每個單獨起作用。調(diào)用其它對象的方法的對象起到客戶端對象的作用,被調(diào)用的含有方法的對象起到服務器對象的作用。如圖1所示,對象12、14、18通過接口20相互通訊。接口的特性根據(jù)系統(tǒng)的結(jié)構(gòu)設(shè)計而變化。例如,它允許在采用適當?shù)膮f(xié)議的網(wǎng)絡中,在對象間相互通訊。與每個對象結(jié)合的服務器請求阻止器server request interceptor(SRI)16阻止對該結(jié)合的對象做出的請求,如圖1的點劃線所示。
圖2是描述動態(tài)請求裝置的總體設(shè)計的統(tǒng)一建模語言Unified ModelingLanguage(UML)交互流程圖并用一例子說明控制流。
在如圖2所示的流程圖中,客戶端12做了調(diào)用服務器組件14上的“foo( )”的請求。此請求可能包括各種可能是不同的數(shù)據(jù)類型的參數(shù)??蛻舳宋粗?,在圖1所示的SRI 16阻止了請求。SRI查詢它所知道的服務器組件當前支持的請求列表162(稱為一個know( )請求)。如果“know(foo)”返回false,服務器請求阻止器SRI就對主請求檔案服務器Request Archive Server(RAS)18做一個“get(foo)”請求,其包含對于在系統(tǒng)中支持的所有請求的可執(zhí)行組件。如果此請求具有與請求不相容的語句,在此情況下,對于組件可以處理的foo( ),對請求檔案服務器RAS 18做一個請求,看是否存在可以處理此請求的新版foo( )存在。請求檔案服務器找到帶有foo( )的可執(zhí)行組件(如果它存在)并用“hereis(foo)”請求把它發(fā)送到服務器組件14。請求檔案服務器還把對get(foo)命令的成功響應發(fā)送到服務器請求阻止器16,還應該把更新的foo( )支持的請求的副本發(fā)送到服務器上以便服務器請求阻止器可以將它們增加到所支持的請求的列表162中。然后,服務器請求阻止器16代表客戶端組件12通過invoke(foo)請求來調(diào)用在服務器組件上的foo( )請求(知道服務器現(xiàn)在支持foo( ))。在invoke(foo)請求返回后,服務器請求阻止器16返回任何合適的值給客戶端組件12。從客戶端來看,可執(zhí)行內(nèi)容的動態(tài)檢索是隱藏的。請求檔案服務器18不需要是一個單一實體;它可以是一個資源分布網(wǎng)絡。為簡化起見,在此實施例中,它被表示為一單一實體。例如,服務器組件可能提供對動態(tài)鏈接庫文件中的對象的訪問。動態(tài)鏈接庫文件提供可以在運行時被連接到程序的功能,因此,當它們被使用時,它們不浪費內(nèi)存。如果類的對象實例文件運行時不能連接到運行的程序,或者如果被訪問的動態(tài)鏈接庫文件不能提供滿足請求的合適的功能,就對動態(tài)鏈接庫文件或其升級版做檢索。例如,所做的檢索可能發(fā)現(xiàn)定位網(wǎng)絡上的其它位置的服務器上的文件。
本發(fā)明的其它實施例,以與圖1的實施例的相似的方式操作,可以包括相同的組件和結(jié)構(gòu),參見此后的圖3-5。
如圖3A所示,本發(fā)明的第二實施例在命令解釋程序環(huán)境下執(zhí)行。在存儲在計算機21的內(nèi)存22中的傳統(tǒng)的命令行解釋程序24中(例如UNIX Bourne命令解釋程序或在MS-DOS中的COMMAND.COM,請求被客戶端編寫成文本行,直接由用戶發(fā)出,從腳本讀取或者由可能產(chǎn)生解釋程序?qū)嵗南到y(tǒng)上的可執(zhí)行組件發(fā)出。在此實例中,解釋程序命令解釋器26起服務器的作用。典型的請求是應用帶有命令行參數(shù)的隨機存儲在長期存儲器29中的程序。命令解釋器具有它理解的某種請求詞庫。該詞庫包括一組內(nèi)部執(zhí)行命令,和外部可用程序,通常存儲在一組指定的目錄內(nèi)。詞庫可以通過增加外部程序被擴展到適當?shù)脑~典中。對于本發(fā)明以前的命令解釋器,如果一個請求不對應于一個內(nèi)部命令或一個外部程序25,命令解釋器將返回一個表示請求沒有被滿足的錯誤消息。
如圖3B所示,根據(jù)本發(fā)明的第二實施例,當一個請求不是命令解釋程序的詞庫中的一部分時,將提供一個擴展機構(gòu)(extension mechanism)進行調(diào)解。命令解釋程序檢索的詞典組,稱為路徑(path),被視為可用程序的高速緩沖存儲器(cache)。當對不在高速緩沖存儲器中的程序做請求時,本發(fā)明的實施例的擴展機構(gòu)就在命令解釋器檢索的范圍之外檢索一個或多個網(wǎng)絡或檔案源28以定位程序。如果程序被定位,通過用程序解釋器把程序復制到路徑中而將程序帶“進高速緩沖存儲器中”。一旦程序被“高速緩存”,即使當初始的請求被做出時,程序在那里,原先的請求可以被重新發(fā)布。
有了該機構(gòu),可以定義外部策略以結(jié)束一個命令并將它從高速緩沖存儲器中刪除,如果需要,預期它可以在稍后被替換。一個這樣的策略可能會刪除近來沒有被使用的程序。另一個策略可能是將版本號和超過時限的失效的程序相對于它們的參考源進行比較,或者當出現(xiàn)一個較新的版本時就自動更新它們。這些策略與動態(tài)命令擴展機構(gòu)相一致并取決于動態(tài)命令擴展機構(gòu),但是不是機構(gòu)本身的一部分。
如圖4所示的本發(fā)明的第三實施例,在客戶端/服務器系統(tǒng)的客戶端,一個協(xié)議解釋器讀取請求,調(diào)用服務器函數(shù)處理它們并返回結(jié)果給客戶端。服務器的詞庫常常由協(xié)議定義,并被客戶端內(nèi)在理解??蛻舳藴蕚湟粋€請求,傳輸給服務器并等待響應。如果客戶端請求的一個操作不被服務器所理解,服務器就返回適當?shù)腻e誤,表示請求不能被滿足。在一些情況下,該反應表示服務器和客戶端沒有使用相同版本的協(xié)議。
第三實施例提供的擴展機構(gòu)以內(nèi)許客戶端和服務器協(xié)議沿著向后兼容的升級路徑獨立發(fā)展??蛻舳?2根據(jù)它估計的來自服務器34(協(xié)議)的詞庫對一個操作做一個請求。協(xié)議結(jié)合死棋試圖找到一種對應于所請求的操作的方法(功能應用)。如果操作是服務器的詞庫的一部分,相關(guān)的方法被調(diào)用,通常返回結(jié)果。如果操作還不是服務器詞庫的一部分,一個或多個網(wǎng)絡或檔案源38被檢索以定位對該操作的方法。如果發(fā)現(xiàn)一個適當?shù)姆椒?,當如果初始的請求被做出時該方法存在,它就被加載到服務器的詞庫中,與該操作結(jié)合并被調(diào)用.以這種方式,服務器可以被動態(tài)地擴展以處理被升級的客戶端做出的請求,使得客戶端和服務器適度地發(fā)展。
如圖5所示的本發(fā)明的第四實施例,在一分布式系統(tǒng)中應用,例如CORBA。在此系統(tǒng)中,客戶端42可以通過服務器對象對執(zhí)行自動建立操作請求。在一個基于CORBA的環(huán)境中,動態(tài)調(diào)用接口(DII)被用于使該功能生效。ORB將操作請求映象到服務器端的對象執(zhí)行的方法中。
根據(jù)此實施例,擴展機構(gòu)對服務客戶端操作請求提供實時的對象執(zhí)行方法的加載。如果客戶端42請求一個不是來自服務器對象44的操作,對象請求代理程序(ORB)調(diào)用ORB外部的檢索組件48以在系統(tǒng)的某處的服務器49上定位一個合適的方法執(zhí)行。如果找到這樣的方法,它與此操作結(jié)合并以正常的方法被調(diào)用。否則,當操作沒有被發(fā)現(xiàn)操作就如其正常情況而失敗。
為了在ORB操作/方法解決機構(gòu)中進行調(diào)節(jié),必須使用ORB賣方(vendor)的特殊接口。許多賣方提供可以允許動態(tài)擴展技術(shù)應用的阻止器機構(gòu)。
本發(fā)明可以在基于系統(tǒng)結(jié)構(gòu)的組件中應用。在這樣的結(jié)構(gòu)中,松散結(jié)合的服務群體合作在一起以提供系統(tǒng)功能。當系統(tǒng)發(fā)展時,這些服務的數(shù)量和特性會隨著時間發(fā)生很大的變化。這樣一個發(fā)展的系統(tǒng)的靈活性通過一個擴展機構(gòu)而增強,當它們被請求時,該擴展機構(gòu)嘗試定位和獲得服務的執(zhí)行。
一客戶端做了一個連接到特殊服務的本地請求。本地服務管理器具有它直接知道的一組服務。如果服務已經(jīng)存在,就做連接并返回客戶端。如果服務不存在,可能是本地服務管理器的一部分動態(tài)擴展機構(gòu),或者是由本地服務管理器驅(qū)動的獨立組件,檢索請求服務的執(zhí)行。如果應用可以被發(fā)現(xiàn),當如果服務已經(jīng)存在時,它被服務管理器加載,連接過程繼續(xù)進行。如果需要,通過在服務識別器中包括一些版本信息可以提供服務的版本,從而有效地使新的版本顯得象一個新的不同的服務。舊的不使用的服務執(zhí)行的刪除是超出動態(tài)擴展機構(gòu)范圍的管理事務。
當本發(fā)明的最佳實施例被說明和介紹時,本技術(shù)領(lǐng)域的普通技術(shù)人員應該理解在沒有偏離本發(fā)明的情況下,在較寬的范圍內(nèi)可以做變化和修改。在此后的權(quán)利要求中闡明了本發(fā)明的各種特征。
權(quán)利要求
1.一種計算機系統(tǒng),包括客戶端組件服務器組件,所述的客戶端組件安排用來對所述的服務器組件做請求;維持可以被所述的服務器滿足的請求的表達的裝置;一請求阻止組件,安排用于阻止來自所述的客戶端組件到所述的服務器組件的請求,如果該請求被服務器支持,從所述的表達建立;其中如果所述的請求不被支持,如果要求所述的服務器支持所述的請求,所述的請求阻止組件被安排檢索外部資源以便定位,并對所述的服務器提供額外的功能以支持所述的請求;所述的請求阻止組件此后將請求傳送給所述的服務器以執(zhí)行。
2.根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中所述的客戶端和服務器組件包括在一個或多個計算機程序中的對象。
3.根據(jù)權(quán)利要求2所述的計算機系統(tǒng),其中所述的服務器組件包括一個在動態(tài)鏈接庫文件中表達的對象,其中所述的請求阻止組件檢索所述的動態(tài)鏈接庫文件,或如果在所述的計算機系統(tǒng)中含有的所述的動態(tài)鏈接庫文件的當前版不能提供所述的服務器組件的功能,檢索所述的動態(tài)鏈接庫文件的升級版。
4.根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中客戶端組件包括一個軟件程序,服務器組件包括一個被軟件組件調(diào)用的操作系統(tǒng)命令解釋程序,請求阻止組件是一個命令解釋器。
5.根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中計算機系統(tǒng)是一個CORBA分布式系統(tǒng),其中所述的客戶端和服務器組件是在所述的系統(tǒng)上的對象,其中所述的請求阻止組件是在對象請求代理程序中。
6.一種計算機系統(tǒng),包括客戶端組件服務器組件,所述的客戶端組件安排用來對所述的服務器組件做請求;包括可以被所述的服務器滿足的請求的表達的裝置;一種裝置,安排用于阻止來自所述的客戶端組件到所述的服務器組件的請求,如果該請求被服務器支持,從所述的表達建立;如果所述的請求不被支持,如果要求所述的服務器支持所述的請求,所述的請求阻止組件被安排檢索外部資源以便定位,并對所述的服務器提供額外的功能以支持所述的請求;此后將請求傳送給所述的服務器以執(zhí)行。
7.根據(jù)權(quán)利要求6所述的計算機系統(tǒng),其中所述的客戶端和服務器組件包括在一個或多個計算機程序中的對象。
8.根據(jù)權(quán)利要求7所述的計算機系統(tǒng),其中所述的服務器組件包括一個在動態(tài)鏈接庫文件中表達的對象,其中所述的請求阻止組件檢索所述的動態(tài)鏈接庫文件,或如果在所述的計算機系統(tǒng)中含有的所述的動態(tài)鏈接庫文件的當前版不能提供所述的服務器組件的功能,檢索所述的動態(tài)鏈接庫文件的升級版。
9.根據(jù)權(quán)利要求6所述的計算機系統(tǒng),其中客戶端組件包括一個軟件程序,服務器組件包括一個被軟件組件調(diào)用的操作系統(tǒng)命令解釋程序,請求阻止組件是一個命令解釋器。
10.根據(jù)權(quán)利要求6所述的計算機系統(tǒng),其中計算機系統(tǒng)是一個CORBA分布式系統(tǒng),其中所述的客戶端和服務器組件是在所述的系統(tǒng)上的對象,其中所述的請求阻止組件是在對象請求代理程序中。
全文摘要
本發(fā)明提供了一種系統(tǒng)(20),其中在沒有對這些組件做請求的客戶端(12)組件沒有被通知由他們的請求啟動的升級的情況下,當需要新功能時,作為服務器(14)的軟件組件可以被升級或被安裝。然后,服務器(14)可以對否則會在客戶端(12)組件中造成錯誤的請求做響應。
文檔編號G06F9/445GK1381004SQ99814817
公開日2002年11月20日 申請日期1999年12月22日 優(yōu)先權(quán)日1998年12月24日
發(fā)明者阿龍·阿博特, 戴爾·舒馬赫, 布雷特·彼得森 申請人:計算機合伙思維公司