專利名稱:一種軟件構(gòu)件服務(wù)化封裝方法
技術(shù)領(lǐng)域:
本發(fā)明屬于系統(tǒng)軟件集成領(lǐng)域,具體涉及一種將軟件構(gòu)件自動化封裝成Web服務(wù) 的技術(shù),是一種實現(xiàn)以構(gòu)件為基礎(chǔ)的遺留系統(tǒng)與未來采用SOA技術(shù)體制的新系統(tǒng)綜合集成 的手段。
背景技術(shù):
新研系統(tǒng)與遺留系統(tǒng)一體化設(shè)計與綜合集成技術(shù)是軟件開發(fā)領(lǐng)域中重要的關(guān)鍵 技術(shù)。當(dāng)前隨著信息技術(shù)的發(fā)展,軟件系統(tǒng)構(gòu)建朝網(wǎng)絡(luò)化、服務(wù)化方向轉(zhuǎn)型。遺留系統(tǒng)軟件 服務(wù)化技術(shù)是實現(xiàn)系統(tǒng)服務(wù)化,實現(xiàn)面向服務(wù)新研系統(tǒng)與遺留系統(tǒng)一體化和綜合集成的關(guān) 鍵。當(dāng)前實現(xiàn)遺留系統(tǒng)軟件服務(wù)化的方法主要有兩個,一是依據(jù)業(yè)務(wù)需求,為相關(guān)的 軟件模塊重新設(shè)計服務(wù)化接口和服務(wù)實現(xiàn),通過軟件重構(gòu)實現(xiàn)服務(wù)化。這種方法與新研系 統(tǒng)的一體化整合程度好,服務(wù)接口規(guī)范。但是需要重新開發(fā)功能相近的服務(wù)化模塊,原有的 代碼無法復(fù)用,軟件開發(fā)量大,集成時間長。二是直接對已有軟件模塊進行服務(wù)化封裝,通 常的做法是在.NET平臺上將非托管動態(tài)庫文件封裝成C#語言形式的Web服務(wù)。這種方法 充分復(fù)用已有代碼,對原有的軟件改動小。但是整個過程目前只提供手工方法,當(dāng)面對復(fù)雜 的動態(tài)庫時,封裝的工作量大。在文獻“基于Web服務(wù)的企業(yè)應(yīng)用集成研究”中,提出了采用J2EE平臺基于Web 服務(wù)的企業(yè)應(yīng)用集成框架,其核心思想是使用自底向上的方法,為企業(yè)遺留系統(tǒng)(如CRM、 ERP、SCM)中的功能構(gòu)件設(shè)計符合Web服務(wù)標準的接口描述文件和服務(wù)具體實現(xiàn),通過創(chuàng)建 適配器使這些新服務(wù)之間以及和原有的遺留系統(tǒng)間能夠進行信息交互。這種方法本質(zhì)上是 將原有系統(tǒng)中需要服務(wù)化的功能重新進行面向服務(wù)的設(shè)計和開發(fā),在遺留系統(tǒng)和新服務(wù)之 間通過代理機制實現(xiàn)交互。主要存在的問題是,在面對大型遺留系統(tǒng)時,由于應(yīng)用自身邏輯 和功能復(fù)雜,使得對系統(tǒng)功能的服務(wù)化設(shè)計、開發(fā)工作量增大,整個系統(tǒng)集成時間增長,并 且易出錯。在文獻“基于DCOM組件的PDMS的Web服務(wù)封裝”中,使用的方法是針對原動態(tài)庫 暴露的接口進行薄層封裝,即利用.NET的運行時交互功能(runtimeinterop facilities) P/Invoke,將C風(fēng)格的動態(tài)庫中接口或非托管(immanaged) C++類封裝成C#語言的托管代 碼,并將其發(fā)布為Web服務(wù)。這種方法改動量小,基本繼承了原有的軟件功能,但是因為整 個過程是完全人工實現(xiàn),對封裝人員的技術(shù)水平要求高,同時當(dāng)面對復(fù)雜的動態(tài)庫時,封裝 的工作量大。另外其并沒有給出統(tǒng)一的描述軟件構(gòu)件Web服務(wù)元信息的模型,來規(guī)范服務(wù) 外部接口文件(WSDL)的生成。
發(fā)明內(nèi)容
發(fā)明目的本發(fā)明的目的是針對現(xiàn)有技術(shù)的不足,提供一種能夠?qū)浖?gòu)件高效 規(guī)范封裝的服務(wù)化封裝方法,。
技術(shù)方案為實現(xiàn)上述目的,本發(fā)明所述的軟件構(gòu)件服務(wù)化封裝方法,首先將原動 態(tài)庫中的元信息提取出來;再以此為基礎(chǔ),利用現(xiàn)有的java調(diào)用C或C++語言技術(shù)和工具, 以轉(zhuǎn)調(diào)的java代碼作為Web服務(wù)的具體實現(xiàn)部分,實現(xiàn)java對遺產(chǎn)系統(tǒng)的轉(zhuǎn)調(diào);最后將服 務(wù)類文件部署到特定的Web服務(wù)運行環(huán)境中(目前支持三種服務(wù)運行環(huán)境,包含Axis2、 MULE、SCA),根據(jù)用戶的選擇配置產(chǎn)生符合各自平臺規(guī)定的部署描述文件,并將其和已生成 的服務(wù)實現(xiàn)類文件部署在各自的運行環(huán)境中,發(fā)布為相應(yīng)的Web服務(wù)。該方法具體包括如下步驟(1)根據(jù)用戶從界面設(shè)置的服務(wù)描述信息,以及原始動態(tài)庫的頭文件,采集出服務(wù) 的元數(shù)據(jù)信息,并存儲在統(tǒng)一的Web服務(wù)接口模型中,為配置文件生成以及代碼轉(zhuǎn)調(diào)提供 了所需的信息支持;(2)以步驟(1)采集到的元數(shù)據(jù)信息為基礎(chǔ),利用Java調(diào)用C/C++語言工具SWIG 生成java轉(zhuǎn)調(diào)代碼和CXX臨時文件;;(3)利用自動生成的make文件,調(diào)用make命令將cxx臨時文件、lib文件和原始 頭文件產(chǎn)生包裝的dll文件;(4)動態(tài)構(gòu)建抽象語法樹,并以此來解析java中間代碼,將獲得的接口信息存入 接口函數(shù)數(shù)據(jù)模型中,用其填充顯示界面中的接口提示信息;根據(jù)用戶選擇暴露的接口信 息,包裝一個接口的java文件和一個實現(xiàn)接口的java文件,實現(xiàn)的java文件中加載包裝 后的DLL;(5)根據(jù)用戶的選擇配置產(chǎn)生符合各自服務(wù)運行環(huán)境規(guī)定的部署描述文件;(6)并將步驟(5)產(chǎn)生的部署描述文件和已生成的服務(wù)實現(xiàn)類文件部署在服務(wù)運 行環(huán)境中,發(fā)布為相應(yīng)的Web服務(wù)。所述Web服務(wù)接口是通過用戶提示的方法,支持根據(jù)用戶選擇暴露的原動態(tài)庫中 的接口自動生成。所述自動生成make文件為首先建立make文件結(jié)構(gòu)模型,從邏輯的角度對make 文件參數(shù)進行了分類,在此基礎(chǔ)上構(gòu)建參數(shù)模板,包括依賴于具體源碼工程的工程參數(shù)模 板以及與編譯平臺緊密相關(guān)的平臺參數(shù)模板;生成方法為首先按照規(guī)定的格式生成工程 參數(shù)模板并保存到特定路徑,接著解析該模板并按照解析結(jié)果從平臺相關(guān)參數(shù)模板中讀入 所需數(shù)據(jù),最后生成所需的make文件。有益效果本發(fā)明與現(xiàn)有技術(shù)相比,其有益效果為1、本發(fā)明規(guī)范了服務(wù)接口模型,使得構(gòu)件封裝為服務(wù)后,對外提供的接口形式在任何服務(wù)運行平臺中都保持一致,提高 了封裝后服務(wù)的互操作性,實現(xiàn)了以構(gòu)件為基礎(chǔ)的遺留系統(tǒng)與未來采用SOA技術(shù)體制的新 系統(tǒng)的交互能力;2、在本發(fā)明支持下能夠?qū)⒍喾N形式的軟件構(gòu)件(如C動態(tài)庫、C++動態(tài)庫 和java代碼段)封裝為服務(wù),并且也支持根據(jù)用戶配置動態(tài)地發(fā)布為多種類型的Web服務(wù) 實現(xiàn),有效的支撐了各種形態(tài)的構(gòu)件服務(wù)化以及各種異構(gòu)的SOA實現(xiàn)技術(shù)的集成;3、本發(fā) 明還提出了統(tǒng)一的構(gòu)件服務(wù)化封裝方法和軟件實現(xiàn),基于該流程編碼實現(xiàn)的自動化服務(wù)封 裝工具能夠大大提高遺產(chǎn)系統(tǒng)服務(wù)化的效率;該封裝流程還具有很高的靈活性,它能根據(jù) 需要擴展其中的代碼轉(zhuǎn)調(diào)功能,以支持不同形式的遺留構(gòu)件的服務(wù)化封裝,從而使其應(yīng)用 范圍更加廣泛。
圖1為軟件構(gòu)件服務(wù)化封裝方法的原理圖;圖2為本發(fā)明提出的服務(wù)封裝流程圖;圖3為頭文件元數(shù)據(jù)信息自動抽取流程圖; 圖4為服務(wù)接口描述信息模型圖;圖5為make文件生成器原理圖;圖6為中間代碼編譯make文件結(jié)構(gòu)圖;圖7為make文件生成器模型圖;圖8為平臺相關(guān)參數(shù)模板圖;圖9為make文件生成序列圖;圖10為使用make文件構(gòu)建流程圖。
具體實施例方式下面結(jié)合附圖,對最佳實施例進行詳細說明,但是本發(fā)明的保護范圍不局限于所 述實施例。圖1所示為軟件構(gòu)件服務(wù)化封裝方法的原理圖,它依據(jù)創(chuàng)建的服務(wù)接口模型,通 過規(guī)范的服務(wù)封裝流程和自動化服務(wù)封裝工具,將C/C++語言的動態(tài)庫形式的遺留系統(tǒng) 軟件自動封裝為Web服務(wù)。本發(fā)明提出一種通用的系統(tǒng)軟件服務(wù)封裝的方法,它首先定義 了一個統(tǒng)一的Web服務(wù)接口模型,以描述服務(wù)的基本元信息,從而規(guī)范服務(wù)外部接口文件 (WSDL)的生成;其次利用多語言轉(zhuǎn)調(diào)工具,通過自動生成的配置文件實現(xiàn)編程語言間的互 操作;在封裝過程中,使用服務(wù)接口自動生成技術(shù),支持用戶可選擇地暴露原動態(tài)庫的接 口 ;最后在部署過程中,提出了多Web服務(wù)實現(xiàn)適配技術(shù),通過自動生成的,符合不同服務(wù) 運行環(huán)境(Axis2、MULE、SCA)規(guī)定的部署描述文件將封裝后的服務(wù)進行發(fā)布。圖2為本發(fā)明提出的服務(wù)封裝流程圖,首先用戶將需要服務(wù)化的業(yè)務(wù)模塊從原有 的遺產(chǎn)系統(tǒng)中提取出來,并按照封裝要求規(guī)范化導(dǎo)出函數(shù)出\入?yún)⒌臄?shù)據(jù)類型,并判斷待 封裝遺產(chǎn)系統(tǒng)的語言類型,如果是C\c++代碼則繼續(xù)步驟(1),否則直接跳到步驟(5);步驟(1)根據(jù)用戶從界面設(shè)置的服務(wù)描述信息(如服務(wù)的中英文名稱、服務(wù)功能 描述、服務(wù)地址、服務(wù)關(guān)鍵字、服務(wù)類型信息等),以及原始動態(tài)庫的頭文件(.h文件),采集 出服務(wù)的元數(shù)據(jù)信息,并存儲在一個設(shè)計合理的自定義內(nèi)存數(shù)據(jù)結(jié)構(gòu)中(該數(shù)據(jù)結(jié)構(gòu)模型 在技術(shù)方案中已明確定義),為配置文件生成以及代碼轉(zhuǎn)調(diào)提供了所需的信息支持;步驟⑵主要是用戶確定服務(wù)名,.h,.dll和lib文件,以后所有生成的文件命名 都根據(jù)服務(wù)名確定,建立工作目錄和服務(wù)展示目錄,.h和lib文件拷貝到工作目錄,.dll拷 貝到服務(wù)展示目錄;步驟(3)完成java代碼轉(zhuǎn)調(diào)功能,以步驟⑴獲取的服務(wù)接口描述信息為基礎(chǔ)構(gòu) 造.i文件,即SWIG接口文件,利用SWIG工具的命令產(chǎn)生出Java中間代碼和cxx臨時文件, 在工作目錄創(chuàng)建目錄(包的目錄),并將生成的java文件和CXX臨時文件拷貝進去;步驟(4)根據(jù)步驟(3)中產(chǎn)生的cxx文件,使用編譯器自帶的Make工具編譯鏈接 CXX臨時文件,原始頭文件和lib,生成可被Java加載調(diào)用的DLL。在生成make文件過程中, 首先按照規(guī)定的格式生成工程信息文件并保存到特定路徑,接著生成器解析工程信息并按照解析結(jié)果從平臺相關(guān)參數(shù)模板中讀入所需數(shù)據(jù),最后生成客戶程序所需的Make文件;步驟(5)以java中間代碼作為輸入,動態(tài)構(gòu)建抽象語法樹,并以此來解析java中 間代碼,將獲得的接口信息存入接口函數(shù)數(shù)據(jù)模型中,用其填充顯示界面中的接口提示信 息。根據(jù)用戶選擇暴露的接口信息,包裝一個接口的java文件和一個實現(xiàn)接口的java文 件,實現(xiàn)的java文件中加載包裝后的DLL ;步驟(6)據(jù)用戶的選擇配置產(chǎn)生符合各自服務(wù)運行環(huán)境(Axis2、MULE、SCA)規(guī)定 的部署描述文件;步驟(7)編譯所有java文件,打包成jar包;將步驟(4)產(chǎn)出的dll文件和產(chǎn)生 的jar包文件復(fù)制到服務(wù)展示目錄和相應(yīng)的工作目錄,并將其和已生成的服務(wù)實現(xiàn)類文件 部署在服務(wù)運行環(huán)境中,發(fā)布為相應(yīng)的Web服務(wù)。本發(fā)明所采用的技術(shù)包括構(gòu)件元信息提取技術(shù)、多語言代碼轉(zhuǎn)調(diào)技術(shù)、Web服務(wù) 接口自動生成技術(shù)和多Web服務(wù)實現(xiàn)適配技術(shù)。
(A)構(gòu)件元信息提取技術(shù)構(gòu)件元信息提取是根據(jù)輸入的構(gòu)件獲取能為配置文件生成以及代碼轉(zhuǎn)調(diào)提供所 需支持的元數(shù)據(jù)信息的過程。 (a)本發(fā)明定義了一個統(tǒng)一的Web服務(wù)接口模型,用來規(guī)范化封裝后Web服務(wù)的自 描述文件(WSDL),以及獲取的服務(wù)元數(shù)據(jù)信息。它由服務(wù)屬性描述信息模型和服務(wù)接口描 述信息模型組成。服務(wù)的元信息是指描述服務(wù)自身信息的數(shù)據(jù),現(xiàn)做如下定義A 9 {P ,T }表示服務(wù)元數(shù)據(jù)信息其中
P 9 {Pi \ Pi χ B,i X N}B 9 {servbase ,itfacebase ,servbuss }表示服務(wù)屬性描述信息集合
servbase 9 {η | η XR,i X N}R 9 {name , func , address , key, type }表示月艮務(wù)基本信息集合name表示服務(wù)的中英文名稱,func表示服務(wù)功能描述,address表示服務(wù)地址, key表示服務(wù)關(guān)鍵字,type表示服務(wù)類型信息。itfacebase 9 {protol, access, name, desc }表示月艮務(wù)接 口 的基本信息其中protol表示服務(wù)接口傳輸協(xié)議,access表示訪問協(xié)議,name表示接口中英文 名稱,desc表示接口的基本描述信息。 servbuss 9 {provider , category }表示月艮務(wù)業(yè)務(wù)信息其中provider表示服務(wù)提供者,category表示服務(wù)分類信息,其中按軟件類型分 為公共服務(wù)、專用服務(wù)。T V UiI t, X S,i X 表示服務(wù)接口描述信息集合服務(wù)接口描述信息即遺產(chǎn)程序的對外訪問接口的完整描述信息。該信息實質(zhì)上將 遺產(chǎn)程序的接口概念從原始的遺產(chǎn)程序中抽離,從而為后續(xù)的代碼轉(zhuǎn)調(diào)提供信息支持。其中 S1elem P {Ζ,//,^C}表示接口元素的描述數(shù)據(jù)
其中L表示C++中類的概念,
H表示類中的方法名,
γ表示類中的變量
c表示方法中的入?yún)⒑突虺?參,
表示接口元素之間的關(guān)系 這些信息都會在服務(wù)描述語言(WSDL)中定義,是對服務(wù)本身的描述說明,是區(qū)別 于其他Web服務(wù)的標識,同時也為后面配置文件的生成提供信息支持。在獲取服務(wù)元數(shù)據(jù)時,服務(wù)屬性描述信息可以通過用戶輸入的方式得到,而接口 的描述信息如果采用傳統(tǒng)的通過用戶輸入的方法不僅使得移植過程的自動化程度大大降 低,并且對系統(tǒng)用戶的專業(yè)性要求過高,使得程序的易用性降低?;谶@些問題,本發(fā)明提 出了通過解析描述動態(tài)鏈接庫輸出接口的頭文件來獲取所需元數(shù)據(jù)的方法。該方法的流程 如圖3所示,首先頭文件解析器分析頭文件后輸出自定義格式的XML中間文件,然后由特定 的XML解析器抽取接口描述元信息。(b)本發(fā)明充分借鑒了 Java及.Net的反射機制建立了一套簡單實用而且能夠充 分表達服務(wù)接口描述信息的數(shù)據(jù)模型。實現(xiàn)了在獲取服務(wù)接口描述信息后合理地存儲這些 信息以便后續(xù)階段能夠方便的訪問這些信息。圖4為服務(wù)接口描述信息模型圖。此模型對服務(wù)接口定義所需的各種信息進行了 抽象,又借鑒了面向?qū)ο蟮脑O(shè)計思想,形成了一套相對完整的對象體系。整個模型以可訪問 對象類為基類,派生出接口定義的其它組成部分,這樣既重用了公共信息又減少了對象的數(shù)量。服務(wù)接口描述信息模型主要從三個方面對關(guān)于接口描述信息進行建模。一是對接 口元素描述數(shù)據(jù)的建模,二是對接口元素之間關(guān)系的建模,三是對接口描述信息訪問接口 的支持??稍L問對象類,是整個接口描述信息模型的基類,它抽象和包含了在接口描述體 系中各個元素的基本元數(shù)據(jù),例如元素的名稱、所有者等,它也是接口描述信息數(shù)據(jù)結(jié)構(gòu)的 數(shù)據(jù)基礎(chǔ),元素之間的關(guān)系則通過建立一組和面向?qū)ο缶幾g語言相對應(yīng)的類型來確定;類 是對類型的抽象,它與C++中類的概念非常接近,它定義了類的基礎(chǔ)要素數(shù)據(jù)成員、成員 方法、構(gòu)造/析構(gòu)方法;函數(shù)類表達接口描述信息中函數(shù)的概念,是構(gòu)件對外所提供的方 法,它由返回值、參數(shù)列表等要素組成;變量類則表述了服務(wù)接口的數(shù)據(jù)成員,描述了各種 類型的變量,是成員變量,全局變量的元類;參數(shù)類是參數(shù)的抽象,是變量類的一種特例,注 解類是對預(yù)編譯頭,注釋等與代碼有關(guān)信息的抽象,負責(zé)存儲這類信息。在上述的每個類中 還提供了各種不同的操作,它們不僅為元數(shù)據(jù)獲取階段提供構(gòu)建接口元數(shù)據(jù)的操作,也提 供了后續(xù)階段訪問元數(shù)據(jù)的方法。(B)多語言代碼轉(zhuǎn)調(diào)技術(shù)多語言代碼轉(zhuǎn)調(diào)是指能夠?qū)崿F(xiàn)用不同語言編寫的代碼之間的互相調(diào)用,是將不同的構(gòu)件編程語言形成Java服務(wù)構(gòu)件的重要手段。這里利用SWIG這種Java調(diào)用C/C++語 言的工具,實現(xiàn)Java對遺產(chǎn)系統(tǒng)的轉(zhuǎn)調(diào)。主要步驟包括(a)依據(jù)原始動態(tài)庫生成服務(wù)構(gòu)件的中間文件。首先構(gòu)造多語言代碼轉(zhuǎn)調(diào)工具需 要的頭文件,通過服務(wù)接口描述信息構(gòu)造.i文件,即SWIG接口文件,接著利用SWIG工具的 命令產(chǎn)生出Java中間代碼作為原始動態(tài)庫的代理,和對原動態(tài)庫封裝的臨時文件 。(b)自動生成編譯服務(wù)構(gòu)件需要的Make文件。本發(fā)明提出了一種自動化生成Make 文件的方法,圖5說明了 Make文件生成器原理。自動生成Make文件的最大障礙來源于編譯參數(shù)的復(fù)雜性。本發(fā)明首先為其建立 了如圖6概念模型。該模型從邏輯的角度對Make文件參數(shù)進行了分類,定義如下
CP 9 {cto, file,irule, brule, compile }其中,cto是編譯器所需的程序編譯和鏈接參數(shù),file則給出了待編譯源代碼文 件的列表,這一部分的劃分使得源碼文件與編譯器和平臺相關(guān)的那些復(fù)雜的參數(shù)分離,從 而更易于實現(xiàn)模塊化。irule是編譯所需的固有規(guī)則,brule是編譯鏈接規(guī)則包括指定目標代碼的生成 目錄,刪除中間文件等。compile則指定了中間文件生成所需的各種依賴文件。但僅僅擁有Make文件的邏 輯結(jié)構(gòu)還遠遠不夠,大量的編譯參數(shù)以及這些參數(shù)與平臺的相關(guān)性使得這部分程序設(shè)計非 常困難,所以必須設(shè)計一個非常靈活的Make文件生成器模型,才能應(yīng)對動態(tài)需求的變化。 Python是一種動態(tài)的解釋性腳本語言,選擇python實現(xiàn)Make文件生成器模型,正是充分利 用python的這些特點,基于以上的思想設(shè)計出如圖7所示的Make文件生成器模型。本發(fā)明利用數(shù)據(jù)驅(qū)動的原理為各種經(jīng)常變動的參數(shù)按照這些參數(shù)之間的關(guān)系設(shè) 計相應(yīng)的模板文件,通過修改參數(shù)模板來改變參數(shù)。變化的編譯參數(shù)分為以下兩類依賴 于具體源碼工程的各工程參數(shù)以及與編譯平臺緊密相關(guān)的平臺參數(shù)。在所圖7所示的模型 中,工程配置對象和可選項模板對象就分別代表存放這兩類參數(shù)的模板文件。而生成器則 是這兩類模板文件的處理器,它將這兩種類型的文件作為輸入,內(nèi)置對象用于保存最終生 成的Make文件參數(shù)。而編譯器配置派生自生成器并具備了處理特定編譯平臺參數(shù)的能力。在生成源代碼后,根據(jù)當(dāng)前源代碼生成與之相關(guān)的模板文件供后面生成Make文 件使用。與編譯平臺、系統(tǒng)平臺相關(guān)的信息存放于如圖8所示結(jié)構(gòu)的XML文件之中。它以 編譯器類型為基礎(chǔ)元素分類保存配置參數(shù),而編譯器的配置參數(shù)又分為兩類通用參數(shù)類 型的特定編譯器值、工程類型配置參數(shù)模板。其中工程類型配置參數(shù)模板={動態(tài)庫,控制 臺,應(yīng)用程序};控制臺模板包含了為建立一個控制臺程序所需要的Make文件涵蓋的參數(shù) 信息;應(yīng)用程序模板包含了為建立一個應(yīng)用程序所需要的Make文件涵蓋的參數(shù)信息;動態(tài) 庫模板包含了為建立動態(tài)鏈接庫所需要的Make文件涵蓋的參數(shù)信息;動態(tài)庫模板={C編 譯器選項,C++編譯器選項,Lex文法分析器參數(shù)…}。整個make文件自動化生成序列圖如圖9所示。使用者首先按照規(guī)定的格式生成 工程信息文件保存到特定路徑,然后通知生成器;接著生成器解析工程信息并按照解析結(jié) 果從平臺相關(guān)參數(shù)模板中讀入所需數(shù)據(jù);最后生成使用者所需的Make文件。
(c)Make工具根據(jù)Make文件其所定義的規(guī)則,調(diào)用編譯器編譯相應(yīng)的源代碼,得 到目標文件,最后由鏈接器將目標鏈接成新DLL。這一過程是針對Java轉(zhuǎn)調(diào)實現(xiàn)而言,在一 般的構(gòu)建過程中產(chǎn)生何種形式的對象可由Make文件中的規(guī)則指定。圖10是使用Make工具構(gòu)建java服務(wù)構(gòu)件的過程,其中的Make工具、編譯器,鏈 接器都是由某種特定的編譯器所提供,主流的編譯器都包含這些工具。 (C) Web服務(wù)接口自動生成技術(shù)自動生成Web服務(wù)接口是指為了體現(xiàn)選擇服務(wù)接口功能,需要解析出Java接口供 用戶選擇裁剪,并最終確定為服務(wù)的接口。本發(fā)明提出了基于接口提示信息的Web服務(wù)接口自動生成技術(shù),首先通過用戶提 示的方法,根據(jù)用戶選擇暴露的接口信息,包裝一個接口的java文件和一個實現(xiàn)接口的 Java文件,實現(xiàn)中加載包裝后的DLL,最終編譯所有java文件,產(chǎn)生服務(wù)類文件。在生成接 口提示信息的過程中,根據(jù)已產(chǎn)生的java中間代碼,生成接口函數(shù)數(shù)據(jù)模型。動態(tài)構(gòu)建抽 象語法樹,并以此來解析java中間代碼,將獲得的接口信息存入接口函數(shù)數(shù)據(jù)模型中,最 終用其填充顯示界面中的接口提示信息。動態(tài)構(gòu)建抽象語法樹的算法實施步驟如下 第一步根據(jù)java中間代碼的特點,定義關(guān)鍵字表{dataType,Token, exp},其中, dataType 表示 java 的基本數(shù)據(jù)類型(int.double,float 等),Token 表示”class”,”{”,,,},,第二步根據(jù)關(guān)鍵字表遞歸下降地匹配輸入的java中間代碼,假設(shè)有一個在輸入 中保存當(dāng)前下一個記號的token變量,如果匹配成功則前移,并將匹配結(jié)果掛入語法樹的 相關(guān)節(jié)點上。匹配的原則是將一個非終結(jié)符A的規(guī)則看作將識別A的一個過程的定義。文 法規(guī)則包括
factor ! Token exp | 辦;factor2 Type exp (B);
B Type exp, B 丨辦;重復(fù)第二步,直到輸入結(jié)束。至此,動態(tài)構(gòu)建抽象語法樹的的過程結(jié)束。(D)多Web服務(wù)實現(xiàn)適配技術(shù)多Web服務(wù)實現(xiàn)適配是指能夠根據(jù)需要,將已生成的服務(wù)接口和服務(wù)實現(xiàn)類文件 發(fā)布為不同類型的狗13服務(wù)(如4^82,304,1^1^),這里通過生成的配置文件來靈活地定制 Web服務(wù),配置文件將定義服務(wù)名稱、服務(wù)的實現(xiàn)類、服務(wù)發(fā)布的方式,利用已有的遺產(chǎn)程序 轉(zhuǎn)調(diào)代碼作為服務(wù)實現(xiàn),完成功能上遷移,再配置相應(yīng)的部署描述文件,部署在各自的服務(wù) 運行環(huán)境中,從而發(fā)布為相應(yīng)的Web服務(wù)。生成配置文件時需要根據(jù)不同服務(wù)運行平臺的部署描述文件規(guī)范,為用戶提供向 導(dǎo)信息,根據(jù)用戶選擇配置產(chǎn)生符合各自平臺規(guī)定的部署描述文件。熟知本領(lǐng)域的人士將理解,雖然這里為了便于解釋已描述了具體實施例,但是可 在不背離本發(fā)明精神和范圍的情況下作出各種改變。因此,除了所附權(quán)利要求之外,不能用 于限制本發(fā)明。
權(quán)利要求
一種軟件構(gòu)件服務(wù)化封裝方法,其特征在于首先將原動態(tài)庫中的元信息提取出來;再以此為基礎(chǔ),利用java調(diào)用C或C++語言技術(shù),以轉(zhuǎn)調(diào)的java代碼作為Web服務(wù)的具體實現(xiàn)部分,實現(xiàn)java對遺產(chǎn)系統(tǒng)的轉(zhuǎn)調(diào);最后將服務(wù)類文件部署到特定的Web服務(wù)運行環(huán)境中,根據(jù)用戶的選擇配置產(chǎn)生符合各自平臺規(guī)定的部署描述文件,并將其和已生成的服務(wù)實現(xiàn)類文件部署在各自的運行環(huán)境中,發(fā)布為相應(yīng)的Web服務(wù)。
2.根據(jù)權(quán)利要求1所述的軟件構(gòu)件服務(wù)化封裝方法,其特征在于該方法具體包括如下 步驟(1)根據(jù)用戶從界面設(shè)置的服務(wù)描述信息,以及原始動態(tài)庫的頭文件,采集出服務(wù)的元 數(shù)據(jù)信息,并存儲在統(tǒng)一的Web服務(wù)接口模型中,為配置文件生成以及代碼轉(zhuǎn)調(diào)提供了所 需的信息支持;(2)以步驟(1)采集到的元數(shù)據(jù)信息為基礎(chǔ),利用Java調(diào)用C或C++語言工具SWIG生 成java轉(zhuǎn)調(diào)代碼和CXX臨時文件;(3)利用自動生成的make文件,調(diào)用make命令將cxx臨時文件、lib文件和原始頭文 件產(chǎn)生包裝的dll文件;(4)動態(tài)構(gòu)建抽象語法樹,并以此來解析java中間代碼,將獲得的接口信息存入接口 函數(shù)數(shù)據(jù)模型中,用其填充顯示界面中的接口提示信息;根據(jù)用戶選擇暴露的接口信息,包 裝一個接口的java文件和一個實現(xiàn)接口的java文件,實現(xiàn)的java文件中加載包裝后的 DLL ;(5)根據(jù)用戶的選擇配置產(chǎn)生符合各自服務(wù)運行環(huán)境規(guī)定的部署描述文件;(6)并將步驟(5)產(chǎn)生的部署描述文件和已生成的服務(wù)實現(xiàn)類文件部署在服務(wù)運行環(huán) 境中,發(fā)布為相應(yīng)的Web服務(wù)。
3.根據(jù)權(quán)利要求2所述的軟件構(gòu)件服務(wù)化封裝方法,其特征在于所述Web服務(wù)接口 是通過用戶提示的方法,支持根據(jù)用戶選擇暴露的原動態(tài)庫中的接口自動生成。
4.根據(jù)權(quán)利要求2所述的軟件構(gòu)件服務(wù)化封裝方法,其特征在于所述自動生成make 文件為首先建立make文件結(jié)構(gòu)模型,從邏輯的角度對make文件參數(shù)進行了分類,在此 基礎(chǔ)上構(gòu)建參數(shù)模板,包括依賴于具體源碼工程的工程參數(shù)模板以及與編譯平臺緊密相 關(guān)的平臺參數(shù)模板;生成方法為首先按照規(guī)定的格式生成工程參數(shù)模板并保存到特定路 徑,接著解析該模板并按照解析結(jié)果從平臺相關(guān)參數(shù)模板中讀入所需數(shù)據(jù),最后生成所需 的make文件。
全文摘要
本發(fā)明公開一種軟件構(gòu)件服務(wù)化封裝方法,首先將原動態(tài)庫中的元信息提取出來;再以此為基礎(chǔ),利用現(xiàn)有的java調(diào)用C或C++語言技術(shù)和工具,以轉(zhuǎn)調(diào)的java代碼作為Web服務(wù)的具體實現(xiàn)部分,實現(xiàn)java對遺產(chǎn)系統(tǒng)的轉(zhuǎn)調(diào);最后將服務(wù)類文件部署到特定的Web服務(wù)運行環(huán)境中,根據(jù)用戶的選擇配置產(chǎn)生符合各自平臺規(guī)定的部署描述文件,并將其和已生成的服務(wù)實現(xiàn)類文件部署在各自的運行環(huán)境中,發(fā)布為相應(yīng)的Web服務(wù)。本發(fā)明規(guī)范了服務(wù)接口模型,使得構(gòu)件封裝為服務(wù)后,對外提供的接口形式在任何服務(wù)運行平臺中都保持一致,提高了封裝后服務(wù)的互操作性,實現(xiàn)了以構(gòu)件為基礎(chǔ)的遺留系統(tǒng)與未來采用SOA技術(shù)體制的新系統(tǒng)的交互能力。
文檔編號G06F9/44GK101840334SQ20101015039
公開日2010年9月22日 申請日期2010年4月16日 優(yōu)先權(quán)日2010年4月16日
發(fā)明者丁峰, 周曉明, 汪敏, 郭成昊 申請人:中國電子科技集團公司第二十八研究所