胡 平,王忠群,劉 濤,陳 穎,黃少偉
?
基于分布式OSGi的通用電力數(shù)據(jù)平臺
胡 平1,王忠群1,劉 濤1,陳 穎2,黃少偉2
(1. 安徽工程大學(xué)計算機與信息學(xué)院,安徽 蕪湖 241000;2. 清華大學(xué)電機工程與應(yīng)用電子技術(shù)系電力系統(tǒng)國家重點實驗室,北京 100084)
提升智能電網(wǎng)中各種異構(gòu)應(yīng)用軟件間的數(shù)據(jù)共享和功能交互能力,是電力企業(yè)亟需解決的問題。而依靠標(biāo)準(zhǔn)化數(shù)據(jù)模型、SOA等技術(shù)的傳統(tǒng)交互方案對模塊運行期熱插拔、分布式編程模型低侵入性和電力數(shù)據(jù)持續(xù)變化的支持度不足。為此,以電力數(shù)據(jù)為中心,從軟件架構(gòu)角度,將電力應(yīng)用解耦為數(shù)據(jù)總線和數(shù)據(jù)插件,提出一種基于分布式開放式服務(wù)網(wǎng)關(guān)(OSGi)的通用電力數(shù)據(jù)平臺。闡述平臺拓?fù)浼軜?gòu)、分布式OSGi的擴展方法及通用電力元數(shù)據(jù)模型,給出平臺在福建電網(wǎng)的實施方法,并對典型業(yè)務(wù)模塊的功能及并發(fā)性能進(jìn)行測試,結(jié)果表明,該平臺能有效降低異構(gòu)電力應(yīng)用間的數(shù)據(jù)共享和功能交互難度。
智能電網(wǎng);電力數(shù)據(jù)平臺;開放式服務(wù)網(wǎng)關(guān);元數(shù)據(jù);數(shù)據(jù)鏈;面向切面編程
隨著電力自動化水平的提高以及智能電網(wǎng)[1]的興起,如何提升現(xiàn)有各種電力應(yīng)用軟件間的數(shù)據(jù)共享和功能交互能力,以應(yīng)對規(guī)模和復(fù)雜程度日趨增加的電力業(yè)務(wù),是電力企業(yè)亟需解決的問題。然而,目前各類電力應(yīng)用采用的數(shù)據(jù)模型通?;ビ胁町?,盡管工業(yè)界試圖通過推行IEC 61970/ CIM[2]等標(biāo)準(zhǔn)數(shù)據(jù)模型以規(guī)范不同電力應(yīng)用的數(shù)據(jù)格式,但往往因地區(qū)實際差異較大而無法重用已有軟件模型。此外,對現(xiàn)有眾多電力數(shù)據(jù)模型進(jìn)行標(biāo)準(zhǔn)化改造以及由此引發(fā)的業(yè)務(wù)代碼重構(gòu)工作量也是無法忽視的。
除數(shù)據(jù)模型標(biāo)準(zhǔn)化外,一些研究[3]通過SOA技術(shù)將電力數(shù)據(jù)封裝為SOAP消息并公開服務(wù)接口,其在一定程度上解決了異構(gòu)應(yīng)用的交互問題,但在復(fù)雜業(yè)務(wù)模塊的透明分布化以及對電力數(shù)據(jù)持續(xù)變化的支持度等方面尚有不足。另一方面,受限于傳統(tǒng)的編程模型,目前的交互方案幾乎不具備在不間斷運行的前提下對部分功能模塊進(jìn)行熱插拔和版本更新的特性,同時,企業(yè)也很難根據(jù)自身需求對功能模塊進(jìn)行較細(xì)粒度的定制或二次開發(fā),這些都嚴(yán)重降低了電力企業(yè)對需求變更的快速響應(yīng)能力。
本文以電力數(shù)據(jù)為中心,從軟件架構(gòu)的角度,通過將電力應(yīng)用解耦為數(shù)據(jù)總線和數(shù)據(jù)插件,提出一種基于分布式開放式服務(wù)網(wǎng)關(guān)(Open Service Gateway initiative, OSGi)規(guī)范[4-5]的通用電力數(shù)據(jù)平臺。
通用電力數(shù)據(jù)平臺由數(shù)據(jù)總線(DataBus)和數(shù)據(jù)插件(DataPlug)構(gòu)成,如圖1所示。
DataPlug代表部署于企業(yè)中的各種電力應(yīng)用節(jié)點,它們是電力數(shù)據(jù)的來源,通過網(wǎng)絡(luò)彼此連接;DataBus負(fù)責(zé)管理各DataPlug間的數(shù)據(jù)交互,并向外公開統(tǒng)一的數(shù)據(jù)服務(wù)接口和展示框架,DataPlug可通過這些接口獲取其他Data Plug提供的服務(wù)。
圖1 通用電力數(shù)據(jù)平臺拓?fù)浼軜?gòu)
DataBus定義的數(shù)據(jù)服務(wù)接口包括:(1)數(shù)據(jù)獲取:從各種數(shù)據(jù)源獲取數(shù)據(jù),并解析成為通用的、中立的元數(shù)據(jù); (2)數(shù)據(jù)處理:對元數(shù)據(jù)進(jìn)行檢索、過濾、分解和轉(zhuǎn)換等操作;(3)數(shù)據(jù)管理:在分布式環(huán)境下管理數(shù)據(jù)的發(fā)布、同步,以及數(shù)據(jù)變化事件的訂閱和通知。
新增應(yīng)用節(jié)點應(yīng)實現(xiàn)上述部分接口并向DataBus注冊,以成為一個新的DataPlug。DataBus不僅解耦了各DataPlug間的依賴,且統(tǒng)一了它們的服務(wù)調(diào)用方式。不同DataPlug的實例可自由組合并通過DataBus提供的接口裝配為一個新的業(yè)務(wù)流程,從而有效提升了平臺的可定制和可擴展性。
通用電力數(shù)據(jù)平臺工作于分布式環(huán)境下,而傳統(tǒng)的分布式編程模型在模塊級運行期熱插拔和職責(zé)劃分等方面尚有一些不足,而這正是OSGi規(guī)范所關(guān)注的問題。OSGi規(guī)范為軟件系統(tǒng)提供了一種基于構(gòu)件的、面向服務(wù)的開發(fā)機制和運行環(huán)境,其核心思想是使軟件構(gòu)件(在OSGi中稱為Bundle)的部署、啟停、更新及卸載等具備高度動態(tài)性。近年來,越來越多的應(yīng)用開始采用OSGi作為底層架構(gòu)來開發(fā)和部署,其中典型代表如Eclipse。
目前,兼容OSGi R4.2版本規(guī)范的參考實現(xiàn)主要有Eclipse Equinox、Apache D-OSGi及JBoss OSGi等,其中以Apache D-OSGi的發(fā)展最為活躍。D-OSGi源于Apache的CXF[6]項目,其核心是通過Web Service技術(shù)實現(xiàn)跨虛擬機的OSGi服務(wù)調(diào)用,相較于其他分布式OSGi的參考實現(xiàn),D-OSGi具有以下特點:(1)保持OSGi的原有編程模型; (2)使用平臺中立的WSDL/SOAP等服務(wù)描述和訪問機制;(3)服務(wù)訪問請求和響應(yīng)允許攜帶復(fù)雜的自定義數(shù)據(jù)類型;(4)提供了輕量級容器Felix的支持?;谝陨咸攸c,本文平臺選用了D-OSGi作為分布式編程模型,即各DataPlug以Bundle的形式將自身服務(wù)注冊到OSGi中心服務(wù)器,供其他遠(yuǎn)程DataPlug訪問。
電力應(yīng)用涉及的特殊業(yè)務(wù)決定了平臺包含的多個DataPlug間不僅僅是簡單的功能調(diào)用關(guān)系,例如,數(shù)據(jù)的每次變化都將觸發(fā)其所有監(jiān)聽者執(zhí)行某個操作、多個DataPlug實例在訪問共享資源時需要同步控制,任務(wù)調(diào)度器必須協(xié)調(diào)某一任務(wù)中多個并發(fā)線程的狀態(tài)以避免出現(xiàn)邏輯錯誤等。若遵循標(biāo)準(zhǔn)的分布式OSGi規(guī)范實現(xiàn)這些邏輯,不僅代碼分散、冗余度高,而且會因非功能性邏輯對業(yè)務(wù)邏輯的侵入而嚴(yán)重降低平臺的可擴展性。
借助面向切面編程(Aspect-oriented Programming, AOP)思想能較好地滿足上述特殊需求[7-8],考慮到標(biāo)準(zhǔn)的D-OSGi交互模型缺乏對關(guān)注點分離和切面織入的支持能力,有必要對其進(jìn)行面向切面擴展,如圖2所示。
圖2 D-OSGi的面向切面擴展
擴展方法基于典型的責(zé)任鏈設(shè)計模式,通過在服務(wù)消費者(Client)和服務(wù)提供者(Server)之間引入攔截器(Interceptor),并由后者自動攔截和轉(zhuǎn)發(fā)所有由Client發(fā)起的遠(yuǎn)程服務(wù)調(diào)用[9-10]。為獲取OSGi容器上下文,Interceptor本身也是以Bundle的形式出現(xiàn),其提供的攔截方法(doIntercept)被封裝為OSGi服務(wù)并發(fā)布到注冊中心(Zoo Keeper Server)。
Interceptor通過2011年4月發(fā)布的OSGi R4.3規(guī)范中新增的服務(wù)事件監(jiān)聽器鉤子(Service Event Listener Hook)實現(xiàn)調(diào)用攔截[11],將目標(biāo)方法與指定的織入配置(與Spring AOP的配置信息類似)進(jìn)行匹配,通過編織鉤子(WeavingHook)將匹配到的橫切關(guān)注點邏輯(以AspectJ的語法定義)織入doIntercept方法的合適位置,最后將Client原來的調(diào)用請求轉(zhuǎn)發(fā)到目標(biāo)方法。
作為通用電力數(shù)據(jù)平臺的數(shù)據(jù)總線,如何對各類異構(gòu)電力數(shù)據(jù)進(jìn)行同構(gòu)化處理,并以一種與電力業(yè)務(wù)無關(guān)的結(jié)構(gòu)加以描述是DataBus首先要解決的問題。本文設(shè)計了一種通用的電力元數(shù)據(jù)(metadata)模型,其將各種標(biāo)準(zhǔn)和格式的電力數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一的3層Map結(jié)構(gòu),如圖3所示。
圖3 基于3層Map的電力元數(shù)據(jù)
元數(shù)據(jù)以最原始的鍵值對來描述電力數(shù)據(jù),其優(yōu)點是能表達(dá)和交換任何標(biāo)準(zhǔn)的電力數(shù)據(jù)。在3層Map中,頂層Key存儲數(shù)據(jù)的Tag;中層Key存儲Tag下數(shù)據(jù)行的唯一標(biāo)識(可由用戶配置);底層Key則存放數(shù)據(jù)的列名稱。此外,為區(qū)分同一OSGi容器中可能存在的多個元數(shù)據(jù)實例,每個實例都應(yīng)向容器注冊一個唯一標(biāo)識。若平臺需要支持某種新格式的電力數(shù)據(jù),只需編寫負(fù)責(zé)解析相應(yīng)格式文件的DataPlug并向平臺輸入層注冊即可。
具體到Java平臺,可繼承java.util.Map接口的實現(xiàn)類TreeMap(支持按Key排序,以滿足某些要求迭代順序與插入順序一致的業(yè)務(wù))作為元數(shù)據(jù)的類型,如TreeMap
元數(shù)據(jù)模型弱化了數(shù)據(jù)的類型,其實質(zhì)是一種結(jié)構(gòu)化的數(shù)據(jù),故無法對電力業(yè)務(wù)中的各種概念進(jìn)行領(lǐng)域建模并確定對應(yīng)實體類,這無疑與今天占絕對主導(dǎo)地位的面向?qū)ο筌浖O(shè)計思想背道而馳。另一方面,元數(shù)據(jù)基于的Map接口僅支持get/put等簡單方法,在編寫需要對大量數(shù)據(jù)進(jìn)行迭代和CRUD操作的DataPlug時,以具體的Tag、Id或Key作為參數(shù)頻繁調(diào)用get/put方法并造型為所需類型的方式,不僅會降低DataPlug開發(fā)人員對電力業(yè)務(wù)的關(guān)注度,而且所寫代碼的可讀性通常也較差,不利于業(yè)務(wù)的擴展。
本文提出一種將元數(shù)據(jù)模型分別映射為對象以及關(guān)系模型的方法。前者根據(jù)映射配置信息,利用虛擬機字節(jié)碼生成工具為元數(shù)據(jù)中各Tag生成對應(yīng)POJO代理類及其對應(yīng)DAO類(包含CRUD邏輯);后者則提供了類SQL的元數(shù)據(jù)查詢語言(Metadata Query Language, MQL)語法支持,使得DataPlug的編寫者可以像以SQL訪問關(guān)系型數(shù)據(jù)庫那樣對元數(shù)據(jù)進(jìn)行CRUD、排序和遍歷等操作。
具體到Java EE平臺,可借助javassist和antlr等第三方Jar實現(xiàn)上述映射。此外,在對元數(shù)據(jù)進(jìn)行寫操作時,為保證完整性,攔截器Bundle應(yīng)自動為這些操作織入相關(guān)的事務(wù)提交和回滾邏輯。
電力應(yīng)用相較于其他領(lǐng)域業(yè)務(wù)系統(tǒng)的一個重要區(qū)別是電力數(shù)據(jù)的持續(xù)變化將多次觸發(fā)某些業(yè)務(wù)邏輯,換句話說,電力系統(tǒng)中的事件源往往是系統(tǒng)內(nèi)部的數(shù)據(jù),而非位于系統(tǒng)外部的使用者或其他系統(tǒng)。因此,通用電力數(shù)據(jù)平臺必須具備探測元數(shù)據(jù)變化并執(zhí)行相應(yīng)業(yè)務(wù)操作的能力,具體包含以下2種方式:
(1)定時檢查:在任務(wù)調(diào)度器中為每個DataPlug實例啟動一個專門的監(jiān)聽線程,該線程以固定時間間隔主動拉取(Pull)與DataPlug實例關(guān)聯(lián)的元數(shù)據(jù),并檢查其是否與之前一致,若有變化,則由任務(wù)管調(diào)度器回調(diào)相應(yīng)的接口方法。
(2)變化通知:通過主題/觀察者設(shè)計模式以及GUI編程中的事件驅(qū)動模型,以配置的方式為元數(shù)據(jù)實例指定一個或多個DataPlug實例作為數(shù)據(jù)變化事件的訂閱者。當(dāng)發(fā)生寫數(shù)據(jù)操作時,元數(shù)據(jù)實例首先將變化的數(shù)據(jù)封裝為事件對象,然后推送(Push)該事件對象到各訂閱者的事件隊列。為觸發(fā)作為事件訂閱者的DataPlug實例,任務(wù)調(diào)度器需要啟動一個全局監(jiān)聽線程以掃描各訂閱者的事件隊列,并回調(diào)相應(yīng)DataPlug的接口方法。
因平臺數(shù)據(jù)全部來自于第三方的電力應(yīng)用(變化時機無法預(yù)期),故定時檢查無法捕獲發(fā)生在相鄰2個檢查點之間的連續(xù)變化。另一方面,因定時檢查含有元數(shù)據(jù)比較邏輯,且各DataPlug實例都對應(yīng)一個監(jiān)聽線程,故其性能明顯不及變化通知方式。
本文平臺一期已于2012年底在福建電網(wǎng)上線,共計 61個Bundle,其中24個構(gòu)成DataBus,其余為DataPlug,涉及業(yè)務(wù)包括電網(wǎng)解列、薄弱環(huán)節(jié)識別、狀態(tài)估計、模擬數(shù)據(jù)產(chǎn)生等。平臺的邏輯層劃分如圖4所示。以上各層均有相應(yīng)的管理邏輯,用于控制本層Bundle實例的生命周期及任務(wù)調(diào)度。管理邏輯涉及的細(xì)節(jié)對數(shù)據(jù)平臺的使用者呈透明,各層Bundle的編寫者只需配置本Bundle的觸發(fā)條件和必要的映射信息。各層Bundle的一個或多個實例可通過指定關(guān)聯(lián)端實例名稱的方式彼此連接以形成數(shù)據(jù)鏈,并通過RIA技術(shù)以可視化的方式呈現(xiàn)給用戶。在觸發(fā)條件被滿足時,由任務(wù)調(diào)度邏輯通過反射機制自動回調(diào)Bundle的特定方法,從而實現(xiàn)跨層的Bundle交互并最終完成一次完整的業(yè)務(wù)操作。
圖4 通用電力數(shù)據(jù)平臺的邏輯層劃分
本文數(shù)據(jù)平臺基于JDK 6.0+IDEA 12開發(fā),并以Maven作為模塊版本管理插件;OSGi服務(wù)框架采用Apache CXF D-OSGi 1.4,OSGi容器為Felix 4.2,Web容器為Jetty 9.0.1。
在功能正確性方面,選取了位于平臺處理層的State Estimator(電網(wǎng)狀態(tài)估計)作為測試目標(biāo),其數(shù)據(jù)鏈如圖5(a)所示:(1)讀入網(wǎng)架和量測數(shù)據(jù)并分別解析為元數(shù)據(jù);(2)執(zhí)行開關(guān)估計,找出可疑開關(guān)并修正;(3)執(zhí)行拓?fù)浞治?,分析電網(wǎng)拓?fù)浣Y(jié)構(gòu),得到拓?fù)鋶u數(shù)據(jù);(4)執(zhí)行狀態(tài)估計,計算得到電網(wǎng)狀態(tài)估計值;(5)查看修正后的元數(shù)據(jù)。圖5(b)為結(jié)果元數(shù)據(jù)界面,經(jīng)程序比較,與原本地C++應(yīng)用的計算結(jié)果一致。此外,當(dāng)輸入層的網(wǎng)架和量測數(shù)據(jù)變化時,將自動觸發(fā)位于處理層的3個DataPlug重新計算,驗證了平臺可行性。
圖5 平臺功能性測試
在并發(fā)性能方面,選取位于平臺輸出層的Meta2DB(將元數(shù)據(jù)導(dǎo)出到關(guān)系數(shù)據(jù)庫的DataPlug,包含自動建庫/表邏輯)的多個并發(fā)實例,分別導(dǎo)出本地和遠(yuǎn)程元數(shù)據(jù)作為測試目標(biāo),測試數(shù)據(jù)源為福建電網(wǎng)2011年12月QS格式數(shù)據(jù) (14個Tag,數(shù)據(jù)總量為22 157條,元數(shù)據(jù)序列化文件大小為5.35 MB)。具體測試結(jié)果如圖6所示。
圖6 數(shù)據(jù)平臺并發(fā)性能測試結(jié)果
為降低硬件瓶頸對測試準(zhǔn)確性的影響,并發(fā)性能測試使用了5臺高性能PC機,每個均啟動了數(shù)量不等的并發(fā)實例;數(shù)據(jù)庫服務(wù)器(Oracle 10g企業(yè)版)部署于IBM System x3650 M4,并通過千兆以太網(wǎng)與各PC機連接。不同并發(fā)實例數(shù)下的測試結(jié)果表明:(1)無論是本地還是遠(yuǎn)程電力數(shù)據(jù),數(shù)據(jù)平臺均提供了較好的時間響應(yīng);(2)受元數(shù)據(jù)變化頻率、虛擬機線程調(diào)度時機以及DataPlug所在節(jié)點的繁忙程度影響,單節(jié)點上的并發(fā)實例較多(12個以上)時,單次任務(wù)的耗時將顯著增加,但仍可接受。
如何提升不同電力應(yīng)用系統(tǒng)間的異構(gòu)數(shù)據(jù)共享和功能交互能力是構(gòu)建智能電網(wǎng)必須解決的問題。本文從電力數(shù)據(jù)和軟件架構(gòu)的角度,通過將電力應(yīng)用解耦為數(shù)據(jù)總線和數(shù)據(jù)插件,提出了一種基于分布式OSGi的通用電力數(shù)據(jù)平臺,并設(shè)計了一種能表達(dá)和交換任意格式的電力數(shù)據(jù),同時具備探測數(shù)據(jù)變化并觸發(fā)相應(yīng)業(yè)務(wù)能力的電力元數(shù)據(jù)模型。通過對典型電力業(yè)務(wù)的功能及并發(fā)性能測試,驗證了該平臺在分布式編程模型的低侵入性、電力業(yè)務(wù)模塊的動態(tài)熱插拔以及對數(shù)據(jù)變化事件的支持能力等方面均能較好地滿足異構(gòu)電力應(yīng)用間的數(shù)據(jù)共享和交互需求。下一步將繼續(xù)完善數(shù)據(jù)平臺,并對計算密集型電力業(yè)務(wù)的計算任務(wù)分派、并行計算以及集群環(huán)境下的負(fù)載均衡、失效DataPlug主動遷移策略[12]等方面做進(jìn)一步的研究。
[1] Farhangi H. The Path of the Smart Grid[J]. IEEE Power and Energy Magazine, 2010, 8(1): 18-28.
[2] 丁 明, 張征凱, 畢 銳. 面向分布式發(fā)電系統(tǒng)的CIM擴展[J]. 電力系統(tǒng)自動化, 2008, 32(20): 83-87.
[3] 唐躍中, 曹晉彰, 郭創(chuàng)新, 等. 電網(wǎng)企業(yè)基于面向服務(wù)架構(gòu)的應(yīng)用集成研究與實現(xiàn)[J]. 電力系統(tǒng)自動化, 2008, (14): 50-54.
[4] OSGi Alliance. OSGi Service Platform Release 4.3[EB/OL]. (2011-06-17). http://www.osgi.org/Release4.
[5] Redondo R, Vilas A, Cabrer M. Enhancing Residential Gateways: OSGi Service Composition[J]. IEEE Transactions on Consumer Electronics, 2007, 53(1): 87-95.
[6] Apache Software Foundation. The CXF Project[EB/OL]. (2013-05-24). http://cxf.apache.org/distributed-osgi.html.
[7] The AspectJ Project. AspectJ 5 Developer’s Notebook[EB/OL]. (2012-03-26). http://www.eclipse.org/aspectj.
[8] Alexanderson R. Aspect Oriented Software Implemented Node Level Fault Tolerance[C]//Proc. of the 9th International Conference on Software Engineering and Applications. [S. l.]: ACM Press, 2007: 57-74.
[9] 張 仕, 黃林鵬. 基于OSGi的服務(wù)動態(tài)演化[J]. 軟件學(xué)報, 2008, 19(5): 1201-1211.
[10] 馮志宇, 黃林鵬. 基于OSGi的兩層服務(wù)模型[J]. 計算機應(yīng)用研究, 2009, 26(7): 2590-2592.
[11] 史殿習(xí), 吳元立, 丁 博, 等. StarOSGi: 一種OSGi分布式擴展中間件[J]. 計算機科學(xué), 2011, 38(1): 162-165.
[12] 李長云, 李 瑩, 吳 建, 等. 一個面向服務(wù)的支持動態(tài)演化的軟件模型[J]. 計算機學(xué)報, 2006, 29(7): 1020-1028.
編輯 顧逸斐
General Electric Data Platform Based on Distributed OSGi
HU Ping1, WANG Zhong-qun1, LIU Tao1, CHEN Ying2, HUANG Shao-wei2
(1. School of Computer and Information, Anhui Polytechnic University, Wuhu 241000, China; 2. State Key Lab of Power Systems, Department of Electrical Engineering, Tsinghua University, Beijing 100084, China)
Power companies need to solve the problem that how to improve the capabilities of data sharing and interoperation between heterogeneous applications in smart grid. Some solutions based on data model standardization or SOA are inadequate in terms of runtime modules hotplug, invasion of distributed programming model and continuous data change supporting. This paper decouples a power application software into data bus and data plugs from the perspective of electric data and software architecture, proposes a general electric data platform based on distributed Open Service Gateway initiative(OSGi), and then discusses the topological structure of data platform, distributed OSGi extension model and electric metadata model. The implementation approach of data platform in Fujian power grid is presented, and some tests are done for typical modules’ functionality and concurrent performance. The results show that the platform can reduce the difficulty of data sharing and interoperation between heterogeneous applications effectively.
smart grid; electric power data platform; Open Service Gateway initiative(OSGi); metadata; data chain; Aspect-oriented Programming(AOP)
1000-3428(2014)03-0071-05
A
TP393
國家自然科學(xué)基金資助項目(61300170);安徽省教育廳自然科學(xué)基金資助項目(KJ2013A040);清華大學(xué)盧強院士安徽省工作站基金資助項目。
胡 平(1979-),男,講師、碩士,主研方向:分布式計算,軟件體系結(jié)構(gòu);王忠群,教授;劉 濤,副教授、碩士; 陳 穎,副教授、博士;黃少偉,講師、博士。
2013-11-20
2013-12-16 E-mail:JavaFounder@gmail.com
10.3969/j.issn.1000-3428.2014.03.015