摘要:該文介紹了當前流行的開源框架Struts和Hibernate技術,提出了基于Struts和Hibernate的圍墾工程建設管理信息系統的數據庫設計方案,詳細探討了數據訪問層實現的技術。
關鍵詞:開源框架;數據持久層;Struts;Hibernate
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)22-612-03
Design and Application of WebGIS Database Based on Open-source Framework
ZHOU Xiao-li1, HU Hai-qing1, HU Ming-hua2
(1.Zhejiang Tongji Vocational-technical Institute, Hangzhou 311231, China; 2.Zhejiang Polder Bureau, Hangzhou 310014, China)
Abstract: the paper introduces the popular open sourceframeworkStruts and Hibernate, and put forward the database design plan of Reclamation construction management information system which is based on Struts and Hibernate. Moreover, it carries on a detailed exploration about the technology how to realize DataAccess Layer (DAL).
Key words: open-source framework; data persistence layer; Struts; Hibernate
1 引言
WebGIS是Internet技術應用于地理信息系統(GIS)的產物[1]。GIS通過www功能得以擴展,真正成為一種大眾使用的工具[2],從WWW的任意一個節點,Internet用戶可以瀏覽WebGIS站點中的空間數據、制作專題圖,以及進行各種空間檢索和空間分析。WebGIS不僅開拓了地理信息資源利用的新領域,而且為GIS信息的高度社會化共享提供了可能[3]。
但是,WebGIS的廣泛應用和深入發展,也給WebGIS數據庫帶來了數據量激增的問題;而且,傳統GIS中空間數據與屬性數據是分別存儲的,即空間數據(圖形數據)以文件格式存放,非空間數據(屬性數據)則存放在關系數據庫中,形成文件+關系數據庫的二元存儲模式。這樣的存儲方式在數據安全和數據共享方面都存在著不少缺陷。
另外,WebGIS應用系統要頻繁訪問數據庫,連接數據庫需要用戶驗證,使用以后又要確保它們被正確關閉,以防內存泄露,因此連接數據庫是一種耗時的操作,對數據庫的高效訪問成為WebGIS應用的關鍵所在。因此,怎樣有效地存儲、管理海量數據,已經成為GIS所面臨的最緊迫的問題之一。
2 Struts和Hibernate框架
2.1 Struts框架
基于MVC模式的Struts框架就是一種在JSP Model2的基礎之上把Java,Servlet,JS P、自定義標簽(TagLib),Java Beans,XML和信息資源(ResourceBundies)整合到一個統一的框架中,它們組成了一個可復用的MVC設計[4]。下面就分別從模型、視圖、控制器等方面來看看struts的體系結構。Struts的體系結構如圖1所示。
1)模型(Model)
定義了應用程序的數據和業務功能,具體表現為JavaBeans或EJB,包括對數據庫、EntityBean等數據源的操作及數據管理接口。Struts為模型部分提供了Action和ActionForm對象。Action處理器對象封裝了具體的處理邏輯,調用業務邏輯模塊,并且把響應提交到合適的視圖組件以產生響應。ActionForm組件對象可以通過定義屬性描述客戶端表單數據。
2)視圖(View)
應用程序的用戶界面,通過一個模板,對不同的視圖格式化顯示,具體表現為一個具體的JSP頁面。它是由與控制器Servlct配合工作的一整套JSP定制標簽庫構成,通過這些自定義標記可以很好地和系統的模型部分交互,通過使用這些自定義標記創建的JSP表單,可以實現和模型部分中的ActionForm的映射,完成對用戶數據的封裝,同時這些自定義標記還提供了像模板定制等多種顯示功能。
3)控制器(Controller)
定義了應用程序如何對用戶的輸入或模型層的變化作出相應的反應,模型和視圖之間不存在任何關系,是控制器充當了兩者之間的連接和中轉。
Struts中的Controller主要是它自身提供的ActionServlet,而ActionServlet的核心就是struts-config.xml配置文件,它包含了所有頁面導航的定義。
4)Struts的配置文件Struts-config.xml
一個用戶請求是通過ActionServlet來處理和轉發的。那么,ActionServlet如何決定把用戶請求轉發給哪個Actoin對象呢?這就需要一些描述用戶請求路徑和Action映射關系的配置信息了。在Struts中,這些配置映射信息都存在特定的XML文件struts-config.xml中。在該配置文件中,每一個Action的映射信息都通過一個
2.2 Hibernate框架
Hibernate是一種實現對象和關系之間映射(Object Relation Mapping)的框架。它不僅僅管理Java類到數據庫表的映射,還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人們使用SQL和JDBC處理數據的時間,而只用對對象進行操作。它對JDBC進行了輕量級的對象封裝,使得Java程序員可以使用面向對象編程思維來操作關系數據庫[6]。
Hibernate的工作過程依賴于SQL語言和JDBC編程接口,但Hibernate將原本分散的JDBC和SQL配合產生的編程接口編成為對象化的數據接口,把關系型數據庫的數據轉化成了面向對象技術體系中的持久化對象。在和數據庫聯系方面,仍然使用連接池技術,在數據操作過程中,借助事務服務來保證可靠性,通過數據緩沖技術來提高查詢效率、改善性能,利用映射文件設置處理過程中的各種細節以提高性能。另外,Hibernate自定義的HQL語言提供了比SQL更接近面向對象系統的查詢方案。
從GIS設計角度看,可以認為Hibernate是Java應用程序與對象/關系型數據庫的中間件。在這種模式下,Hibernate封裝了底層的細節,而向上層應用提供了Session、SessionFactory、Transaction等接口。
3 基于Struts的WebGIS數據庫設計
數據庫設計是信息系統建設的關鍵。根據圍墾工程建設項目管理系統要求,該系統在數據庫設計上分為空間數據庫和業務數據庫兩大類。
在多數應用系統中,數據庫訪問的性能往往對整個應用系統的性能起決定作用。程序邏輯并不特別復雜的情況下,性能好壞則取決于是否建立合理的數據庫資源管理調度機制。
3.1 總體架構設計
本系統采用基于J2EE的MVC模式Struts+Hibemate架構進行設計,實現表示層、業務邏輯層、數據訪問層、數據層的多層架構模型。系統總體架構見如圖2所示。
顯示層采用JSP實現動態顯示;業務邏輯層由ArcIMS和 EJB來實現,包括供Action組件調用的接口,控制由ActionServlet類的實例控制;數據訪問層由若干設計模式結合Hibemate框架來實現,Hibemate通過映射文件與關系型數據庫進行交互。
3.2 空間數據的組織管理選擇
對象關系型數據庫是目前數據庫發展的主流技術,它結合了關系數據庫和面向對象數據庫的優點,能夠直接支持對復雜對象的存儲和管理。采用對象關系型數據庫實現對GIS數據的管理是實現空間數據庫的一種較為理想的方式,也是目前GIs領域研究的熱門課題。
3.3 對象關系型數據庫和Oracle Spatial空間數據庫
對象關系數據庫實際上是關系數據庫(RDB)和面向對象的數據庫(OODB)這兩種方案的一種折衷方案,或者說是關系數據庫和面向對象的數據庫技術不斷融合的結果。隨著面向對象技術和對象關系數據庫技術的發展,數據庫的數據表達能力大大增強。當前流行的數據庫系統如Oracle、DB2、IBM Informix等都提供支持定義對象操作的機制,使利用數據庫同時存儲和管理地理實體的屬性數據和空間數據成為可能。本系統采用Oracle Spatial空間數據庫,實現數據的存儲。
3.4 空間數據庫設計
本系統中空間數據庫有三大類:一類是基礎地理數據,作為背景顯示信息,主要內容包括行政區邊界、城市、居民點、河流、湖泊、水庫、公路、鐵路等,為灘涂資源專題數據的地圖顯示和分析提供輔助信息,采用我省現有的1:25 萬系統數據的基礎電子地圖;第二類是灘涂資源專題圖層,這類包括灘涂監測站點分布圖、灘涂資源功能區劃圖、灘涂成就圖、灘涂現狀圖以及對圍墾造地區的區位圖、工位圖、氣象水文站網示意圖、開發規劃圖、總布置圖等;第三類是圖像數據,包含數字高程模型DEM、數字正射影像DOM 等。
3.5 屬性數據庫設計
屬性數據庫是指對存放地理信息圖層中各種空間對象的信息描述及其他的相關數據。屬性數據庫的設計主要是數據庫表結構的設計,其內容涉及灘涂信息的方方面面。如:概況、經濟、技術參數、前期工作進展等。
4 數據訪問層的實現
4.1 數據持久層
基于Hibemate框架構建的數據持久層需要創建數據訪問對象(DAO)、值對象(VO)和Hibernate Mappings映射文件。其中每個VO封裝了持久層對象的數據,對應于數據庫的一張表,由一些屬性及對應的geter/seter方法組成;DAO用于持久化VO,每個DAO類均定義了查詢、插人、更新、刪除等數據庫操作的基本方法;各種映射文件告訴Hibemate怎樣把對象持久化到關系數據庫中。
1)數據訪問對象(DAO)模式的實現
本系統的實現過程中為每個持久化類創建一個DAO(包括DAO接口和DAO接口的實現類)。DAO接口中聲明與持久化類相關的業務邏輯方法;在相應的DAO實現類中,封裝了Hibemate數據操縱、事務處理等API來實現DAO接口中所定義的方法。
2)HibemateFilter的實現
由于Hibemate對持久化對象采用了延遲加載的實現原理,即在使用過程中用到了哪個相關聯的持久化對象,才獲取那個對象的信息。由于Session代表一個與數據庫的連接,如果在執行DAO操作后關閉了Session,那么后面需要讀取其它相關對象時,就會發生錯誤。為了在適當的時候關閉Session,可以通過Filter來解決這個問題。
Filter的生命周期貫穿了其所覆蓋的Servlet及其底層對象。Filter在Servlet被調用之前執行,在Servlet調用結束之后結束。利用Servlet管理Session的實現原理是將一個用戶請求中所做的所有持久化操作看作一個事務,整個用戶請求都是在一個Session中完成。在響應用戶請求之前會自動開始一個Session和事務。在處理完用戶的請求直到頁面輸出完畢后才提交當前的事務和關閉用戶Session。
3)抽象工廠模式的實現
數據持久化層是通過DAO工廠向上層調用者提供創建具體DAO對象的服務。在DAO抽象工廠類(DAOFactory)中,定義創建某一具體類型數據源的工廠對象的靜態方法以及一些創建具體DAO對象的抽象方法。這些抽象方法是所有繼承該抽象工廠的具體工廠所必須實現的。
4.2Hibernate的配置文件與連接池
Hibernate描述文件可以是properties或xml文件,其中最重要的是定義數據庫的連接,我們采用hibernate.cfg.xml描述文件。由于我們在應用程序中使用到了連接池技術,而hibernate自帶的連接池是非常簡單的,我們采用Tomcat的Datasource容量相關的數據源。所有數據庫操作都通過Tomcat進行管理,通過在Tomcat服務器中維護一個緩沖連接池,當用戶需要訪問數據庫時,利用JNDI技術從緩沖區中獲得一個連接,再由Hibernate統一處理。
5 結束語
以Struts和Hibemate等優秀的應用框架為基礎,結合JSP技術和MVC2設計思想,給出了圍墾工程項目建設管理系統的數據庫設計方案,基于此方案開發簡潔、結構清晰,有很好的可擴展性和可維護性,非常適于面向對象的設計與開發,從而提高了軟件開發效率,增強系統的可維護性和可移植性[7]。
參考文獻:
[1] 段洪濤,張樹清,張柏,等.基于WebGIS的中國濕地信息系統研究濕地科學[J].2004(12):279-284.
[2] 朱江,宋關福,鐘耳順,等.基于Webservices和NET技術的新一代WebGIs研究與開發[J].地理信息世界,2004(4):17-20.
[3] 徐中宇,徐煙群.WcbGIS中間件的研究與開發[J].哈爾濱商業大學學報:自然科學版,2004(4):141-142.
[4] 孫衛琴.精通Struts基于MVC的Web設計與開發[M].北京:電子工業出版社,2004.
[5] GEARY DM.JSP高級開發與應用[M].北京:科學出版社,2002:120-161.
[6] 高昂.基于Hibernate與Struts框架的數據持久化應用研究[J].計算機應用,2005,25(12):2817-2817.
[7] 遲金成.基于JavaBean和Hibernate數據庫應用的構建[J].科學技術與工程,2007(7):1475-1477.