田建偉,黎曦,劉瀟瀟,漆文輝
(國網湖南省電力公司電力科學研究院,湖南長沙410007)
隨著信息系統開發技術的快速發展,尤其是J2EE等主流框架和Ext等富客戶端技術的日益成熟〔1〕,如何利用先進的信息化手段提升企業業務系統的用戶體驗成為備受關注的問題。電力生產信息系統作為電力企業工作任務和業務數據的管理平臺,其數據源種類多,數據量龐大,數據結構多樣化。要做到業務的快速處理和數據的有效管理,對系統的體系結構和用戶交互界面都提出了很高的要求,傳統的基于數據和展示的2層體系結構已經不能滿足現代電力企業生產信息系統的需要〔2〕。
結合國網湖南省電力公司電力科學研究院生產信息系統建設的實際,在基于 Struts,Spring和Hibernate開源J2EE框架的基礎上,充分利用Ext富客戶端技術〔3〕,構建一個高效復用的電力生產系信息系統。該系統以技術監督工作為導向,以智能化工作流為目標,實現生產信息的及時發布;實現各項年度計劃的填寫、審批、與生產動態的在線聯動以及計劃偏差考核;實現各類重點、創新項目等的填報、審批及在線管理;科研項目的在線管理;實現貫標體系以及人資培訓在線管理;技術報告和技術監督文檔的在線管理;實現大修技改及物資采購的在線管理;實現員工生產活動的績效統計考核。本系統操作簡便快捷,操作提示到位。各項工作信息豐富,統計查詢功能完善,工作量化數據表展示全面,趨勢變化圖表準確美觀。
J2EE(Java 2 Platform,Enterprise Edition)是SUN公司定義的一組開發企業級應用的技術規范與指南,其中所包含的各類組件、服務架構及技術層次。目前在J2EE框架的基礎上已開發出了很多開源的框架,基于這些成熟框架開發應用系統可大大減輕開發人員的負擔。考慮到電力企業生產信息系統的用戶多、數據量大、分布點寬、數據結構各異,以及存在個性化需求等特點,在構建系統時,用戶的請求處理、頁面的表現形式、業務的邏輯處理以及數據的持久化都是必須考慮到的因數。基于此,選擇使用最為廣泛框架的 Struts+Sping+Hibernate的J2EE框架作為開發平臺,構建一個具有可擴展性和健壯性的電力生產信息系統,同時與Ext框架結合,滿足用戶個性化操作需求,提高界面使用體驗。
SSH是Struts+Spring+Hibernate的一個集成框架,從邏輯上分為表示層、業務邏輯層、數據持久層,如圖1所示。其中表示層中的Struts作為系統的整體基礎架構,提供模型-視圖-控制器框架(Model-View-Control,MVC),控制業務的跳轉,可將程序的輸入、處理和輸出分開,有利于模塊化的開發。業務層中的Spring是一個為了解決企業級應用開發的復雜性而創建的應用框架。Spring框架中使用最為廣泛的功能是其反轉機制,通過該機制將創建對象的任務用容器來實現,即在運行期間將對象的依賴關系注入到組件之中,使得應用代碼可直接使用實例。通過控制反轉機制可降低組件之間的耦合性,有利于代碼的開發和測試。持久層中的Hibernate是一種對象持久層輕量級封裝框架,它對JDBC進行了非常輕量級的對象封裝,將數據庫表通過配置文件映射成對象。程序開發人員可以使用面向對象的思想來操作數據庫資源,可以不關心數據庫的具體結構和邏輯,完全使用面向對象的方法來建立應用開發的數據庫模型。

圖1 基于SSH的Web系統開發框架
集成SSH框架的方法是將Struts架構作為系統的整體基礎架構,負責MVC的分離,控制業務跳轉。而在MVC的模型部分則利用Hibernate框架提供持久層支持,業務層用 Spring做管理,管理Struts和Hibernate。具體集成方法是:根據業務需求,使用面向對象的分析方法提出業務模型,將模型實現為基本的Java對象,然后利用Hibernate編寫每個Java類對應的DAO接口和DAO實現,通過Hibernate的DAO類來實現Java類與數據庫表之間的轉換和訪問,最后由Spring管理struts和hibernate。
Ext是一個開源的Javascript富客戶端應用程序框架,提供可定制用戶界面的控件,擁有可擴展的組件模型。Ext同時包含應用程序接口,交換格式采用靈活的JSON和XML,可大量減輕服務端的負擔。
Ext作為客戶端技術在程序開發過程中主要使用到 application,controller,viewport,view,store,model和data七大類,其邏輯關系如圖2所示。

