摘 要:為了解決傳統(tǒng)GIS 軟件的行業(yè)化、專業(yè)化和開發(fā)成本較高的問題,在深入研究“平臺+ 插件”模型的本質(zhì)與實現(xiàn)機制的基礎(chǔ)上,設(shè)計了基于插件技術(shù)的GIS 軟件動態(tài)配置模型,并對模型實現(xiàn)中的體系結(jié)構(gòu)、消息處理機制、插件間的交互和動態(tài)配置的一致性等關(guān)鍵技術(shù)進行了深入剖析,最后結(jié)合大型GIS 平臺——MAPGIS7. 0給出了應(yīng)用實例,驗證了此動態(tài)配置模型的可行性。
關(guān)鍵詞:動態(tài)配置; 插件; GIS應(yīng)用框架
中圖分類號:TP311 文獻標(biāo)志碼:A 文章編號:1001-3695(2008)08-2371-03
Key technology of plugin-based GIS software dynamic configuration
CHEN Zhan-long1,2,WU Liang1,WU Xin-cai1
(1.Faculty of Information Engineering, China University of Geosciences, Wuhan 430074, China; 2.China GIS Software Research Application Engineering Center of Ministry of Education, Wuhan 430074, China)
Abstract:Traditional GIS software faces some hot potatoes, for example, industrilization, specialization and high cost. In order to resolve these problems, based on the thorough study of essential and implementation mechanism of platform plugin model, this paper designed the GIS software dynamic configuration model, and analyzed the key technologies of system structure, software dealing with message mechanism, interactive mechanism between plugins and the coherence of dynamic configuration in the realization of GIS software dynamic configuration model. At last, combined with large-scale GIS platform (MAPGIS7. 0), this paper gave the practice of this model, and tested the feasibility of GIS software dynamic configuration model.
Key words:dynamic configuration; plugin; GIS application framework
在軟件項目開發(fā)這樣一個充滿變化的知識應(yīng)用領(lǐng)域,面對應(yīng)用需求的多元化、軟件項目的大型化,使不同開發(fā)團隊的開發(fā)管理復(fù)雜性增加,從而導(dǎo)致了軟件開發(fā)成本提高等問題。從軟件工程的角度出發(fā),在設(shè)計層面人們希望通過一些軟件構(gòu)架的改進達(dá)到以下目的[1]:a)提高軟件復(fù)用性;b)增強模塊化和封裝性; c)不同功能模塊的無縫集成;d)靈活的可擴展性; e)面向不同應(yīng)用層面的領(lǐng)域性和易移植性。目前GIS應(yīng)用領(lǐng)域正面臨著一個從行業(yè)級、專業(yè)化應(yīng)用到大眾化應(yīng)用轉(zhuǎn)變的過程。 隨著GIS 大眾化應(yīng)用的不斷深入,GIS 軟件系統(tǒng)必須充分考慮適應(yīng)各種各樣不斷衍生的應(yīng)用需求的難題。基于傳統(tǒng)軟件構(gòu)架體系的GIS 軟件系統(tǒng)雖然具有模塊分工明確、平臺結(jié)構(gòu)緊湊等優(yōu)點,但TB 級的GIS 數(shù)據(jù)管理、多元化的數(shù)據(jù)來源、不斷外延的GIS功能等發(fā)展趨勢對GIS 平臺提出了新的要求和挑戰(zhàn)。因此對于GIS 平臺來說,提供一個具有良好復(fù)用性和靈活可擴展性的,同時對GIS 項目實施所面對的特定知識應(yīng)用領(lǐng)域具有很好支持的軟件框架是一件非常有意義的事情[1],而采用“平臺+ 插件”的軟件構(gòu)架將是解決上述問題的核心。
1 GIS軟件動態(tài)配置模型
“插件”這個詞最早來源于硬件技術(shù),20世紀(jì)60年代計算機硬件模塊化,模塊化的硬件插入計算機的設(shè)備框架中(如聲卡插入主板),這些硬件稱為插件[2]。后來這一理念被引入到軟件開發(fā)中。插件技術(shù)從本質(zhì)上講是一種軟件集成技術(shù)[3]。“平臺+ 插件”模型的主要思想是將擴展功能以插件的形式通過平臺統(tǒng)一地管理起來,在平臺內(nèi)部提供平臺與插件之間以及不同插件之間完備的消息機制(包括系統(tǒng)消息轉(zhuǎn)發(fā)、框架內(nèi)部自定義消息),對不同擴展功能進行分類并定義標(biāo)準(zhǔn)接口,從而把不同的功能插件有機地集成到一起,有效地協(xié)同工作。通常軟件配置包括靜態(tài)和動態(tài)兩種[4]。靜態(tài)配置也可以視為系統(tǒng)的軟件組成,組成軟件的構(gòu)造塊(building blocks)同時加載到處理器中,即軟件的所有組成部分同時配置,需要修改時首先中斷系統(tǒng)運行,然后重新編輯、編譯配置內(nèi)容,最后重新建立軟件系統(tǒng)。再配置時要對初始配置進行修改[5]。所謂動態(tài)配置指的是運行時修改軟件,它允許在線接受新配置時只牽涉到受影響的部分而無須重新編譯整個系統(tǒng)。動態(tài)配置分為兩類:a)設(shè)計軟件時預(yù)先定義軟件的更改,并由系統(tǒng)跟蹤何時滿足更改軟件的條件,這類動態(tài)配置稱為可編程的(programmed,也被稱為可預(yù)期的);b)Ad hoc(也被稱為隨機的),動態(tài)變化是不可預(yù)測的,系統(tǒng)運行時由用戶在一個未知的時刻進行動態(tài)配置[6]。動態(tài)配置對于需要不中斷運行而修改或升級的大型軟件系統(tǒng)(如大型GIS平臺系統(tǒng))非常重要,因為中斷軟件系統(tǒng)的運行既不經(jīng)濟又不實用。借鑒文獻[7]中對反射式動態(tài)配置模型的定義,現(xiàn)定義GIS的軟件動態(tài)配置模型如下。
定義1 GIS軟件動態(tài)配置系統(tǒng) GDCS(GIS dynamic configuration system)是一個三元組:GDCS=〈PC, PP, MP〉。其中:PC (plugin control)是插件控制系統(tǒng),負(fù)責(zé)插件添加、卸載的管理,動態(tài)檢測系統(tǒng)中各個插件狀態(tài),并為實現(xiàn)動態(tài)配置功能對基礎(chǔ)平臺進行一定的擴展;PP(plugin persistence)是插件持久化機制,負(fù)責(zé)插件狀態(tài)的持久化機制,負(fù)責(zé)GIS基礎(chǔ)平臺以及插件的狀態(tài)物理保存;MP(message protocol)是消息處理協(xié)議,負(fù)責(zé)定義插件與GIS基礎(chǔ)平臺、插件與插件的消息,以及消息傳遞方式、參數(shù)傳遞方式等。
定義2 插件控制系統(tǒng)PC是一個三元組:PC=〈DC, GP, TA〉。其中:DC(dynamic control )動態(tài)配置器,負(fù)責(zé)對基礎(chǔ)GIS平臺進行擴展,負(fù)責(zé)插件的動態(tài)加載和刪除等配置;GP(GIS platform)GIS基礎(chǔ)平臺,是各個插件的宿主程序,提供各個插件調(diào)用的接口,并提供了對底層空間數(shù)據(jù)操作的基礎(chǔ)接口;TA(target application)目標(biāo)應(yīng)用系統(tǒng),是插件對GP功能擴展的結(jié)果,是最終用戶使用的各個應(yīng)用系統(tǒng)。
定義3 插件持久化機制PP是一個二元組:PP=〈SD, BD〉。其中:SD (state data)狀態(tài)數(shù)據(jù),負(fù)責(zé)記錄各個插件以及基礎(chǔ)平臺的配置狀態(tài)信息,從而使得目標(biāo)應(yīng)用系統(tǒng)能夠監(jiān)測插件的配置狀態(tài);BD(behavior data)行為數(shù)據(jù),負(fù)責(zé)記錄目標(biāo)應(yīng)用系統(tǒng)的動態(tài)行為數(shù)據(jù),使GIS基礎(chǔ)平臺可以對目標(biāo)應(yīng)用系統(tǒng)以及插件使用的資源進行動態(tài)優(yōu)化,以提高目標(biāo)應(yīng)用系統(tǒng)運行性能。
定義4 消息處理協(xié)議機制MP是一個四元組:MP=〈SMP, UMP, PMP, PCP〉。其中:SMP (system message protocol)系統(tǒng)消息協(xié)議,負(fù)責(zé)對操作系統(tǒng)的消息進行截獲并進行轉(zhuǎn)發(fā);UMP (user message protocol)用戶自定義消息協(xié)議,負(fù)責(zé)用戶自定義消息在GIS基礎(chǔ)平臺與插件以及插件與插件之間傳遞;PMP (plugin message protocol)負(fù)責(zé)插件之間的功能函數(shù)接口的定義;PCP(plugin control protocol)插件一致性維護協(xié)議,負(fù)責(zé)對插件狀態(tài)一致性進行維護。根據(jù)上述模型的定義,建立的模型如圖1所示。
2 GIS軟件動態(tài)配置模型實現(xiàn)的關(guān)鍵技術(shù)
2.1 插件控制
GIS插件控制接口層由應(yīng)用框架管理接口(IGISAppFrame)、文檔管理接口(IGISDocument)、地圖圖層管理接口(IMap)、窗口管理接口(IMapView)和插件管理器接口(IExtension)等主要對象接口組成。
IGISAppFrame 對象接口用來管理整個應(yīng)用框架的各個模塊,通過該對象插件可以取得框架中的其他元素或?qū)ο蠼涌凇U{(diào)用者無須創(chuàng)建該對象,由系統(tǒng)來維護該對象的生存期和場景。 該接口封裝了應(yīng)用框架窗口句柄、GIS 文檔接口( IGISDocument),并提供了相應(yīng)的方法來操縱這些對象。
IGISDocument 對象接口的主要功能是進行插件與地理數(shù)據(jù)庫之間的數(shù)據(jù)交流。該對象接口管理著IMapView(視圖顯示接口)、IMap(地圖數(shù)據(jù)接口)、IGeometryPackage(地理數(shù)據(jù)包接口)等接口。通過此接口插件可以取得地圖文檔、圖層和要素類等相關(guān)信息。IMapView 對象接口主要控制視窗的顯示,包括接口的坐標(biāo)投影,它提供了包括屏幕顯示、屏幕和數(shù)據(jù)坐標(biāo)系之間的轉(zhuǎn)換等功能。
IMap 對象接口的主要功能是管理地圖圖層,通過該接口可以獲得加載的圖層數(shù)據(jù)。MapView 提供了顯示、更新等操縱數(shù)據(jù)的方法。該類響應(yīng)操作系統(tǒng)具有關(guān)于窗口視圖的消息,對地圖視圖窗口進行繪制、地圖數(shù)據(jù)顯示等功能。
IExtension 接口定義了插件的分類標(biāo)準(zhǔn)、插件的加載/卸載。插件通過支持此分類標(biāo)準(zhǔn),系統(tǒng)可以自動對開發(fā)的插件進行識別和分類。插件的加載/卸載模塊則負(fù)責(zé)對插件的加載或卸載的管理。各個對象模塊之間的關(guān)系如圖2所示。
2.2 消息協(xié)議機制
插件技術(shù)的應(yīng)用,使GIS 軟件動態(tài)配置模型具備了完備的消息機制,可以滿足平臺與插件、插件與插件之間的消息傳遞需求。其主要的消息機制可以分為兩種類型:
a)操作系統(tǒng)消息轉(zhuǎn)發(fā)機制。通過這種消息轉(zhuǎn)發(fā)機制,可以實現(xiàn)工具插件對操作系統(tǒng)視圖插件的交互控制,滿足諸如地圖編輯(如添加節(jié)點、刪除節(jié)點、刪除線等)對視圖直接進行手動交互的需求。其主要設(shè)計思想是在GIS基礎(chǔ)平臺框架中對操作系統(tǒng)的消息進行截取,通過自定義的消息管道(messagepipe)傳入相應(yīng)的工具組(grouptool)和工具(tool)中。顯示視窗的消息訂閱機制,可以滿足某些沒有按照標(biāo)準(zhǔn)插件接口制作的工具或者某些特殊工具插件需要在非工作狀態(tài)持續(xù)監(jiān)控視圖交互的需求。截獲操作系統(tǒng)的消息流程圖如圖3所示。
b) 框架內(nèi)部平臺和插件的自定義消息傳遞機制。插件之間的消息分三種:全局廣播、局部廣播和單播。它們都是把目的端口作為消息的目標(biāo)。在基于COM 的插件技術(shù)中,目的端口是用COM 的接口作為區(qū)分端口的標(biāo)志。消息的目的端要接收相應(yīng)的消息需要實現(xiàn)相應(yīng)的COM 接口。消息的源端同樣有定制的能力,當(dāng)消息的目的為IUnknown 接口時,消息便成為廣播消息,而針對特定接口的消息即為單播消息。 把平臺和插件內(nèi)部自定義的消息獨立開來,一方面可以避免與操作系統(tǒng)的消息機制和自定義消息發(fā)生沖突,另一方面也可以很靈活地實現(xiàn)框架自定義消息廣播和點對點自定義消息傳遞,如圖4所示。
2.3 持久化機制
永久狀態(tài)是那些插件的包容器在摧毀對象之前需要保存的數(shù)據(jù)(一般是屬性和實例變量,如圖層插件對象CMapLayer中的圖層名稱、圖層狀態(tài)、圖層索引、圖層的最大最小比例等)。為了保存插件對象的狀態(tài),插件對象的包容器需實現(xiàn)多個永久接口,這樣插件對象的包容器把保存的狀態(tài)提供給對象,插件對象就能夠把自己初始化到以前的狀態(tài)。在具體的實現(xiàn)過程中,GIS基礎(chǔ)平臺實現(xiàn)了IStorage、IStream等接口,插件只需要實現(xiàn)IPersistStream和IPersistStorage即可。因插件中永久化接口的實現(xiàn)比較簡單,現(xiàn)分析GIS基礎(chǔ)平臺永久化接口實現(xiàn)的關(guān)鍵技術(shù),GIS基礎(chǔ)平臺永久化接口的實現(xiàn)使用了復(fù)合文檔來存儲系統(tǒng)中使用的各個插件的狀態(tài)信息:復(fù)合文檔的創(chuàng)建使用函數(shù)StgCreateDocfile,打開復(fù)合文檔使用StgOpenStorage,復(fù)合文檔的關(guān)閉通過釋放根節(jié)點的IStorage達(dá)到關(guān)閉的目的,根節(jié)點的IStorage的釋放并不代表整個復(fù)合文檔的關(guān)閉,整個復(fù)合文檔的關(guān)閉通常指所有的Storage和Stream都關(guān)閉的情況。復(fù)合文檔提供四種訪問模式,分別是:
獨占模式 STGM_SHARE_EXCLUSIVE
共享拒絕寫模式 STGM_SHARE_DENY_WRITE
共享拒絕讀模式 STGM_SHARE_DENY_READ
完全共享模式 STGM_SHARE_DENY_NONE
在STGM_TRANSACTED模式下,若IStorage沒有提交(Commit),它下面的所有改動將不會保存;若提交了,其下面所有的改動將被保存。對于Commit和Revert操作來說,使用Revert將可以返回到最后一次Commit之前的情況,包括創(chuàng)建IStorage或IStream的操作。
在對插件進行永久化管理之后,GIS平臺插件框架界面層接口就可以對窗口、視圖、工具條等用戶界面進行管理,創(chuàng)建和定制能夠滿足不同用戶的界面元素。其主要接口有:
a)GISUI, 由GISUI 出發(fā)可創(chuàng)建或獲取界面的主要對象;
b)GISToolSpace為插件、工具提供工具箱的支持;
c)GISToolBars為插件提供工具條支持;
d) 插件的工具箱ToolBox 創(chuàng)建起來以后,便可以在其中創(chuàng)建GISToolPage和GISMenuBar;
e) GISToolPage、GISMenuBar 中可以插入、刪除和修改任何有GISButton派生的任何工具項。
各個界面層接口對象關(guān)系圖如圖5所示。
3 開發(fā)實例
插件主要表現(xiàn)為GIS框架下的視圖和工具。它包含諸如通用編輯和編輯擴展等。用戶可根據(jù)實際的使用需要選擇相應(yīng)的功能插件加載,用戶定制自己的插件需要實現(xiàn)框架定義的功能模塊插件接口。該接口提供的方法將用戶的菜單、工具箱、視窗等方法加載到GIS框架上,插件接口還定義了消息響應(yīng)方法,用戶實現(xiàn)該消息響應(yīng)方法就可以實現(xiàn)自己的功能模塊。以下將結(jié)合一個具體的工具插件開發(fā)的例子來對本文分析的關(guān)鍵技術(shù)進行說明。
a)插件資源的編輯。在VC++6.0或VS2005中對插件所需要的資源(如工具條資源、位圖資源等)進行編輯,編輯過程與通常MFC下開發(fā)過程類似,這里不再詳述。
b)示例插件需要實現(xiàn)IMPITool接口。該接口定義了一系列的工具插件的規(guī)則,示例插件實現(xiàn)這接口就可以被GIS基礎(chǔ)平臺調(diào)用,從而實現(xiàn)與GIS基礎(chǔ)平臺的交互。部分接口如下:
STDMETHOD(Pause)(LONG Reserved);
STDMETHOD(Stop)(LONG Reserved);
STDMETHOD(Start)(LONG Reserved);
STDMETHOD(OnCreate)(IMPIApplication* pMpiApplication);
STDMETHOD(OnLMouseDown)(UINT Button,UINT Shift,int X,int Y);
STDMETHOD(OnMouseMove)(UINT Button, UINT Shift, int X, int Y);
STDMETHOD (onLMouseUp) (LUINT Button, UINT Shift, int X, int Y);
在OnCreate接口函數(shù)中,傳入的是GIS平臺應(yīng)用框架的應(yīng)用接口指針,通過該指針,插件將該接口指針緩存,就可以調(diào)用GIS平臺應(yīng)用框架提供的函數(shù)功能了。例如獲得文檔接口、獲得地圖接口IMap, 通過IMap就可以獲得各個圖層數(shù)據(jù),從而對圖層的空間數(shù)據(jù)進行各種操作。
在OnLMouseDown、OnLMouseUp等函數(shù)接口中,實現(xiàn)對插件操作的視圖傳過來的鼠標(biāo)按下、彈起等消息進行處理,從而實現(xiàn)對視圖的編輯交互。如果不對這些函數(shù)接口進行處理,則可以在函數(shù)體中直接返回S_OK即可。
在完成了插件接口的實現(xiàn)之后,直接編譯、連接,對插件進行COM注冊,編寫的插件就加在了在GIS基礎(chǔ)平臺框架的插件管理器中,如圖6所示。
4 結(jié)束語
本模型已成功運用到大型GIS (MAPGIS7. 0)。“平臺+ 插件”的軟件框架不是對原來的軟件構(gòu)架技術(shù)的拋棄,相反在很大程度上可以看做是對原有框架構(gòu)建技術(shù)的演化和升級。本文剖析了在該模型實現(xiàn)過程中的關(guān)鍵技術(shù),并用實例對這些關(guān)鍵技術(shù)進行了解釋說明。在易實現(xiàn)性、安全性等方面進一步完善該模型是今后研究工作的重點。
參考文獻:
[1]吳亮,楊凌云,尹艷斌.基于插件技術(shù)的GIS應(yīng)用框架的研究與實現(xiàn)[J].地球科學(xué),2006,31(5):585-588.
[2]姜昌華. 插件技術(shù)及其應(yīng)用[J]. 計算機應(yīng)用與軟件,2003,20(10):10-11,67.
[3]竇蕾.面向構(gòu)件的復(fù)雜軟件系統(tǒng)中動態(tài)配置技術(shù)的研究[D]. 長沙:國防科學(xué)技術(shù)大學(xué), 2005.
[4]WERRMELINGER M A. Specification of software architecture reconfiguration[D]. [S.l.]:Universidade Novade Lisboa, 1999.
[5]MOAZAMI-GOUIDARZI K, KRAMER J.Maintaining node consistency in the face of dynamic change[C]// Proc of the 3rd International Conference on Configurable Distributed Systems. Annapolis, Maryland: IEEE Computer Society Press, 1996:62-69.
[6]WERMELINGER M. Towards a chemical model for software architecture reconfiguration[C]// Proc of the 4th International Conference on Configurable Distributed Systems. Annapolis, Maryland: [s.n.], 1998:111-118.
[7]曹旻. 基于組件的分布式軟件動態(tài)配置模型的研究[D].上海:上海大學(xué), 2005.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文