摘 要:為了解決傳統GIS 軟件的行業化、專業化和開發成本較高的問題,在深入研究“平臺+ 插件”模型的本質與實現機制的基礎上,設計了基于插件技術的GIS 軟件動態配置模型,并對模型實現中的體系結構、消息處理機制、插件間的交互和動態配置的一致性等關鍵技術進行了深入剖析,最后結合大型GIS 平臺——MAPGIS7. 0給出了應用實例,驗證了此動態配置模型的可行性。
關鍵詞:動態配置; 插件; GIS應用框架
中圖分類號:TP311 文獻標志碼: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
在軟件項目開發這樣一個充滿變化的知識應用領域,面對應用需求的多元化、軟件項目的大型化,使不同開發團隊的開發管理復雜性增加,從而導致了軟件開發成本提高等問題。從軟件工程的角度出發,在設計層面人們希望通過一些軟件構架的改進達到以下目的[1]:a)提高軟件復用性;b)增強模塊化和封裝性; c)不同功能模塊的無縫集成;d)靈活的可擴展性; e)面向不同應用層面的領域性和易移植性。目前GIS應用領域正面臨著一個從行業級、專業化應用到大眾化應用轉變的過程。 隨著GIS 大眾化應用的不斷深入,GIS 軟件系統必須充分考慮適應各種各樣不斷衍生的應用需求的難題?;趥鹘y軟件構架體系的GIS 軟件系統雖然具有模塊分工明確、平臺結構緊湊等優點,但TB 級的GIS 數據管理、多元化的數據來源、不斷外延的GIS功能等發展趨勢對GIS 平臺提出了新的要求和挑戰。因此對于GIS 平臺來說,提供一個具有良好復用性和靈活可擴展性的,同時對GIS 項目實施所面對的特定知識應用領域具有很好支持的軟件框架是一件非常有意義的事情[1],而采用“平臺+ 插件”的軟件構架將是解決上述問題的核心。
1 GIS軟件動態配置模型
“插件”這個詞最早來源于硬件技術,20世紀60年代計算機硬件模塊化,模塊化的硬件插入計算機的設備框架中(如聲卡插入主板),這些硬件稱為插件[2]。后來這一理念被引入到軟件開發中。插件技術從本質上講是一種軟件集成技術[3]。“平臺+ 插件”模型的主要思想是將擴展功能以插件的形式通過平臺統一地管理起來,在平臺內部提供平臺與插件之間以及不同插件之間完備的消息機制(包括系統消息轉發、框架內部自定義消息),對不同擴展功能進行分類并定義標準接口,從而把不同的功能插件有機地集成到一起,有效地協同工作。通常軟件配置包括靜態和動態兩種[4]。靜態配置也可以視為系統的軟件組成,組成軟件的構造塊(building blocks)同時加載到處理器中,即軟件的所有組成部分同時配置,需要修改時首先中斷系統運行,然后重新編輯、編譯配置內容,最后重新建立軟件系統。再配置時要對初始配置進行修改[5]。所謂動態配置指的是運行時修改軟件,它允許在線接受新配置時只牽涉到受影響的部分而無須重新編譯整個系統。動態配置分為兩類:a)設計軟件時預先定義軟件的更改,并由系統跟蹤何時滿足更改軟件的條件,這類動態配置稱為可編程的(programmed,也被稱為可預期的);b)Ad hoc(也被稱為隨機的),動態變化是不可預測的,系統運行時由用戶在一個未知的時刻進行動態配置[6]。動態配置對于需要不中斷運行而修改或升級的大型軟件系統(如大型GIS平臺系統)非常重要,因為中斷軟件系統的運行既不經濟又不實用。借鑒文獻[7]中對反射式動態配置模型的定義,現定義GIS的軟件動態配置模型如下。
定義1 GIS軟件動態配置系統 GDCS(GIS dynamic configuration system)是一個三元組:GDCS=〈PC, PP, MP〉。其中:PC (plugin control)是插件控制系統,負責插件添加、卸載的管理,動態檢測系統中各個插件狀態,并為實現動態配置功能對基礎平臺進行一定的擴展;PP(plugin persistence)是插件持久化機制,負責插件狀態的持久化機制,負責GIS基礎平臺以及插件的狀態物理保存;MP(message protocol)是消息處理協議,負責定義插件與GIS基礎平臺、插件與插件的消息,以及消息傳遞方式、參數傳遞方式等。
定義2 插件控制系統PC是一個三元組:PC=〈DC, GP, TA〉。其中:DC(dynamic control )動態配置器,負責對基礎GIS平臺進行擴展,負責插件的動態加載和刪除等配置;GP(GIS platform)GIS基礎平臺,是各個插件的宿主程序,提供各個插件調用的接口,并提供了對底層空間數據操作的基礎接口;TA(target application)目標應用系統,是插件對GP功能擴展的結果,是最終用戶使用的各個應用系統。
定義3 插件持久化機制PP是一個二元組:PP=〈SD, BD〉。其中:SD (state data)狀態數據,負責記錄各個插件以及基礎平臺的配置狀態信息,從而使得目標應用系統能夠監測插件的配置狀態;BD(behavior data)行為數據,負責記錄目標應用系統的動態行為數據,使GIS基礎平臺可以對目標應用系統以及插件使用的資源進行動態優化,以提高目標應用系統運行性能。
定義4 消息處理協議機制MP是一個四元組:MP=〈SMP, UMP, PMP, PCP〉。其中:SMP (system message protocol)系統消息協議,負責對操作系統的消息進行截獲并進行轉發;UMP (user message protocol)用戶自定義消息協議,負責用戶自定義消息在GIS基礎平臺與插件以及插件與插件之間傳遞;PMP (plugin message protocol)負責插件之間的功能函數接口的定義;PCP(plugin control protocol)插件一致性維護協議,負責對插件狀態一致性進行維護。根據上述模型的定義,建立的模型如圖1所示。
2 GIS軟件動態配置模型實現的關鍵技術
2.1 插件控制
GIS插件控制接口層由應用框架管理接口(IGISAppFrame)、文檔管理接口(IGISDocument)、地圖圖層管理接口(IMap)、窗口管理接口(IMapView)和插件管理器接口(IExtension)等主要對象接口組成。
IGISAppFrame 對象接口用來管理整個應用框架的各個模塊,通過該對象插件可以取得框架中的其他元素或對象接口。調用者無須創建該對象,由系統來維護該對象的生存期和場景。 該接口封裝了應用框架窗口句柄、GIS 文檔接口( IGISDocument),并提供了相應的方法來操縱這些對象。
IGISDocument 對象接口的主要功能是進行插件與地理數據庫之間的數據交流。該對象接口管理著IMapView(視圖顯示接口)、IMap(地圖數據接口)、IGeometryPackage(地理數據包接口)等接口。通過此接口插件可以取得地圖文檔、圖層和要素類等相關信息。IMapView 對象接口主要控制視窗的顯示,包括接口的坐標投影,它提供了包括屏幕顯示、屏幕和數據坐標系之間的轉換等功能。
IMap 對象接口的主要功能是管理地圖圖層,通過該接口可以獲得加載的圖層數據。MapView 提供了顯示、更新等操縱數據的方法。該類響應操作系統具有關于窗口視圖的消息,對地圖視圖窗口進行繪制、地圖數據顯示等功能。
IExtension 接口定義了插件的分類標準、插件的加載/卸載。插件通過支持此分類標準,系統可以自動對開發的插件進行識別和分類。插件的加載/卸載模塊則負責對插件的加載或卸載的管理。各個對象模塊之間的關系如圖2所示。
2.2 消息協議機制
插件技術的應用,使GIS 軟件動態配置模型具備了完備的消息機制,可以滿足平臺與插件、插件與插件之間的消息傳遞需求。其主要的消息機制可以分為兩種類型:
a)操作系統消息轉發機制。通過這種消息轉發機制,可以實現工具插件對操作系統視圖插件的交互控制,滿足諸如地圖編輯(如添加節點、刪除節點、刪除線等)對視圖直接進行手動交互的需求。其主要設計思想是在GIS基礎平臺框架中對操作系統的消息進行截取,通過自定義的消息管道(messagepipe)傳入相應的工具組(grouptool)和工具(tool)中。顯示視窗的消息訂閱機制,可以滿足某些沒有按照標準插件接口制作的工具或者某些特殊工具插件需要在非工作狀態持續監控視圖交互的需求。截獲操作系統的消息流程圖如圖3所示。
b) 框架內部平臺和插件的自定義消息傳遞機制。插件之間的消息分三種:全局廣播、局部廣播和單播。它們都是把目的端口作為消息的目標。在基于COM 的插件技術中,目的端口是用COM 的接口作為區分端口的標志。消息的目的端要接收相應的消息需要實現相應的COM 接口。消息的源端同樣有定制的能力,當消息的目的為IUnknown 接口時,消息便成為廣播消息,而針對特定接口的消息即為單播消息。 把平臺和插件內部自定義的消息獨立開來,一方面可以避免與操作系統的消息機制和自定義消息發生沖突,另一方面也可以很靈活地實現框架自定義消息廣播和點對點自定義消息傳遞,如圖4所示。
2.3 持久化機制
永久狀態是那些插件的包容器在摧毀對象之前需要保存的數據(一般是屬性和實例變量,如圖層插件對象CMapLayer中的圖層名稱、圖層狀態、圖層索引、圖層的最大最小比例等)。為了保存插件對象的狀態,插件對象的包容器需實現多個永久接口,這樣插件對象的包容器把保存的狀態提供給對象,插件對象就能夠把自己初始化到以前的狀態。在具體的實現過程中,GIS基礎平臺實現了IStorage、IStream等接口,插件只需要實現IPersistStream和IPersistStorage即可。因插件中永久化接口的實現比較簡單,現分析GIS基礎平臺永久化接口實現的關鍵技術,GIS基礎平臺永久化接口的實現使用了復合文檔來存儲系統中使用的各個插件的狀態信息:復合文檔的創建使用函數StgCreateDocfile,打開復合文檔使用StgOpenStorage,復合文檔的關閉通過釋放根節點的IStorage達到關閉的目的,根節點的IStorage的釋放并不代表整個復合文檔的關閉,整個復合文檔的關閉通常指所有的Storage和Stream都關閉的情況。復合文檔提供四種訪問模式,分別是:
獨占模式 STGM_SHARE_EXCLUSIVE
共享拒絕寫模式 STGM_SHARE_DENY_WRITE
共享拒絕讀模式 STGM_SHARE_DENY_READ
完全共享模式 STGM_SHARE_DENY_NONE
在STGM_TRANSACTED模式下,若IStorage沒有提交(Commit),它下面的所有改動將不會保存;若提交了,其下面所有的改動將被保存。對于Commit和Revert操作來說,使用Revert將可以返回到最后一次Commit之前的情況,包括創建IStorage或IStream的操作。
在對插件進行永久化管理之后,GIS平臺插件框架界面層接口就可以對窗口、視圖、工具條等用戶界面進行管理,創建和定制能夠滿足不同用戶的界面元素。其主要接口有:
a)GISUI, 由GISUI 出發可創建或獲取界面的主要對象;
b)GISToolSpace為插件、工具提供工具箱的支持;
c)GISToolBars為插件提供工具條支持;
d) 插件的工具箱ToolBox 創建起來以后,便可以在其中創建GISToolPage和GISMenuBar;
e) GISToolPage、GISMenuBar 中可以插入、刪除和修改任何有GISButton派生的任何工具項。
各個界面層接口對象關系圖如圖5所示。
3 開發實例
插件主要表現為GIS框架下的視圖和工具。它包含諸如通用編輯和編輯擴展等。用戶可根據實際的使用需要選擇相應的功能插件加載,用戶定制自己的插件需要實現框架定義的功能模塊插件接口。該接口提供的方法將用戶的菜單、工具箱、視窗等方法加載到GIS框架上,插件接口還定義了消息響應方法,用戶實現該消息響應方法就可以實現自己的功能模塊。以下將結合一個具體的工具插件開發的例子來對本文分析的關鍵技術進行說明。
a)插件資源的編輯。在VC++6.0或VS2005中對插件所需要的資源(如工具條資源、位圖資源等)進行編輯,編輯過程與通常MFC下開發過程類似,這里不再詳述。
b)示例插件需要實現IMPITool接口。該接口定義了一系列的工具插件的規則,示例插件實現這接口就可以被GIS基礎平臺調用,從而實現與GIS基礎平臺的交互。部分接口如下:
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接口函數中,傳入的是GIS平臺應用框架的應用接口指針,通過該指針,插件將該接口指針緩存,就可以調用GIS平臺應用框架提供的函數功能了。例如獲得文檔接口、獲得地圖接口IMap, 通過IMap就可以獲得各個圖層數據,從而對圖層的空間數據進行各種操作。
在OnLMouseDown、OnLMouseUp等函數接口中,實現對插件操作的視圖傳過來的鼠標按下、彈起等消息進行處理,從而實現對視圖的編輯交互。如果不對這些函數接口進行處理,則可以在函數體中直接返回S_OK即可。
在完成了插件接口的實現之后,直接編譯、連接,對插件進行COM注冊,編寫的插件就加在了在GIS基礎平臺框架的插件管理器中,如圖6所示。
4 結束語
本模型已成功運用到大型GIS (MAPGIS7. 0)?!捌脚_+ 插件”的軟件框架不是對原來的軟件構架技術的拋棄,相反在很大程度上可以看做是對原有框架構建技術的演化和升級。本文剖析了在該模型實現過程中的關鍵技術,并用實例對這些關鍵技術進行了解釋說明。在易實現性、安全性等方面進一步完善該模型是今后研究工作的重點。
參考文獻:
[1]吳亮,楊凌云,尹艷斌.基于插件技術的GIS應用框架的研究與實現[J].地球科學,2006,31(5):585-588.
[2]姜昌華. 插件技術及其應用[J]. 計算機應用與軟件,2003,20(10):10-11,67.
[3]竇蕾.面向構件的復雜軟件系統中動態配置技術的研究[D]. 長沙:國防科學技術大學, 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]曹旻. 基于組件的分布式軟件動態配置模型的研究[D].上海:上海大學, 2005.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文