專利名稱:一種在云平臺(tái)上以soa的方式部署常規(guī)應(yīng)用的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,尤其涉及云平臺(tái)中SOA與程序分析等方面的內(nèi)容。
背景技術(shù):
云計(jì)算的核心思想是將大量用網(wǎng)絡(luò)連接的計(jì)算資源統(tǒng)一管理和調(diào)度,構(gòu)成一個(gè)計(jì)算資源池向用戶或應(yīng)用提供按需服務(wù)。云計(jì)算將所有的計(jì)算資源集中起來,并由軟件實(shí)現(xiàn)自動(dòng)管理,無需人為參與。這使得應(yīng)用提供者無需為繁瑣的細(xì)節(jié)而煩惱,能夠更加專注于自己的業(yè)務(wù),有利于創(chuàng)新和降低成本。云計(jì)算的提出,雖然解決了單一服務(wù)器性能不足的問題,但也帶來了多個(gè)計(jì)算資源之間的通信問題,SOA(Service Oriented Architecture)很大程度上解決了這一問題。 SOA是一類分布式系統(tǒng)的體系結(jié)構(gòu),這類系統(tǒng)是將異構(gòu)平臺(tái)上應(yīng)用程序的不同功能部件 (稱為服務(wù))通過這些服務(wù)之間定義良好的接口和規(guī)范按松耦合方式整合在一起,即將多個(gè)現(xiàn)有的應(yīng)用軟件通過網(wǎng)絡(luò)將其整合成一個(gè)新系統(tǒng)。云計(jì)算提供強(qiáng)大的計(jì)算能力,SOA實(shí)現(xiàn)多個(gè)資源之間的調(diào)度。采用面向服務(wù)架構(gòu)的云計(jì)算平臺(tái)集這兩種方式于一身,具有眾多優(yōu)點(diǎn),如實(shí)現(xiàn)大量計(jì)算資源的整合,凸顯云計(jì)算的強(qiáng)大計(jì)算能力。將服務(wù)分發(fā)、部署到不同的服務(wù)器上,從而實(shí)現(xiàn)服務(wù)調(diào)度的負(fù)載均衡以及計(jì)算資源的并行利用。云計(jì)算平臺(tái)能夠預(yù)先集成眾多云服務(wù),方便應(yīng)用系統(tǒng)的開發(fā)。服務(wù)開發(fā)與應(yīng)用系統(tǒng)開發(fā)分開,使得需要開發(fā)者關(guān)心的部分互相之間松耦合,一方面解決了項(xiàng)目人員之間溝通難的問題,另一方面也簡(jiǎn)化了開發(fā)者的工作任務(wù),提高了生產(chǎn)效率。
發(fā)明內(nèi)容
本發(fā)明中所涉及的在云計(jì)算平臺(tái)上以SOA的方式部署常規(guī)應(yīng)用的方法及系統(tǒng),解決了將大量已有系統(tǒng)(或者按照常規(guī)方式開發(fā)的應(yīng)用系統(tǒng))向基于SOA的云計(jì)算平臺(tái)平滑遷移的諸多問題。其包含了以下幾個(gè)方面的含義首先,用戶部署源程序及配置文件,配置文件中記錄了源程序中哪些類將以服務(wù)的方式運(yùn)行,叫做服務(wù)類,其未包含在配置文件中的類叫做客戶類。系統(tǒng)讀取配置文件,并在內(nèi)存中生成對(duì)應(yīng)的服務(wù)類列表。其次,系統(tǒng)自動(dòng)更新客戶類的代碼結(jié)構(gòu),將原先調(diào)用服務(wù)類的部分轉(zhuǎn)變?yōu)檎{(diào)用 Stub服務(wù)調(diào)用代碼,其中需要轉(zhuǎn)變的部分包括與服務(wù)類相關(guān)的聲明語句、方法調(diào)用語句及聲明同時(shí)調(diào)用其方法的語句。最后,將用戶上傳的源代碼中與服務(wù)類相關(guān)的部分部署到服務(wù)容器中,將剩下的部分結(jié)合^ub服務(wù)調(diào)用代碼一起部署到應(yīng)用服務(wù)器中。本發(fā)明提供一種在云計(jì)算平臺(tái)上以SOA的方式部署常規(guī)應(yīng)用的方法,包括下列步驟1)解析用戶設(shè)定的配置文件,并在內(nèi)存結(jié)構(gòu)中生成一個(gè)服務(wù)類列表,方便通過服務(wù)類生成對(duì)應(yīng)的WSDL文件及客戶類代碼的動(dòng)態(tài)更新。2)根據(jù)服務(wù)類列表中的信息,從用戶部署的源代碼文件中提取服務(wù)類,并生成相應(yīng)的WSDL文件。3)根據(jù)生成的WSDL文件產(chǎn)生對(duì)應(yīng)的Mub服務(wù)代碼,將Mub服務(wù)調(diào)用代碼添加到用戶部署的源文件中。4)根據(jù)服務(wù)類列表,自動(dòng)更新客戶類,將與服務(wù)類相關(guān)的聲明語句、方法調(diào)用語句等動(dòng)態(tài)調(diào)整為與Mub服務(wù)調(diào)用相匹配的方式。5)將源代碼中與服務(wù)類相關(guān)的部分分別部署到不同的服務(wù)容器中,剩下的部分類結(jié)合^ub服務(wù)調(diào)用代碼一起部署到應(yīng)用服務(wù)器中。其中,在所述步驟1)中,通過解析用戶部署的配置文件,將用戶配置的服務(wù)類在內(nèi)存結(jié)構(gòu)中構(gòu)建一張對(duì)應(yīng)的服務(wù)類別表。用戶配置的服務(wù)類表示需要在云計(jì)算平臺(tái)中以服務(wù)的方式運(yùn)行,與調(diào)用它們的客戶類區(qū)別開來。用戶設(shè)定的配置文件格式是XML文件,服務(wù)類以namel-class對(duì)的形似存在。通過DOM技術(shù)即可完成XML配置文件的解析。其中,在所述步驟幻中,首先根據(jù)服務(wù)類列表的內(nèi)容,從用戶上傳的源文件中提取對(duì)應(yīng)的服務(wù)類,接著使用工具(如jaVa2WSdl命令)為每一個(gè)服務(wù)類生成對(duì)應(yīng)的WSDL文件,整個(gè)過程由程序自動(dòng)完成。其中,在所述步驟3)中,首先根據(jù)生成的WSDL文件,使用工具(如wsdl2java命令)生成對(duì)應(yīng)的Mub服務(wù)調(diào)用代碼,wsdl2java并不是javdwsdl的逆向運(yùn)算,而是產(chǎn)生對(duì)WSDL文件的封裝代碼。接著將產(chǎn)生的Mub服務(wù)調(diào)用代碼嵌入源程序中,整個(gè)過程由程序自動(dòng)完成。其中,所述步驟4)中,自動(dòng)更新客戶類是通過動(dòng)態(tài)分析客戶類源程序,將與服務(wù)類相關(guān)的聲明語句、方法調(diào)用語句以及聲明同時(shí)調(diào)用其方法的語句動(dòng)態(tài)調(diào)整為與Mub服務(wù)調(diào)用相匹配的方式。通過詞法分析,定位到與服務(wù)類相關(guān)的語句,接著判斷屬于哪一類語句,如果是服務(wù)類聲明語句,就更新服務(wù)類為^ub服務(wù)調(diào)用代碼中相應(yīng)類的聲明語句。如果是服務(wù)對(duì)象方法調(diào)用語句,同樣更新為對(duì)^Ub服務(wù)調(diào)用相關(guān)的語句。如果是聲明同時(shí)調(diào)用其方法的語句,按照前述兩種方法分別完成更新,直到所有與服務(wù)類相關(guān)的語句更新完畢后結(jié)束,整個(gè)過程由程序自動(dòng)完成。其中,所述步驟幻中,應(yīng)用系統(tǒng)的部署是分兩部分完成的。一部分是服務(wù),首先將服務(wù)自動(dòng)轉(zhuǎn)化為可部署部件,其中包含服務(wù)類本身和對(duì)應(yīng)的部署描述文件。然后將服務(wù)部署到服務(wù)容器中。另一部分是與用戶相關(guān)的應(yīng)用部分,此部分部署到應(yīng)用服務(wù)器中。
圖1為使用本發(fā)明前應(yīng)用部署架構(gòu)圖。圖2為使用本發(fā)明后應(yīng)用部署架構(gòu)圖。圖3為本發(fā)明方法原理示意圖。圖4為更新客戶類方法原理示意圖。
具體實(shí)施例方式為使本發(fā)明的特征及優(yōu)點(diǎn)得到更加清楚的了解,以下結(jié)合附圖,做詳細(xì)說明如下如圖1所示,常規(guī)應(yīng)用是作為一個(gè)整體部署到應(yīng)用服務(wù)器中的。這對(duì)應(yīng)用服務(wù)器的性能提出了很高的要求,所有應(yīng)用同時(shí)運(yùn)行在一臺(tái)服務(wù)器上,當(dāng)部署的應(yīng)用較多時(shí),對(duì)CPU、存儲(chǔ)等資源爭(zhēng)奪將變得非常激烈,從而導(dǎo)致服務(wù)器性能下降,同時(shí)也影響所部署應(yīng)用的正常運(yùn)行。 為了解決這一問題,提出了將應(yīng)用系統(tǒng)以SOA方式部署到云計(jì)算平臺(tái)的思想。云計(jì)算的核心思想是將大量用網(wǎng)絡(luò)連接的計(jì)算資源統(tǒng)一管理和調(diào)度,構(gòu)成一個(gè)計(jì)算資源池向用戶或應(yīng)用服務(wù),雖然解決了單一服務(wù)器性能不足的問題,但也帶來了多個(gè)計(jì)算資源之間的通信問題,SOA的引入很好的彌補(bǔ)了這一缺陷。將計(jì)算資源分為應(yīng)用服務(wù)器和服務(wù)容器,這樣就可以將大量耗時(shí)的邏輯處理及數(shù)據(jù)存取操作封裝為服務(wù),并運(yùn)行在服務(wù)容器中。圖2顯示了使用本發(fā)明方法之后,常規(guī)應(yīng)用部署到云計(jì)算平臺(tái)以SOA方式運(yùn)行示意圖,如圖所示,用戶使用配置文件標(biāo)注常規(guī)應(yīng)用中哪些類需要以服務(wù)的方式運(yùn)行,并結(jié)合應(yīng)用本身一同部署到云計(jì)算平臺(tái)上。接著,云計(jì)算平臺(tái)將常規(guī)應(yīng)用SOA化,將與用戶交互相關(guān)的部分保留部署到應(yīng)用服務(wù)器中,而將用戶配置的服務(wù)通過云計(jì)算平臺(tái)的分發(fā)機(jī)制部署到分散的服務(wù)容器中。使用這種方式部署常規(guī)應(yīng)用將帶來以下好處應(yīng)用服務(wù)器只運(yùn)行與用戶交互部分相關(guān)的應(yīng)用,而將大量耗時(shí)的邏輯處理、數(shù)據(jù)存取移交服務(wù)容器中的服務(wù)執(zhí)行,大大減少應(yīng)用服務(wù)器的計(jì)算量,保證應(yīng)用服務(wù)器能夠良好的運(yùn)行。將多個(gè)服務(wù)分發(fā)到不同的服務(wù)容器中,能夠?qū)崿F(xiàn)計(jì)算能力的負(fù)載均衡,同時(shí)支持多個(gè)服務(wù)的并行執(zhí)行,提高了應(yīng)用系統(tǒng)的整體性能。 將邏輯處理、數(shù)據(jù)存取轉(zhuǎn)換為服務(wù)的方式運(yùn)行,通過服務(wù)共享實(shí)現(xiàn)邏輯處理、數(shù)據(jù)存取的復(fù)用。如上所述,SOA非常適合云計(jì)算平臺(tái),直接采用SOA的方式開發(fā)應(yīng)用并部署到云計(jì)算平臺(tái)上是值得推崇的方式。但這一方面對(duì)開發(fā)者來說要求太高,難度較大,還需重新學(xué)習(xí) SOA相關(guān)的知識(shí),另一方面也將已有的應(yīng)用拒之門外,要想將已有的應(yīng)用部署到云計(jì)算平臺(tái)上,還要根據(jù)云計(jì)算平臺(tái)的規(guī)定,采用SOA的方式重新開發(fā),這無疑對(duì)人力、物力來說都是巨大的浪費(fèi)。于是本發(fā)明提出一種在云計(jì)算平臺(tái)上以SOA的方式部署常規(guī)應(yīng)用的方法,旨在解決常規(guī)應(yīng)用與云計(jì)算平臺(tái)部署之間的鴻溝,同時(shí)能夠?qū)⒋罅恳延械膽?yīng)用部署到云計(jì)算平臺(tái)中,免去了再次開發(fā)帶來的成本。以上闡述了在云計(jì)算平臺(tái)上以SOA的方式部署常規(guī)應(yīng)用方法的諸多優(yōu)點(diǎn),下面詳細(xì)介紹該方法的實(shí)現(xiàn)原理,如圖3所示,描述了實(shí)現(xiàn)該方法的詳細(xì)步驟。步驟一通過讀取配置文件,初始化服務(wù)類列表。配置文件采用XMUExtensive Makeup Language)的形式存儲(chǔ)數(shù)據(jù),其結(jié)構(gòu)如下所示
<sosp>
〈services〉 〈service〉
<name>TestClassService</name> <class>org.joey.TestClassService</class> </service> <service>
<name>WeatherService</name> <class>org.joey.WeatherService</class> </service> </services> </sosp> 將XML文件轉(zhuǎn)化為服務(wù)類列表的內(nèi)存結(jié)構(gòu),服務(wù)類在XML文件中是以namel-class對(duì)的形式存在的。通過DOM技術(shù)即可完成XML配置文件的解析。步驟二 根據(jù)步驟一中生成的服務(wù)類列表,在源文件中定位這些服務(wù)類,并使用 java2wsdl命令將服務(wù)類生成對(duì)應(yīng)的WSDL文件。具體用法如下java2wsdl-cp. -cn package. TestClassService-of TestClassService. wsdl其中,-cp參數(shù)指定類路徑,-cn表示類名稱,-of表示輸出文件名稱。所以上述方法表示在當(dāng)前類路徑下,使用名為package. TestClassService的類生成名為 TestClassService. wsdl 的文件。TestClassService. wsdl 足艮 package. TestClassService 類——對(duì)應(yīng),描述了 package. TestClassService所包含的所有方法,也就是描述了與 package. TestClassService服務(wù)進(jìn)行交互時(shí)需要綁定的協(xié)議和信息格式。步驟三生成Mub服務(wù)調(diào)用代碼。生成Mub服務(wù)調(diào)用代碼并不是必須的,客戶類直接訪問WSDL文件也能夠?qū)崿F(xiàn)服務(wù)調(diào)用。但直接訪問WSDL文件調(diào)用服務(wù)比較復(fù)雜,這為后面自動(dòng)更新客戶類提出了挑戰(zhàn)。而使用wsdl2jaVa命令可使用WSDL文件生成對(duì)應(yīng)的Mub 服務(wù)調(diào)用代碼??蛻纛愅ㄟ^操作Mub服務(wù)調(diào)用代碼實(shí)現(xiàn)服務(wù)調(diào)用,而不需要再與WSDL文件直接通信。Wsdl2jaVa具體用法如下wsdl2java-uri TestClassService. wsdl-p package-s-ssi-o build/service其中,-uri參數(shù)指定WSDL文件的路徑,-ρ指定生成java程序代碼的包名,_s指定產(chǎn)生的代碼的服務(wù)調(diào)用方式為同步訪問方式,-SSi指定產(chǎn)生服務(wù)實(shí)現(xiàn)的接口,-O指定產(chǎn)生程序代碼的存放目錄。執(zhí)行此方法,將自動(dòng)生成Mub服務(wù)調(diào)用代碼。需要注意,wsdl2java 并不是java2WSdl的逆向過程,java2wsdl是將真實(shí)的服務(wù)類生成對(duì)應(yīng)的WSDL文件,即服務(wù)的詳細(xì)描述文件。而wsdl2 java是用于產(chǎn)生解析WSDL文件,產(chǎn)生調(diào)用實(shí)際服務(wù)的代碼封裝。也就是說,wsdl2java產(chǎn)生的Mub服務(wù)調(diào)用代碼是通過WSDL文件調(diào)用實(shí)際的服務(wù)類執(zhí)行相應(yīng)操作的。而實(shí)際的服務(wù)類就是在jaVa2WSdl命令中用于產(chǎn)生WSDL文件的類。步驟四更新客戶類。如上所述,根據(jù)用戶配置的服務(wù)類生成對(duì)應(yīng)的WSDL文件,接著產(chǎn)生了對(duì)應(yīng)的^ub服務(wù)調(diào)用代碼。服務(wù)類和客戶類最終將部署到不同的服務(wù)器上。他們之間通過^Ub服務(wù)調(diào)用代碼進(jìn)行通信,即客戶類通過^ub服務(wù)調(diào)用代碼,調(diào)用實(shí)際服務(wù)類提供的邏輯處理。但用戶提交的源文件中,客戶類使用的還是直接對(duì)服務(wù)類的調(diào)用,這就產(chǎn)生了矛盾。解決這一問題的方法是動(dòng)態(tài)更新客戶類,將原先直接通過服務(wù)類實(shí)現(xiàn)的邏輯轉(zhuǎn)變?yōu)橥ㄟ^^ub服務(wù)調(diào)用代碼實(shí)現(xiàn)。通過分析,需要更新的地方包括三個(gè)方面,分別是聲明語句部分、屬性&方法調(diào)用語句部分和聲明同時(shí)包含方法調(diào)用的語句部分。具體更新過程如圖4所示。由于需要?jiǎng)討B(tài)更新客戶類,需要進(jìn)行詞法分析,從而標(biāo)記哪些地方需要更新。詞法分析采用有窮自動(dòng)機(jī)實(shí)現(xiàn),由于并不需要對(duì)每一個(gè)詞都進(jìn)行分析,因?yàn)樗行枰碌恼Z句均在一個(gè)句子中,于是采用簡(jiǎn)化的詞法分析方法,以句為單位進(jìn)行分析,衡量句子的標(biāo)準(zhǔn)為‘{’、‘}’、‘;’字符。這樣就得到了客戶類代碼中的每一個(gè)句子。前面采用簡(jiǎn)化的詞法分析方法,每一次產(chǎn)生一個(gè)句子。服務(wù)類語句定位就是在一個(gè)句子中定位服務(wù)類相關(guān)語句出現(xiàn)的地方,然后更新對(duì)應(yīng)的客戶類。服務(wù)類相關(guān)語句在客戶類中有3種表現(xiàn)形式。它們分別是1)服務(wù)類聲明語句。2)服務(wù)類所聲明的對(duì)象調(diào)用其方法的語句。
3)服務(wù)類聲明的同時(shí)調(diào)用其方法的語句。由于2、中可能并不出現(xiàn)服務(wù)類名稱,而只是出現(xiàn)服務(wù)類所聲明的對(duì)象,所以在整個(gè)系統(tǒng)中維持一個(gè)服務(wù)類與其對(duì)象名稱的映射非常有必要,這樣總能保證定位到服務(wù)類所聲明的對(duì)象,因?yàn)閷?duì)象在調(diào)用前必須聲明,這恰好在1)中完成。服務(wù)類相關(guān)語句定位以后,就需要對(duì)客戶類進(jìn)行動(dòng)態(tài)更新。下面舉例說明更新規(guī)則服務(wù)類聲明語句,當(dāng)服務(wù)定位到某個(gè)類包含在服務(wù)類列表中,并進(jìn)行聲明時(shí),就需要進(jìn)行更新,更新規(guī)則為將服務(wù)類后面添加^ub字符串,表示一個(gè)新的類,這個(gè)類在^ub 服務(wù)調(diào)用代碼中。這個(gè)新類需要傳入?yún)?shù),使用已經(jīng)配置好的url加上類名稱定位到具體服務(wù)的地址即可。舉例說明如下更新前TestClassService tcs = new TestClassService();更新后url = base_url+" TestClassService“;TestClassServiceStub tcs = new TestClassServiceStub(url);其中,url和kiSe_url為預(yù)先定義的變量,其中url = 〃 〃 ;base_url = “ http//localhost8080/axis2/services/“;base_url指定了部署單個(gè)服務(wù)的地址,加上TestClassService表示完整的服務(wù)路徑,而聲明語句的變化僅僅只是在類名后面添加Mub字符串,TestClasdervicestub就是自動(dòng)生成的^ub服務(wù)調(diào)用代碼中的類,封裝了訪問具體服務(wù)的細(xì)節(jié)。當(dāng)更新完聲明語句后,需要記錄服務(wù)類及其映射對(duì)I^estClassServiceMub-tcs。服務(wù)類所聲明的對(duì)象調(diào)用其方法的語句,此時(shí)更新規(guī)則為根據(jù)方法調(diào)用的對(duì)象找出對(duì)應(yīng)的服務(wù)類。然后在^ub服務(wù)調(diào)用代碼中找出對(duì)應(yīng)的與方法名、方法返回值相關(guān)的類,并為方法名所對(duì)應(yīng)的內(nèi)設(shè)置屬性,屬性名為方法聲明中參數(shù)名的首字母大寫。通過前面找出的類與屬性,聲明方法名對(duì)應(yīng)的類、設(shè)置屬性、聲明方法返回值對(duì)應(yīng)的類并使用前面聲明的^ub對(duì)象調(diào)用方法并將結(jié)果返回給返回值對(duì)應(yīng)的類,通過返回值對(duì)應(yīng)的類即可獲得實(shí)際的值。舉例說明如下更新前int si = tcs. add (10,20);更新后TestClassServiceStub. Add add = new TestClassServiceStub. Add ();add. setll (10);add. setl2(20);TestClassServiceStub. AddResponse addResponse = tcs. add (add);int si = addResponse. get_return();方法調(diào)用語句的語義是傳入兩個(gè)參數(shù),分別為10和20,并調(diào)用服務(wù)類所聲明的對(duì)象tcs的add方法處理參數(shù),并將處理結(jié)果存入si中。Il是方法類的屬性,也即是服務(wù)類add方法的參數(shù)。服務(wù)類聲明的同時(shí)調(diào)用其方法的語句,更新規(guī)則是前面兩種情況的總和,更新方法基本不變,只是服務(wù)類聲明為對(duì)象的名稱上做了小的變更,為了避免重名,采用服務(wù)類名首字母小寫加上一個(gè)全局遞增的整型變量。最后也需要記錄服務(wù)類及其映射對(duì)TestClass krviceMub-testClassServiceMubl。舉例說明如下更新前int s5 = new TestClassService(). sub(20,10);更新后TestClassServiceStub testClassServiceStubl =new TestClassServiceStub(base_url+〃 TestClassService");TestClassServiceStub. Sub sub = new TestClassServiceStub. Sub ();su b. setll (20);sub. setl2(10);TestClassServiceStub. SubResponse subResponse = testClassServiceStubl. sub(sub);int s5 = subResponse. get_return ();步驟五系統(tǒng)部署。系統(tǒng)部署包含兩個(gè)部分,一部分是服務(wù)的部署,另一部分是客戶類的部署。客戶類的部署跟傳統(tǒng)應(yīng)用系統(tǒng)部署沒有區(qū)別,只需要復(fù)制到應(yīng)用服務(wù)器相應(yīng)的目錄下即可,如Tomcat下的webapps目錄下。服務(wù)的部署相對(duì)繁瑣一些,首先需要為服務(wù)類生成匹配的描述配置文件services, ml,然后打包成一個(gè)整體文件(*. aar)發(fā)布。 Services, xml配置文件由系統(tǒng)自動(dòng)生成,其文件格式如下
<service name="TestClassService"> <description>
services test... 〈/description〉
《parameter name="ServiceClass">
org.joey.TestClassService 〈/parameter〉 <messageReceivers>
<messageReceiver mep="http://www.w3.org/Z004O^wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiverM /> <messageReceiver mep="http://www.w3.org/2004O^wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service>自動(dòng)生成完services, xml后,將其放入/tmp/META-INF/目錄下,接著將源文件生成的二進(jìn)制文件拷貝到/tmp目錄下,最后通過jar命令生成相應(yīng)的服務(wù)部署文件,jar命令使用如下所示cd/tmpjar cvf TestClassService. aar.首先進(jìn)入/tmp目錄,然后將當(dāng)前目錄下的所有文件打包成TestClassService. aar,最后將TestClassService. aar復(fù)制到服務(wù)容器下相應(yīng)的目錄即可。當(dāng)使用Axis作為服務(wù)運(yùn)行容器時(shí),其目錄為AXI_HOME/WEB-INF/services。以上所述的內(nèi)容對(duì)本發(fā)明方法的各個(gè)步驟作了詳細(xì)的說明,但是本發(fā)明的具體實(shí)現(xiàn)形式并不局限于此,對(duì)于本技術(shù)領(lǐng)域的一般技術(shù)人員來說,在不背離本發(fā)明所述方法的精神和權(quán)利要求范圍的情況下對(duì)它進(jìn)行的各種顯而易見的改變都在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種在云平臺(tái)上以SOA的方式部署常規(guī)應(yīng)用的方法,其特征在于,其包括以下步驟1)解析用戶設(shè)定的配置文件,并在內(nèi)存結(jié)構(gòu)中生成一個(gè)服務(wù)類列表;2)根據(jù)服務(wù)類列表中的信息,從用戶部署的源代碼文件中提取服務(wù)類,并生成相應(yīng)的 WSDL文件;3)根據(jù)生成的WSDL文件產(chǎn)生對(duì)應(yīng)的Mub服務(wù)代碼,將Mub服務(wù)調(diào)用代碼添加到用戶部署的源文件中;4)根據(jù)服務(wù)類列表,自動(dòng)更新客戶類,將與服務(wù)類相關(guān)的聲明語句、方法調(diào)用語句等動(dòng)態(tài)調(diào)整為與Mub服務(wù)調(diào)用相匹配的方式;5)將源代碼中與服務(wù)類相關(guān)的部分分別部署到不同的服務(wù)容器中,剩余部分結(jié)合 Stub服務(wù)調(diào)用代碼一起部署到應(yīng)用服務(wù)器中。
2.如權(quán)利要求1所述的方法,其特征在于在所述步驟1)中,通過解析用戶部署的配置文件,將用戶配置的服務(wù)類在內(nèi)存結(jié)構(gòu)中構(gòu)建一張對(duì)應(yīng)的服務(wù)類列表,用戶配置的服務(wù)類表示需要在云計(jì)算平臺(tái)中以服務(wù)的方式運(yùn)行,與調(diào)用它們的客戶類區(qū)別開來。
3.如權(quán)利要求1所述的方法,其特征在于在所述步驟2)中,首先根據(jù)服務(wù)類列表的內(nèi)容,從用戶上傳的源文件中提取對(duì)應(yīng)的服務(wù)類,接著為每一個(gè)服務(wù)類生成對(duì)應(yīng)的WSDL文件。
4.如權(quán)利要求1所述的方法,其特征在于在所述步驟3)中,首先根據(jù)生成的WSDL文件,生成對(duì)應(yīng)的Mub服務(wù)調(diào)用代碼,接著將產(chǎn)生的Mub服務(wù)調(diào)用代碼嵌入源程序中。
5.如權(quán)利要求1所述的方法,其特征在于所述步驟4)中,通過詞法分析,定位到與服務(wù)類相關(guān)的語句,接著判斷屬于哪一類語句,然后根據(jù)對(duì)應(yīng)的轉(zhuǎn)化規(guī)則更新相應(yīng)的服務(wù)類為^ub服務(wù)調(diào)用代碼,完成客戶類的更新。
6.如權(quán)利要求2所述的方法,其特征在于用戶設(shè)定的配置文件格式是XML文件,服務(wù)類以namel-class對(duì)的形式存放,通過DOM技術(shù)完成XML配置文件的解析。
7.如權(quán)利要求5所述的方法,其特征在于其轉(zhuǎn)換規(guī)則包含三個(gè)部分,分別是聲明語句的轉(zhuǎn)化規(guī)則、方法調(diào)用語句的轉(zhuǎn)化規(guī)則以及聲明同時(shí)調(diào)用方法語句的轉(zhuǎn)化規(guī)則。
8.如權(quán)利要求7所述的方法,其特征在于,所述聲明語句的轉(zhuǎn)化規(guī)則為將服務(wù)類后面添加^ub字符串,表示一個(gè)新的類,這個(gè)類在^ub服務(wù)調(diào)用代碼中,這個(gè)新類需要傳入?yún)?shù),使用已經(jīng)配置好的url加上類名稱作為參數(shù),表示具體服務(wù)的地址。
9.如權(quán)利要求7所述的方法,其特征在于,所述方法調(diào)用語句的轉(zhuǎn)化規(guī)則為根據(jù)方法調(diào)用的對(duì)象找出對(duì)應(yīng)的服務(wù)類;然后在^ub服務(wù)調(diào)用代碼中找出對(duì)應(yīng)的與方法名、方法返回值相關(guān)的類,并為方法名所對(duì)應(yīng)的內(nèi)設(shè)置屬性,屬性名為方法聲明中參數(shù)名的首字母大寫;通過前面找出的類與屬性,聲明方法名對(duì)應(yīng)的類、設(shè)置屬性、聲明方法返回值對(duì)應(yīng)的類并使用前面聲明的^ub對(duì)象調(diào)用方法并將結(jié)果返回給返回值對(duì)應(yīng)的類,通過返回值對(duì)應(yīng)的類即可獲得實(shí)際的值。
10.如權(quán)利要求7所述的方法,其特征在于,所述聲明同時(shí)調(diào)用方法語句的更新規(guī)則是前面兩種情況的總和,更新方法基本不變,只是服務(wù)類的聲明時(shí)需做較小變更,為了避免重名,采用服務(wù)類名首字母小寫加一個(gè)全局遞增的整型變量作為新的對(duì)象名。
全文摘要
一種在云平臺(tái)上以SOA的方式部署常規(guī)應(yīng)用的方法,開發(fā)者無需學(xué)習(xí)新知識(shí),就能開發(fā)云服務(wù)模式的應(yīng)用系統(tǒng),還能將大量已有的應(yīng)用系統(tǒng)部署到云平臺(tái)中。本發(fā)明介紹的方法主要包括系統(tǒng)分析用戶提交的配置文件和源程序,獲取用戶配置的服務(wù)類并生成對(duì)應(yīng)的WSDL文件,接著生成對(duì)應(yīng)的Stub服務(wù)調(diào)用代碼,Stub服務(wù)調(diào)用代碼向外提供服務(wù)調(diào)用的接口。接著將Stub服務(wù)調(diào)用代碼添加到源程序包中,并自動(dòng)更新客戶類,將原先調(diào)用服務(wù)類的代碼自動(dòng)更新為調(diào)用Stub服務(wù)調(diào)用的代碼,最后將應(yīng)用與服務(wù)分別部署。利用本方法能大大提高云平臺(tái)上應(yīng)用系統(tǒng)部署的效率。降低新應(yīng)用系統(tǒng)的開發(fā)成本,同時(shí)也減少了已有系統(tǒng)向云平臺(tái)遷移的成本。
文檔編號(hào)G06F9/445GK102314358SQ201110141368
公開日2012年1月11日 申請(qǐng)日期2011年5月30日 優(yōu)先權(quán)日2011年5月30日
發(fā)明者蘭雨晴, 馮運(yùn)輝, 孫坤建, 張冠星, 王鈞, 黎立 申請(qǐng)人:蘭雨晴