摘 要:近年來CORBA作為一種分布對象中間件應用領(lǐng)域不斷擴展,很多應用還離不開異步機制,而傳統(tǒng)CORBA還無法實現(xiàn)異步激活。文章針對對象中間件CORBA異步機制的實現(xiàn)進行了較深入地探討,并基于修改抽象語法樹提出異步代碼生成算法,可達到有關(guān)模型的應用需求。
關(guān)鍵詞:中間件;異步機制;抽象語法樹
1 概述
近年來CORBA作為一種分布對象中間件應用領(lǐng)域不斷擴展,目前已逐漸成為網(wǎng)絡計算集成框架和應用構(gòu)件的一個技術(shù)標準,其應用日益廣泛。起初由OMG組織制定用于分布計算的標準,并逐漸成為網(wǎng)絡計算集成框架建立的一個十分重要的技術(shù)標準。
傳統(tǒng)CORBA只具有one-way、靜態(tài)及動態(tài)invorcation interface三種激活機制,隨著松耦合領(lǐng)域的CORBA應用,其傳統(tǒng)的激活機制已難以實現(xiàn)實際需求,而需異步激活機制才能實現(xiàn)。盡管one-way可實現(xiàn)異步效果,如請求發(fā)送時將引用的客戶對象進行傳遞,但其自身操作也存在依賴傳輸層及相關(guān)語義問題。而動態(tài)invorcation interface激活機制具有編程復雜、分配內(nèi)存過多及數(shù)據(jù)備份等問題。為有效解決異步機制引入分布對象中間件中的問題,深入研究抽象機制算法與模型,建立對異步Polling模型的支持,擴充ORB內(nèi)核。實現(xiàn)對應用開發(fā)的支持。
2 Polling模型設計
2.1 設計原則
在實際應用,Polling模型應按照以下原則進行設計,Polling只映射客戶方語言,無需改變服務方;可采用調(diào)用Polling方式執(zhí)行已存在的服務程序;用戶交互Polling模型對象,支持其功能的對象由編譯器生成;與有關(guān)規(guī)范要求相符。
2.2 組成要素
按照上述原則進行設計實現(xiàn)CORBA模型,其組成要素中,相對于常規(guī)模型服務方構(gòu)成要素變化不大,客戶方變化較大??蛻舴綄⒁恍ο笠耄瑢鹘y(tǒng)對象擴充后實現(xiàn)對功能實體的支持。建立對值查詢應答的對象及Reply Handler對象請求應答的保存等都是Polling Stub的主要功能。
特別應注意,由于Polling模型中不需要改變接口的定義文件,由IDL編譯器生成對Polling功能支持的基礎設施實體,因此需擴充IDL編譯器,使其可生成對Polling功能支持的要素。Polling Stub等對象對Polling功能的支持由IDL編譯器生成,并與Polling ORB協(xié)作實現(xiàn)Polling異步機制。
3 代碼生成算法
3.1 常規(guī)方法
IDL文件由IDL編譯器進行映射,編譯器前端具有預處理及語法分析功能,生成抽象語法樹;后端將其接口向語言代碼進行映射。預處理主要是在編譯程序前,由預處理器完成處理被編譯程序的宏替換、展開源文件及編譯等具體工作,預處理器是文本處理器,只掃描源文件,執(zhí)行指令動作,對源文件語法不作分析。
由此可知,對Polling功能支持代碼的生成,應首先獲得對Polling異步機制所需節(jié)點抽象語法樹的支持,在后端生成代碼時實現(xiàn)對Polling功能的支持。Polling模型沒有將新的關(guān)鍵字引入,因此無需修改IDL編譯前端。
3.2 隱式IDL文件方法
該方法主要是在前端預處理Polling,之后在后端生成異步代碼。預處理器主要實現(xiàn)對原始IDL文件的掃描,對Polling異步機制支持的接口定義插入,以生成隱式IDL文件,原接口對應的對Polling異步機制支持的應答、異常處理對象及Polling對象接口在文件中得到映射。后端為生成異步代碼,抽象語法樹需利用隱式IDL文件所生成,對應異步代碼根據(jù)Polling有關(guān)邏輯生成。
3.3 抽象語法樹修改算法
此方法無需生成隱式IDL文件,而在抽象語法樹生成后、生成代碼前對抽象語法樹進行遍歷,將代碼生成需要的結(jié)點向抽象語法樹動態(tài)加入。后端為生成異步代碼,應結(jié)合修改后抽象語法樹,對應的異步代碼根據(jù)Polling邏輯生成。
3.4 兩種方法對比
隱式IDL文件方法主要是預處理器的實現(xiàn),為使設計簡化并保證原始文件具有正確的語法,預處理器和語法分析器可在預處理中調(diào)用,就是對預處理和語法分析執(zhí)行兩次,效率不高。相對于隱式IDL文件方法,抽象語法樹修改算法無需對預處理和語法分析執(zhí)行兩次,只對抽象語法樹遍歷一次并將所需節(jié)點添加,因此具有較高的效率。
3.5 抽象語法樹修改算法
抽象語法樹修改算法在實際中通常應用較多,該算法主要內(nèi)容是對抽象語法樹遍歷后,將其中的Interface節(jié)點識別,再結(jié)合CORBA規(guī)范將對Poliing功能支持的節(jié)點進行添加。接口識別后,定義三個相應的集合,分別用于除one-way操作的所有操作,集成接口只讀屬性,集成接口一般屬性。具體算法為:
獲得當前節(jié)點的全部子節(jié)點,將節(jié)點形成一個序列,對序列中元素執(zhí)行以下步驟:如元素是Module對象,可將其作為參數(shù)對此算法進行遞歸調(diào)用;如元素是Interface對象,則直接執(zhí)行以下步驟,如果是其它對象就無需進行處理。
對于Interface對象,對其命名后依次執(zhí)行修改對象并創(chuàng)建相應操作和Polling接口,返回值類型如果不為空,為其建立元hi操作返回值數(shù)據(jù)類型的屬性。原始操作中out及inout類型參數(shù)都只建立只讀屬性,數(shù)據(jù)類型與其參數(shù)類型分別相對應。由此可見,抽象語法樹修改算法具有O(n)的復雜度,將此算法在實現(xiàn)Polling模型中具體應用,應用結(jié)果可滿足CORBA及Polling模型要求。采用此算法生成對Polling模型功能支持的代碼并結(jié)合Polling ORB可充分實現(xiàn)Polling功能的實際需要。
4 結(jié)束語
綜上所述,文章針對Polling模型體系結(jié)構(gòu)的實現(xiàn)進行了較深入地探討,詳細論述了生成Polling功能代碼的機制,提出對抽象語法樹算法的修改算法。經(jīng)有關(guān)應用證實,該機制可實現(xiàn)模型設計要求,使CORBA應用的激活機制得到擴展,具有異步性,使請求發(fā)送和應答接收解耦問題得到有效解決,應用領(lǐng)域得到一定程度的擴展。
參考文獻
[1]鄭茂松.一個語義引導代碼生成工具系統(tǒng)的設計[J].計算機應用與軟件,2011.
[2]楊軍,劉毅斌.代碼生成技術(shù)在通信接口開發(fā)中的應用[J].江西冶金,2013.
[3]蔣凌云,王汝傳.用于網(wǎng)格計算的復合代碼生成技術(shù)研究[J].南京郵電學院學報,2013.
[4]郭天文.基于動詞屬性的模板化自動代碼生成[J].計算機技術(shù)與發(fā)展,2013.
[5]朱曉峰.自動代碼生成圖形制導編碼與專門知識輔助[J].計算機工程,2012.
作者簡介:孟令權(quán)(1975-),副研究員,主要從事應用技術(shù)研究工作。