專利名稱:避免網(wǎng)格計算應(yīng)用依賴底層開發(fā)工具箱的方法
技術(shù)領(lǐng)域:
本發(fā)明是一種用于開放的網(wǎng)格環(huán)境中,采用控制反轉(zhuǎn)等技術(shù)解耦網(wǎng)格上層應(yīng)用對低層網(wǎng)格工具箱的依賴,從而使上層應(yīng)用可以基于統(tǒng)一標(biāo)準(zhǔn)的API調(diào)用低層服務(wù)實現(xiàn),而無須了解具體的服務(wù)實現(xiàn)提供者的技術(shù)方案。本技術(shù)屬于網(wǎng)格計算中間件技術(shù)領(lǐng)域。
背景技術(shù):
網(wǎng)格被認(rèn)為是下一代萬維網(wǎng),它是隨著Web技術(shù)的發(fā)展而出現(xiàn)的一種新興技術(shù),它較好的適應(yīng)了Internet的特點(diǎn),能充分實現(xiàn)資源的共享和任務(wù)之間的協(xié)作完成。隨著國內(nèi)外網(wǎng)格研究的不斷升溫,有關(guān)網(wǎng)格應(yīng)用的體系標(biāo)準(zhǔn)逐步制定完善。在2002年的第4界全球網(wǎng)格論壇(Global Grid Forum,GGF)會議上,IBM和Globus協(xié)作公共倡議了開放網(wǎng)格服務(wù)體系結(jié)構(gòu)(Open Grid Services Architecture,OGSA)這一基于網(wǎng)格的應(yīng)用的通用標(biāo)準(zhǔn)體系結(jié)構(gòu)。隨后GGF組織的OGSI(Open GridServices Infrastructure)工作組制定了實現(xiàn)OGSA中各種概念的OGSI規(guī)范為創(chuàng)建、管理和網(wǎng)格服務(wù)之間的交互定義了標(biāo)準(zhǔn)的接口、行為。相應(yīng)地,網(wǎng)格計算應(yīng)用底層支撐平臺也不斷推陳出新,Globus Toolkit 3.0(GT3)是第一個基于OGSI1.0標(biāo)準(zhǔn)而實現(xiàn)的用于開發(fā)網(wǎng)格應(yīng)用的工具包。
盡管目前越來越多的組織和機(jī)構(gòu)投入到網(wǎng)格技術(shù)的開發(fā)中,出現(xiàn)了各種網(wǎng)格應(yīng)用開發(fā)支撐平臺,但是基于這些工具箱的網(wǎng)格應(yīng)用開發(fā)存在過程繁瑣、對工具箱較為依賴等不足之處。在使用這些平臺編寫網(wǎng)格應(yīng)用程序之前,網(wǎng)格計算應(yīng)用開發(fā)者必須先詳細(xì)了解這些工具箱的使用方法并熟悉相應(yīng)于不同工具箱的編譯、部署、發(fā)布等命令和步驟。并且這些工具箱仍處于不斷的更新?lián)Q代之中,一旦變換了不同的開發(fā)平臺,開發(fā)者必需重新花費(fèi)時間和精力來掌握它的使用方法、命令及步驟。簡化網(wǎng)格應(yīng)用開發(fā)和減少其對工具箱的依賴成為影響網(wǎng)格技術(shù)廣泛使用的重要因素。因此研究一種避免網(wǎng)格計算應(yīng)用依賴底層開發(fā)工具箱的軟件具有重要意義。
發(fā)明內(nèi)容
技術(shù)問題本發(fā)明的目的是提供一種解耦網(wǎng)格上層應(yīng)用對避免網(wǎng)格計算應(yīng)用依賴底層開發(fā)工具箱的方法,使上層網(wǎng)格計算應(yīng)用不依賴于具體哪個或者哪幾個工具箱,而可以通過標(biāo)準(zhǔn)的接口以統(tǒng)一的方式調(diào)用低層工具箱的服務(wù)實現(xiàn),平滑地用新的工具箱代替原來的工具箱,從而達(dá)到簡化網(wǎng)格應(yīng)用開發(fā)的目的和解決網(wǎng)格應(yīng)用開發(fā)中不同工具箱變換的問題。
技術(shù)方案本發(fā)明的控制反轉(zhuǎn)器是一種改進(jìn)性的方法,通過加入一個位于網(wǎng)格上層應(yīng)用和提供網(wǎng)格支撐平臺的低層工具箱之間的中間件而提出。該中間件使用控制反轉(zhuǎn)等技術(shù)對低層工具箱進(jìn)行封裝,在上層網(wǎng)格應(yīng)用調(diào)用服務(wù)時動態(tài)尋找匹配的低層工具箱的服務(wù)實現(xiàn),并完成不同工具箱之間的平滑轉(zhuǎn)換。
在現(xiàn)有的網(wǎng)格上層應(yīng)用中,由于被調(diào)用的服務(wù)實現(xiàn)名稱寫入了服務(wù)調(diào)用者的代碼中,這使得服務(wù)調(diào)用者和服務(wù)提供者產(chǎn)生了緊密聯(lián)系,在UML中用依賴Dependency表示。為了避免網(wǎng)格應(yīng)用對工具箱的依賴,必須分割這種依賴,于是我們引入了控制反轉(zhuǎn)Ioc(Inversion of Control)模式。
控制反轉(zhuǎn)是一種組件的協(xié)作和組織方式,它解耦調(diào)用者和被調(diào)用者的聯(lián)系,分離了接口和具體實現(xiàn)。使用這種模式,可以不管將來具體實現(xiàn),完全在一個抽象層次進(jìn)行描述和技術(shù)架構(gòu),因此,Ioc模式可以為容器、框架之類的軟件實現(xiàn)提供了具體的實現(xiàn)手段,屬于架構(gòu)技術(shù)中一種重要的模式應(yīng)用。Ioc模式分為構(gòu)造注入、設(shè)值注入、接口注入等多種類型,它們分別在EJB/J2EE、Avalon、SpringFramework、WebWork/Xwork、PicoContainer、HiveMind等架構(gòu)中被用于實現(xiàn)調(diào)用者和被調(diào)用者解耦,達(dá)到分離接口與具體實現(xiàn)的目的。對于開放的網(wǎng)格環(huán)境中網(wǎng)格服務(wù)調(diào)用者和服務(wù)提供者的解耦,Ioc模式提供了較好的實現(xiàn)手段。
一、體系結(jié)構(gòu)我們把開放網(wǎng)格服務(wù)體系由上至下分為應(yīng)用層、應(yīng)用封裝層、低層服務(wù)層和資源層,Ioc封裝中間件位于應(yīng)用封裝層。它位于應(yīng)用層和低層服務(wù)層之間,通過對低層服務(wù)層的封裝,向上層提供訪問低層網(wǎng)格服務(wù)的統(tǒng)一、標(biāo)準(zhǔn)接口,實現(xiàn)網(wǎng)格服務(wù)調(diào)用的動態(tài)適配,進(jìn)行接口協(xié)調(diào)和管理。
低層服務(wù)是傳統(tǒng)意義上的網(wǎng)格服務(wù)層,低層服務(wù)主要由Globus、CSF以及SRB等開源的網(wǎng)格計算工具箱提供,與應(yīng)用封裝層的中間件不同,它們是通用的面向系統(tǒng)的中間件。低層服務(wù)層提供了核心的網(wǎng)格計算服務(wù)能力。隨著網(wǎng)格服務(wù)體系規(guī)范的不斷更新完善,勢必出現(xiàn)各種各樣的網(wǎng)格服務(wù)提供者。而用戶關(guān)心的是怎樣更好的使用網(wǎng)格服務(wù)來解決問題,因此通過應(yīng)用封裝層解耦上層對這些底層架構(gòu)的依賴,巧妙地避免了用戶直接對低層工具箱進(jìn)行操作,達(dá)到了我們簡化網(wǎng)格應(yīng)用開發(fā)的目的。
二、方法流程1.通用網(wǎng)格服務(wù)調(diào)用流程目前基于Web服務(wù)的網(wǎng)格服務(wù)是客戶端/服務(wù)端模式的,圖2所示的網(wǎng)格服務(wù)調(diào)用流程是在客戶端已經(jīng)通過UDDI(Universal Description,Discovery andIntegration)注冊器獲得網(wǎng)格服務(wù)端地址并從服務(wù)端得到GWSDL(Grid WSDL)網(wǎng)格服務(wù)描述之后,它包括網(wǎng)格客戶端與服務(wù)端之間的一系列交互step1用戶應(yīng)用程序調(diào)用客戶端stub,由其將本地調(diào)用轉(zhuǎn)換成合適的SOAP請求;step2SOAP請求使用HTTP協(xié)議通過網(wǎng)絡(luò)發(fā)送給服務(wù)端,網(wǎng)格服務(wù)容器接收到SOAP請求后將它交給服務(wù)器stub,服務(wù)器stub把SOAP請求轉(zhuǎn)換為服務(wù)器實現(xiàn)程序能夠理解的形式;step3服務(wù)器實現(xiàn)部分收到從服務(wù)器stub轉(zhuǎn)來的請求后,執(zhí)行所請求的工作;step4執(zhí)行請求的結(jié)果由服務(wù)器stub處理轉(zhuǎn)換為SOAP響應(yīng);step5SOAP響應(yīng)使用HTTP協(xié)議通過網(wǎng)絡(luò)發(fā)送回客戶端??蛻舳藄tub收到SOAP響應(yīng)并將其轉(zhuǎn)換為客戶端應(yīng)用可以理解的形式;step6最終客戶端應(yīng)用接收到調(diào)用網(wǎng)格服務(wù)的結(jié)果并使用這個結(jié)果。
2.傳統(tǒng)網(wǎng)格應(yīng)用開發(fā)流程傳統(tǒng)的網(wǎng)格應(yīng)用開發(fā)直接基于已有的網(wǎng)格底層支撐平臺,這里我們以網(wǎng)格當(dāng)前的最為成熟的Globus Toolkit網(wǎng)格工具箱為例來說明傳統(tǒng)的網(wǎng)格應(yīng)用開發(fā)流程。目前Globus Toolkit的正式版本為GT3(Glbus Toolkit 3),它遵照了OGSA網(wǎng)格體系架構(gòu)及核心OGSI標(biāo)準(zhǔn)實現(xiàn)。使用GT3開發(fā)網(wǎng)格應(yīng)用包括服務(wù)端的網(wǎng)格服務(wù)描述GWSDL、服務(wù)實現(xiàn)程序、網(wǎng)格服務(wù)部署描述WSDD(Web Service DeploymentDescriptor)文件和客戶端的用戶應(yīng)用程序的編寫,服務(wù)器stub和客戶端stub的生成。通過使用GT3來編寫網(wǎng)格服務(wù),將其部署到GT3網(wǎng)格服務(wù)端并通過客戶端完成服務(wù)調(diào)用的基本執(zhí)行流程。
下面以實現(xiàn)網(wǎng)格平臺上數(shù)學(xué)運(yùn)算的MathService網(wǎng)格服務(wù)為例闡述網(wǎng)格應(yīng)用開發(fā)流程的主要步驟(1)網(wǎng)格服務(wù)器端開發(fā)流程step1用Java編寫網(wǎng)格服務(wù)接口程序,通過Java2WSDL工具將其轉(zhuǎn)換成WSDL格式的服務(wù)接口描述文件,再經(jīng)過DecorateWSDL工具將其修飾成最終的WSDL服務(wù)接口描述文件;step2借助工具GSDL2Java由WSDL服務(wù)接口描述文件生成Java格式的Stub文件,再通過JAVAC編譯成class格式的Stub文件,并打包成Math-stub.jar。這個包將會用于客戶端的應(yīng)用程序編譯;step3用Java編寫網(wǎng)格服務(wù)實現(xiàn)程序,通過JAVAC編譯成class格式的服務(wù)實現(xiàn)程序,編譯過程中需要將step2中的class格式的Stub文件加為classpath。然后將class格式的服務(wù)實現(xiàn)程序打包成Math.jar;step4編寫WSDD部署描述文件,并將其連同step2生成的Math-stub.jar和step3生成的Math.jar,以及step1得到的WSDL服務(wù)接口描述文件一起打包成Math.gar網(wǎng)格檔案文件。該文件將用于將MathService服務(wù)發(fā)布到網(wǎng)格平臺;step5運(yùn)行GT3提供的指令將Math.gar網(wǎng)格檔案文件發(fā)布到網(wǎng)格平臺;step6啟動GT3網(wǎng)格服務(wù)容器后,允許客戶端調(diào)用該MathService服務(wù)。
(2)網(wǎng)格客戶端開發(fā)流程step1用Java編寫調(diào)用網(wǎng)格服務(wù)的客戶端程序,通過JAVAC編譯成class格式的客戶端程序,編譯過程中需要用到上文step2生成的Math-stub.jar;step2如果所調(diào)用的網(wǎng)格服務(wù)是需要由工廠創(chuàng)建的服務(wù)實例,則需調(diào)用GT3所提供的指令請求服務(wù)端的工廠創(chuàng)建實例;step3執(zhí)行step1得到的客戶端程序調(diào)用網(wǎng)格服務(wù),所調(diào)用網(wǎng)格服務(wù)的
step4GSH(Grid Service Handler)作為參數(shù)提供網(wǎng)格服務(wù)端地址以及服務(wù)所在的位置;step5若服務(wù)器端有相應(yīng)的網(wǎng)格服務(wù)提供,則執(zhí)行用戶的請求,并將結(jié)果返回給客戶端,若沒有該服務(wù)或調(diào)用出錯,則提供一個報錯消息。
step6若不需要step2所創(chuàng)建的服務(wù)實例,可執(zhí)行GT3所提供的指令請求銷毀該實例。
3.服務(wù)調(diào)用與平臺實現(xiàn)耦合點(diǎn)傳統(tǒng)網(wǎng)格應(yīng)用開發(fā)流程的各個部分在網(wǎng)格服務(wù)的調(diào)用與GT3平臺的服務(wù)實現(xiàn)之間的耦合點(diǎn)及其與OGSA/OGSI標(biāo)準(zhǔn)的關(guān)系如下●網(wǎng)格服務(wù)接口程序與GT3平臺無耦合,繼承了OGSI標(biāo)準(zhǔn)的GridService接口。
●網(wǎng)格服務(wù)實現(xiàn)程序與GT3平臺耦合,繼承了GT3的GridServiceImpl類,該類實現(xiàn)了GridServiceBase和ServiceDataValueCallback接口,其中GridServiceBase接口繼承了OGSI標(biāo)準(zhǔn)的GridService接口和其他兩個GT3所提供的接口。
●WSDD部署描述文件與GT3平臺耦合,baseClassName,handlerClass,factoryCallback,operationProviders等公共參數(shù)設(shè)定為GT3所提供的實現(xiàn)類。
●調(diào)用網(wǎng)格服務(wù)的客戶端程序與GT3平臺耦合,依賴于stub中的ServiceGridLocator,而該類繼承了GT3所提供的ServiceLocator類并實現(xiàn)了GT3所提供的GridLocator接口。
●工廠實例的創(chuàng)建指令調(diào)用了GT3所提供的CreateService類,該類依賴于GT3所提供的ServiceProperties、GridServiceFactory、OGSIServiceGridLocator等類。同時該類以及GridServiceFactory類都用到了OGSI標(biāo)準(zhǔn)的Factory等接口。
4.服務(wù)調(diào)用與平臺實現(xiàn)耦合剝離為達(dá)到避免網(wǎng)格服務(wù)應(yīng)用開發(fā)依賴于固定的網(wǎng)格底層支撐平臺,須將服務(wù)調(diào)用和服務(wù)實現(xiàn)在這些耦合點(diǎn)剝離,這個工作將由Ioc封裝中間件來完成。針對不同的情況,中間件將采取不同的方式處理應(yīng)用與低層工具箱之間的聯(lián)系。總體來說,對于與OGSI標(biāo)準(zhǔn)相關(guān)的接口,因為用戶可以根據(jù)現(xiàn)有標(biāo)準(zhǔn)定義的規(guī)范接口來調(diào)用服務(wù),所以我們應(yīng)用Ioc的各類模式將調(diào)用者與被調(diào)用者的聯(lián)系剝離,并將其封裝成符合規(guī)范的接口提供給上層應(yīng)用;而對于標(biāo)準(zhǔn)尚未定義交互接口的耦合,我們根據(jù)需要采取有效的方式進(jìn)行封裝適配以達(dá)到避免依賴低層工具箱的目的。
對各種耦合的主要處理方法如下●對于網(wǎng)格服務(wù)實現(xiàn)程序與GT3的GridServiceImpl類的耦合,采用Ioc的設(shè)值注入方法來解耦服務(wù)實現(xiàn)程序類改為統(tǒng)一繼承中間件中的一個封裝類,而該封裝類對外公布一個方法setProvider,在網(wǎng)格服務(wù)實現(xiàn)程序被調(diào)用時由容器把和平臺相關(guān)的服務(wù)實現(xiàn)基類傳給它。由于用戶在網(wǎng)格服務(wù)實現(xiàn)類里聲明了它所實現(xiàn)的接口,容器需要從該接口中提取與標(biāo)準(zhǔn)相關(guān)的內(nèi)容,并按照標(biāo)準(zhǔn)為給接口所定義的規(guī)范,在平臺的服務(wù)實現(xiàn)中尋找與標(biāo)準(zhǔn)匹配的實現(xiàn)類。當(dāng)平臺服務(wù)實現(xiàn)的接口符合標(biāo)準(zhǔn),只需要針對各個接口的定義進(jìn)行簡單的匹配就可以得出結(jié)果。當(dāng)平臺服務(wù)實現(xiàn)的接口不完全符合標(biāo)準(zhǔn)時,將用到下文將要陳述的算法。
●WSDD部署描述文件中baseClassName,handlerClass,factoryCallback,operationProviders等公共參數(shù)值與GT3的耦合,采用Ioc的構(gòu)造注入方法來解耦將這些公共參數(shù)值統(tǒng)一設(shè)定為中間件的對應(yīng)封裝類,當(dāng)這些類被創(chuàng)建時,確定對應(yīng)的與平臺相關(guān)的類,并為將這些類的實例傳給封裝類。
●調(diào)用網(wǎng)格服務(wù)的客戶端程序與GT3的ServiceGridLocator耦合,采用面向切面織入編程的AOP方法來解耦客戶端程序采用統(tǒng)一的方式來調(diào)用網(wǎng)格服務(wù),即調(diào)用中間件的客戶端調(diào)用類。而該類則根據(jù)不同的網(wǎng)格平臺來處理客戶端的請求并將其按照符合平臺的格式傳送出去。這里的提取的切點(diǎn)是各平臺的網(wǎng)格服務(wù)調(diào)用方法。工廠實例的創(chuàng)建等指令也采取與此相同的方式解耦。
5.標(biāo)準(zhǔn)抽取及匹配算法OGSI定義了最基本的網(wǎng)格服務(wù)所必須實現(xiàn)的GridService portType,以及其他可選portType和特定于應(yīng)用或領(lǐng)域的portType組合。OGSI以Web服務(wù)為基礎(chǔ),采用WSDL作為描述公用網(wǎng)格服務(wù)接口的機(jī)制,遵循XML Schema的語法,呈現(xiàn)為一個ogsi.gwsdl文檔。當(dāng)網(wǎng)格底層支撐平臺所提供的服務(wù)實現(xiàn)接口不符合該標(biāo)準(zhǔn),我們需要知道這些服務(wù)實現(xiàn)與標(biāo)準(zhǔn)的匹配程度以及對應(yīng)關(guān)系。參考XML Schema的語法結(jié)構(gòu),根據(jù)ogsi.gwsdl將各個規(guī)范portType解析成排序有根樹(orderedrooted tree),然后以這些樹為樣本對每個結(jié)點(diǎn)進(jìn)行匹配。
下面給出具體的匹配算法procedure postorder(T排序有根樹)r=T的根for從左到右遍歷r的每個子結(jié)點(diǎn)ribeginT(ri)=以ri為根的子樹postorder(T(ri))endifri是偶級結(jié)點(diǎn)thenm=match(ri)ifri是葉thenifri是r最左的子結(jié)點(diǎn)thenCr=0Cr=Cr+m*μrs....r,riifri是r最右的子結(jié)點(diǎn)thenCr=Cr*μrs....rp,relse Cri=Cri+m*μrs....r,rielse ifri是r最左的子結(jié)點(diǎn)thenCr=0Cr=Cr+Cri樹根標(biāo)識為0,其子按從左至右的順序標(biāo)識為1、2、3、...,其下的子孫結(jié)點(diǎn)以從樹根到該結(jié)點(diǎn)所經(jīng)過的結(jié)點(diǎn)來標(biāo)識,如2的最左的子標(biāo)識為2.1。算法中的μr1.r2....rh,i是r1.r2....rh的第i個子結(jié)點(diǎn)的效能系數(shù)(effect coefficient),代表該結(jié)點(diǎn)對整棵樹匹配的影響效力。最后得到的C0就是整棵portType樹的匹配率。計算過程中所得到的中間結(jié)果Cr矩陣,可通過設(shè)定一個適當(dāng)?shù)拈T限值得到該平臺所提供的服務(wù)接口與標(biāo)準(zhǔn)portType各要素的映射關(guān)系。在調(diào)用服務(wù)時,可以直接參照所得的映射調(diào)用匹配的服務(wù)。
6.Ioc封裝后的網(wǎng)格應(yīng)用開發(fā)流程經(jīng)過Ioc封裝后的網(wǎng)格應(yīng)用開發(fā)流程仍分為編譯、打包、發(fā)布和調(diào)用四個階段。但是經(jīng)過中間件的封裝,用戶需要提交的服務(wù)接口程序、服務(wù)實現(xiàn)程序、部署描述文檔以及服務(wù)調(diào)用程序都脫離了具體的網(wǎng)格計算底層平臺,原來與平臺之間的耦合由中間件所提供的統(tǒng)一API替代,實現(xiàn)了調(diào)用者與被調(diào)用者的聯(lián)系剝離。從而開發(fā)流程前兩個階段服務(wù)端的編譯和打包和客戶端的編譯可以完全不依賴于網(wǎng)格工具箱。在開發(fā)流程的后兩個階段中,被剝離的依賴將完成按需重新注入●發(fā)布階段由于服務(wù)的發(fā)布與具體的網(wǎng)格底層平臺有關(guān),涉及到不同平臺對服務(wù)接口描述文檔、服務(wù)實現(xiàn)類庫的路徑設(shè)置以及服務(wù)端的配置修改。因此這個階段將完成部署描述文檔與平臺相關(guān)內(nèi)容的重新注入,而其他部分如服務(wù)實現(xiàn)仍然保持與平臺的不相關(guān)性。
●調(diào)用階段在這個階段所開發(fā)的服務(wù)應(yīng)用被調(diào)用并執(zhí)行得到結(jié)果,故這個階段將完成所有的依賴重新注入。按照調(diào)用的服務(wù),可以有不同的注入順序若調(diào)用的是需由工廠創(chuàng)建的服務(wù),依次完成注入的是客戶端工廠服務(wù)實例創(chuàng)建請求,服務(wù)實現(xiàn),客戶端服務(wù)調(diào)用,服務(wù)實例撤銷請求;若調(diào)用的是暫時性的服務(wù),依次完成注入的是客戶端服務(wù)調(diào)用,服務(wù)實現(xiàn)。
有益效果本發(fā)明方法提出了一種避免網(wǎng)格計算應(yīng)用開發(fā)依賴網(wǎng)格計算底層開發(fā)工具箱的新方法,主要用于解決網(wǎng)格計算應(yīng)用無法脫離平臺進(jìn)行的問題,為簡化網(wǎng)格計算應(yīng)用開發(fā)流程提供便利。通過使用本發(fā)明提出的方法網(wǎng)格計算應(yīng)用開發(fā)可使用統(tǒng)一的API,避免了開發(fā)者熟悉不同網(wǎng)格底層支撐平臺的重復(fù)勞動和依賴GT3等平臺開發(fā)網(wǎng)格服務(wù)的復(fù)雜性。而且本發(fā)明使網(wǎng)格計算應(yīng)用開發(fā)的各個階段盡可能地相互獨(dú)立,有利于各階段處理過程的基于ant等工具的簡化,可以提高設(shè)計方法的簡便性和靈活性。避免網(wǎng)格計算應(yīng)用開發(fā)依賴網(wǎng)格計算工具箱具有如下優(yōu)點(diǎn)
1.開發(fā)編程簡易本發(fā)明旨在簡化網(wǎng)格計算應(yīng)用開發(fā),避免了其對底層工具箱的依賴,很大程度地方便了應(yīng)用開發(fā)者的服務(wù)實現(xiàn)程序和部署描述等文檔的編寫。中間件向上提供了統(tǒng)一的API供用戶程序調(diào)用和部署參數(shù)設(shè)置,開發(fā)者不必花費(fèi)時間精力去了解底層工具箱的接口和編程方式,更省去了更換底層工具箱之后的重復(fù)性勞動,使網(wǎng)格計算應(yīng)用的開發(fā)簡單易行。
2.代碼可重用性本發(fā)明的中間件主要工作是完成對底層工具箱的封裝和適配,對于不同的網(wǎng)格底層平臺,只需進(jìn)行一次對工具箱的預(yù)封裝就可使用,采用現(xiàn)有的網(wǎng)格工具箱的通用應(yīng)用模式,可用于多種網(wǎng)格工具箱?;诒景l(fā)明所提供的API,網(wǎng)格計算應(yīng)用程序代碼無須修改就可提交到不同的網(wǎng)格底層平臺上使用,同樣有良好的可重用性。
3.標(biāo)準(zhǔn)的可變性XML已成為Web技術(shù)主流的信息表示格式,雖然網(wǎng)格的各類標(biāo)準(zhǔn)不斷推陳出新,但其表示格式將在較長的時間內(nèi)保持XML格式。本發(fā)明提出的算法不僅可解析XML格式的OGSI標(biāo)準(zhǔn),同樣可以解析將來替代OGSI的新標(biāo)準(zhǔn),只要這些標(biāo)準(zhǔn)采用的是XML格式的。本發(fā)明充分考慮到網(wǎng)格技術(shù)的發(fā)展趨勢,使所提出的方法能有高度的可適應(yīng)性和靈活性。
4.良好的擴(kuò)展性參考開放式網(wǎng)格服務(wù)體系結(jié)構(gòu)模型和五層沙漏體系結(jié)構(gòu),本發(fā)明以網(wǎng)格應(yīng)用中間件的形式呈現(xiàn),其他中間件開發(fā)者可以基于本中間件的封裝對網(wǎng)格計算進(jìn)行進(jìn)一步的開發(fā),體現(xiàn)了良好的可擴(kuò)展性。
5.為網(wǎng)格開發(fā)進(jìn)一步簡化提供支持可以看到基于本發(fā)明的通用應(yīng)用框架中,流程分為四個獨(dú)立的階段編譯、打包、發(fā)布和調(diào)用。網(wǎng)格應(yīng)用開發(fā)的前兩個流程都完全獨(dú)立于網(wǎng)格底層平臺,而后兩個流程也是分步完成依賴注入。用戶只需提交服務(wù)接口、服務(wù)實現(xiàn)、服務(wù)調(diào)用以及部署描述,后面的過程可以通過借助ant等批處理工具來完成。結(jié)合對網(wǎng)格計算應(yīng)用的解析和代碼生成技術(shù),應(yīng)用開發(fā)者可以僅僅提交和普通應(yīng)用程序一樣的服務(wù)實現(xiàn)代碼,通過處理得到符合要求的服務(wù)接口、服務(wù)實現(xiàn)、服務(wù)調(diào)用以及部署描述具體,然后借助圖形界面完成編譯、打包、部署和調(diào)用。因此本發(fā)明為網(wǎng)格應(yīng)用開發(fā)的進(jìn)一步簡化提供了較好的支持。
圖1是Ioc控制反轉(zhuǎn)器在開放網(wǎng)格服務(wù)體系中的層次示意圖。圖中由上至下分為應(yīng)用層、應(yīng)用封裝層、低層服務(wù)層和資源層,Ioc封裝中間件位于應(yīng)用封裝層。
圖2是控制反轉(zhuǎn)器的組件結(jié)構(gòu)圖。它包含解耦器、流程控制器、運(yùn)行調(diào)配器、封裝維護(hù)器四個功能組件。其中解耦器包含實現(xiàn)解耦、部屬解耦、調(diào)用解耦。
圖3是通用網(wǎng)格服務(wù)調(diào)用流程圖。圖中包括網(wǎng)格服務(wù)端與客戶端的一系列交互。
圖4是基于GT3網(wǎng)格平臺的網(wǎng)格應(yīng)用開發(fā)流程圖。圖中顯示了需要編寫、處理、編譯、打包、部署的各類程序和文件及開發(fā)過程。
圖5是Ioc封裝后的網(wǎng)格應(yīng)用開發(fā)流程圖。表示基于本發(fā)明的一個通用應(yīng)用框架。
具體實施例方式
為了方便描述,我們假定有如下應(yīng)用實例網(wǎng)格應(yīng)用開發(fā)者要開發(fā)一個MathService網(wǎng)格服務(wù)。該服務(wù)在網(wǎng)格服務(wù)端提供工廠服務(wù),可響應(yīng)客戶端創(chuàng)建服務(wù)實例的請求。創(chuàng)建的服務(wù)實例對客戶端提交的兩個參數(shù)進(jìn)行加、減、乘、除數(shù)學(xué)計算并返回計算結(jié)果?,F(xiàn)采用GT3.0.2網(wǎng)格底層平臺的服務(wù)端與客戶端。
則其具體實施方式
為(1)應(yīng)用開發(fā)者編寫服務(wù)接口程序Math.java聲明MathService網(wǎng)格服務(wù)所要實現(xiàn)的加、減、乘、除等數(shù)學(xué)運(yùn)算操作及其參數(shù)及返回值類型;(2)應(yīng)用開發(fā)者編寫服務(wù)實現(xiàn)程序MathImpl.java聲明其基類為中間件所提供的通用網(wǎng)格服務(wù)實現(xiàn)封裝類,并實現(xiàn)MathPortType接口(該接口將由服務(wù)接口程序Math.java生成);同編寫普通接口實現(xiàn)程序一樣,開發(fā)者在程序體內(nèi)編寫上一步接口程序中聲明的所有操作的具體實現(xiàn)代碼;(3)應(yīng)用開發(fā)者編寫部署描述文檔Math.wsdd設(shè)定描述MathService網(wǎng)格服務(wù)的名稱、服務(wù)實例的名稱、WSDL的路徑、服務(wù)實例的基類等的參數(shù);公共參數(shù)中的baseClassName、handlerClass、factoryCallback、operationProviders分別設(shè)定為中間件提供的對應(yīng)封裝類;(4)借助ant完成編譯打包將所需要進(jìn)行的服務(wù)接口編譯生成、服務(wù)實現(xiàn)編譯、文檔復(fù)制等工作以build.xml的形式提交,ant將按照給定順序處理用戶所提交的所有程序和文檔,并給出每階段處理信息的反饋,如無錯誤將會顯示build成功,直接得到需要發(fā)布到平臺服務(wù)端上的Math.gar網(wǎng)格檔案文件。
(5)發(fā)布到網(wǎng)格計算平臺服務(wù)端調(diào)用本中間件提供的部署解析程序,該程序?qū)⒆詣痈鶕?jù)所識別的網(wǎng)格平臺處理部署描述文檔,針對GT3.0.2平臺,它將處理●將部署描述文檔中相關(guān)參數(shù)修改為GT3.0.2的相應(yīng)實現(xiàn)類;●調(diào)用ant和包含GT3.0.2平臺發(fā)布信息的deploy文檔進(jìn)行服務(wù)發(fā)布;(6)客戶端請求創(chuàng)建工廠服務(wù)實例調(diào)用本中間件提供的用戶請求加裝程序,該程序?qū)⒆R別網(wǎng)格平臺并根據(jù)用戶提出的創(chuàng)建工廠服務(wù)實例的請求,按照具體的平臺向服務(wù)端提出格式符合要求的實例創(chuàng)建請求;(7)服務(wù)端創(chuàng)建工廠服務(wù)實例服務(wù)端容器響應(yīng)客戶端請求,創(chuàng)建工廠服務(wù)實例所進(jìn)行的工作如下●容器根據(jù)服務(wù)接口查找匹配的低層服務(wù)提供者,得到GT3.0.2工具箱的服務(wù)實現(xiàn)類;●容器依照請求所帶的參數(shù)(網(wǎng)格服務(wù)句柄GSH)查找到已發(fā)布在平臺服務(wù)端的MathService服務(wù)工廠類,為其注入GT3.0.2工具箱的服務(wù)實現(xiàn)類;●容器創(chuàng)建MathService的實例,將其加入容器實例庫,并通知客戶端創(chuàng)建成功并告知所創(chuàng)建實例的GSH;(8)客戶端調(diào)用服務(wù)實例進(jìn)行數(shù)學(xué)運(yùn)算調(diào)用本中間件提供的用戶請求加裝程序,該程序?qū)⑻幚碛脩舻恼{(diào)用及相關(guān)參數(shù)按照具體的平臺向服務(wù)端提出格式符合要求的服務(wù)調(diào)用請求,并根據(jù)用戶的設(shè)置與服務(wù)端協(xié)商好返回結(jié)果的格式;(9)服務(wù)端執(zhí)行對服務(wù)實例的操作服務(wù)端容器接收到客戶端的請求,在實例庫中查找到對應(yīng)GSH的實例,調(diào)用所請求的操作,并將結(jié)果按照約定的格式返回給客戶端;(10)客戶端得到所請求數(shù)學(xué)運(yùn)算操作的結(jié)果,全過程結(jié)束。
權(quán)利要求
1.一種避免網(wǎng)格計算應(yīng)用依賴底層開發(fā)工具箱的方法,其特征在于它將網(wǎng)格應(yīng)用開發(fā)與具體的網(wǎng)格工具箱分離開來,避免網(wǎng)格應(yīng)用依賴于特定的開發(fā)平臺;該方法的控制反轉(zhuǎn)器由流程控制器、解耦器、運(yùn)行調(diào)配器、封裝維護(hù)器組成流程控制器負(fù)責(zé)網(wǎng)格應(yīng)用開發(fā)主流程,控制其他三個組件對用戶提交程序的處理;封裝維護(hù)器封裝網(wǎng)格底層平臺,向流程控制器提供統(tǒng)一的調(diào)用接口;流程控制器將所需服務(wù)的接口作為解耦器的輸入,通過解耦獲得調(diào)用服務(wù)所需的解耦類;運(yùn)行調(diào)配器在啟動服務(wù)調(diào)用時被流程控制器啟動,對服務(wù)調(diào)用過程中底層平臺所出現(xiàn)的變化進(jìn)行實時處理,運(yùn)用這些組件開發(fā)網(wǎng)格計算應(yīng)用的方法具體如下1)啟動控制反轉(zhuǎn)器,封裝維護(hù)器和解耦器解析可用的網(wǎng)格計算底層平臺,進(jìn)行初始的預(yù)封裝和解耦處理;2)由網(wǎng)格計算應(yīng)用開發(fā)者將可在單機(jī)上運(yùn)行的服務(wù)實現(xiàn)、服務(wù)接口和服務(wù)調(diào)用程序提交給控制反轉(zhuǎn)器,流程控制器啟動網(wǎng)格服務(wù)開發(fā)流程;3)流程控制器啟動網(wǎng)格服務(wù)服務(wù)端部署子流程,包括如下步驟a.子流程控制器從解耦器獲得網(wǎng)格服務(wù)實現(xiàn)的虛接口,改寫服務(wù)實現(xiàn)程序;b.子流程控制器編譯改寫后的服務(wù)實現(xiàn)程序和開發(fā)者所提交的服務(wù)接口程序,得到網(wǎng)格服務(wù)實現(xiàn)類及服務(wù)調(diào)用時將使用的stub類;c.子流程控制器請求解耦器進(jìn)行部署解耦,獲取部署描述器公共參數(shù)的公共封裝類,根據(jù)網(wǎng)格計算應(yīng)用開發(fā)者提供的服務(wù)實現(xiàn)程序生成網(wǎng)格服務(wù)部署描述文件;d.子流程控制器將部署描述文件、改寫后的服務(wù)實現(xiàn)程序和開發(fā)者所提交的服務(wù)接口程序打包;e.子流程控制器啟動封裝維護(hù)器,解析部署描述文件中的公共封裝類,獲得與網(wǎng)格計算底層平臺相關(guān)的對應(yīng)類;f.子流程控制器請求解耦器進(jìn)行實現(xiàn)解耦,根據(jù)解析后的部署描述文件將生成的解耦類與網(wǎng)格服務(wù)實現(xiàn)類發(fā)布到具體的網(wǎng)格計算底層平臺;g.子流程控制器通知流程控制器服務(wù)端部署成功;4)流程控制器啟動網(wǎng)格服務(wù)客戶端部署子流程,包括如下步驟a.子流程控制器利用上一子流程生成的stub類,編譯開發(fā)者提交的網(wǎng)格服務(wù)調(diào)用程序,得到網(wǎng)格服務(wù)調(diào)用類;b.子流程控制器從封裝維護(hù)器獲取封裝后的服務(wù)公共操作類,添加網(wǎng)格服務(wù)調(diào)用的預(yù)啟動操作;c.子流程控制器請求解耦器對所開發(fā)的網(wǎng)格服務(wù)進(jìn)行調(diào)用解耦,并將生成的解耦類與網(wǎng)格服務(wù)調(diào)用類、預(yù)啟動操作一起提交給網(wǎng)格服務(wù)調(diào)用方;d.子流程控制器通知流程控制器客戶端部署成功;5)流程控制器通知網(wǎng)格計算應(yīng)用開發(fā)者網(wǎng)格服務(wù)部署開發(fā)成功;6)所開發(fā)的網(wǎng)格服務(wù)使用者在客戶端運(yùn)行網(wǎng)格服務(wù)調(diào)用指令要求調(diào)用網(wǎng)格服務(wù),執(zhí)行指令時首先運(yùn)行服務(wù)調(diào)用的預(yù)啟動操作,然后運(yùn)行服務(wù)調(diào)用類,通過解耦類得到反轉(zhuǎn)后的服務(wù)調(diào)用類進(jìn)行網(wǎng)格服務(wù)調(diào)用;7)服務(wù)端的網(wǎng)格計算平臺在接收到客戶端的服務(wù)調(diào)用請求后,查找到對應(yīng)的網(wǎng)格服務(wù)實現(xiàn)類,并運(yùn)行該服務(wù)實現(xiàn)類。服務(wù)實現(xiàn)類通過解耦類得到反轉(zhuǎn)后的服務(wù)實現(xiàn)類,在調(diào)用前要求平臺驗證所提供的支撐類未變;8)如果網(wǎng)格計算平臺確認(rèn)支撐類未變,服務(wù)實現(xiàn)類將直接運(yùn)行得到調(diào)用結(jié)果并返回給客戶端;如果網(wǎng)格計算平臺發(fā)現(xiàn)支撐類發(fā)生了改變,將啟動控制反轉(zhuǎn)器的運(yùn)行調(diào)配器實時尋找可用的支撐類,并向封裝維護(hù)器請求進(jìn)行重封裝。
全文摘要
避免網(wǎng)格計算應(yīng)用依賴底層開發(fā)工具箱的方法是一種用于開放的網(wǎng)格環(huán)境中,采用控制反轉(zhuǎn)等技術(shù)解耦網(wǎng)格上層應(yīng)用對低層網(wǎng)格工具箱的依賴,從而使上層應(yīng)用可以基于統(tǒng)一標(biāo)準(zhǔn)的API調(diào)用低層服務(wù)實現(xiàn),而無須了解具體的服務(wù)實現(xiàn)提供者的技術(shù)方案。該方案解除了網(wǎng)格服務(wù)實現(xiàn)、部署描述和服務(wù)調(diào)用與網(wǎng)格工具箱的耦合,使網(wǎng)格應(yīng)用的開發(fā)的編譯、打包階段可完全脫離網(wǎng)格工具箱進(jìn)行,而網(wǎng)格的部署和調(diào)用階段均實現(xiàn)了自動按需注入與平臺相關(guān)的內(nèi)容。該方案使網(wǎng)格工具箱對網(wǎng)格應(yīng)用開發(fā)者完全透明,使網(wǎng)格應(yīng)用開發(fā)流程易于簡化,與代碼生成、圖形化界面等技術(shù)相結(jié)合使用,很大程度上方便了網(wǎng)格應(yīng)用的開發(fā)。
文檔編號G06F9/44GK1744037SQ20051009403
公開日2006年3月8日 申請日期2005年8月26日 優(yōu)先權(quán)日2005年8月26日
發(fā)明者王汝傳, 楊清 申請人:南京郵電大學(xué)