圖2 Ext類邏輯關系圖
Application是應用程序模塊的入口,用來告訴Ext到哪里去找對應Controller與View等Javascript文件。Controller是用來處理業務邏輯的類,即View上的所觸發事件和操作都可在Controller中實現,同時它也將對應的View,Store以及Model關聯起來。Model和Store是模型數據類,主要是給View類提供數據,其中Model與Hibernate框架中的java對象相對應,定義界面的數據模型;Store用于緩存從Struts返回的界面數據。View主要負責頁面展示,包含Grid,Form和Panel等各種UI組件。
在電力生產信息系統中使用JSON機制,即客戶端接收來自服務器端的數據的格式要求是JSON格式。實現JSON數據緩存機制,首先需要定義客戶端數據對象,即客戶端Model對象的定義需要與服務器端的Hibernate數據對象一一對應。其次建立數據解析器,其作用就是從JSON數據中解析出其中的數據對象實例。最后建立數據存儲器Store對象,存儲解析生成的數據對象。當用戶發出數據請求時,客戶端首先查詢本地Store,如果Store中有對應的數據,則直接從Store中取得數據,否則就發起與服務器端的數據請求,從服務器端取得對應的數據。
Ext+SSH集成架構保留了Spring+Hibemate的組合,從表示層、控制層和業務邏輯層入手,使用Ext實現Struts框架中的頁面表示和頁面跳轉,架構整合的基本原理如圖3所示。

圖3 Ext+SSH集成架構基本原理
在表現層Ext提供Form,Panel,Grid等各種UI組件,提高程序員的開發效率。Ext還負責管理界面上的各種操作事件,同時做出相應的響應,實現用戶業務邏輯的控制。Ext將表現層數據封裝為JSON數據格式,以Ajax的方式發送給業務層,并將返回的JSON數據解析后顯示給用戶。
在業務層Spring提供業務的邏輯處理,在表現層和持久層之間起到承上啟下的作用,將界面的負責邏輯和數據通過各種處理方法整合為持久層能夠接受的單一邏輯。同時Spring提供的注入機制可實現邏輯對象的自動關聯,減輕程序員的代碼負擔,提高應用程序的模塊化程度。
在數據持久層Hibernate實現數據庫表到java類的映射,提供模塊化的數據操作方法,簡化數據庫事務管理。
如圖4所示,電力生產信息系統包括生產計劃、生產動態、科研培訓、項目管理、大修技改、技術監督、技術報告、業績考核、設備采購、設備采購、質量體系管理、綜合管理、通知發布、短信業務和系統配置15個功能模塊。系統的業務從生產計劃發起,經過生產動態轉化為生產項目,并在項目的實施過程中編制技術報告和技術監督文檔,經過大修技改和物資采購模塊管理生產項目所需要購置的設備和材料,同時系統可實現對科研項目和教育培訓工作的在線管理。通過對生產項目和科研項目的在線管理,可自動生成部門和個人的工作總結,最終可實現對部門和個人業績的考核。

圖4 電力生產信息系統功能結構
Spring提供了對Sessionfactory的初始化,用戶不再關心Session的關閉和打開等操作。該集成配置需修改applicationContext.xml如下:

通過將 Hibernate整合入 Spring,輕松實現Hibernate的Session所提供的任何方法,并可大幅減少維護Session所需要的代碼工作。同時,將數據源中的表全部映射為hibernate中的模型,對表的操作全部交由hibernate對模型中對象的操作。
Struts要和Spring集成就必須能夠訪問Spring的上下文,Struts作為Web系統的框架,要保證系統在啟動前裝載了Spring的上下文。裝載Spring上下文需在web.xml文件作以下配置:

下面通過使用基于Ext和SSH開發架構來實現一個生產任務發布功能,以說明該架構的使用。
1)用戶填寫好生產任務表單信息后,通過“發布”按鈕發出Ajax異步請求,使用Ext框架中的Ext.Ajax.request全局方法將表單數據轉化JSON數據并發送到服務器。
2)服務器通過Struts配置文件struts.xml中定義路徑尋找處理該請求的類和方法。

3)通過Spring的注入機制@Controller("kjfzbScrwAction")找到處理kjfzbScrwAction類和pubOrEditKjfzbScrw方法。在 kjfzbScrwAction類中表單數據以Hibernate實體對象的形式存放。
4)并通過@Resource(name="kjfzbScrw Service")注入邏輯處理層并自動需找邏輯處理方法,在該方法中可實現對數據的轉化、計算等復雜的邏輯處理。
5)最后通過注入@Resource(name="kjfzbScrwDAO")找到數據保存方法,將表單數據保存到數據庫中。
從以上的實例分析可以看出,通過基于Ext和SSH架構設計開發的電力生產信息系統層次分明,而且代碼比較簡潔。
文中將基于Ext+SSH的Web系統開發架構運用到電力生產信息系統開發中,簡化了開發人員的代碼量和開發難度,并且使得頁面開發和Java后臺程序達到有效分離,提高了系統的擴展新,降低了維護成本。基于該框架電力生產信息系統代碼部署成本低,后期易于升級和維護。
〔1〕肖劍鋒,雷升印.基于Struts與Hibernate的MIS開發〔J〕.微計算機信息,2006(22):22-24.
〔2〕潘明惠.電力信息化工程的理論與應用研究〔J〕.中國電機工程學報,2005(15):96-99.
〔3〕張功彬.基于ExtJs的富客戶端MIS設計與開發〔D〕.中國海洋大學,2011.
〔4〕高秀慧,高建華.基于 J2EE框架的 Web應用可靠性研究〔J〕.計算機工程與設計,2013(4):1 270-1 275.
〔5〕鄧偉成,范軼翔,夏翔,等.ExtJs框架下Grid組件的擴展及應用〔J〕.計算機應用,2012,32(A01):80-82.