田建偉,黎曦,劉瀟瀟,漆文輝
(國網(wǎng)湖南省電力公司電力科學研究院,湖南長沙410007)
隨著信息系統(tǒng)開發(fā)技術的快速發(fā)展,尤其是J2EE等主流框架和Ext等富客戶端技術的日益成熟〔1〕,如何利用先進的信息化手段提升企業(yè)業(yè)務系統(tǒng)的用戶體驗成為備受關注的問題。電力生產(chǎn)信息系統(tǒng)作為電力企業(yè)工作任務和業(yè)務數(shù)據(jù)的管理平臺,其數(shù)據(jù)源種類多,數(shù)據(jù)量龐大,數(shù)據(jù)結(jié)構(gòu)多樣化。要做到業(yè)務的快速處理和數(shù)據(jù)的有效管理,對系統(tǒng)的體系結(jié)構(gòu)和用戶交互界面都提出了很高的要求,傳統(tǒng)的基于數(shù)據(jù)和展示的2層體系結(jié)構(gòu)已經(jīng)不能滿足現(xiàn)代電力企業(yè)生產(chǎn)信息系統(tǒng)的需要〔2〕。
結(jié)合國網(wǎng)湖南省電力公司電力科學研究院生產(chǎn)信息系統(tǒng)建設的實際,在基于 Struts,Spring和Hibernate開源J2EE框架的基礎上,充分利用Ext富客戶端技術〔3〕,構(gòu)建一個高效復用的電力生產(chǎn)系信息系統(tǒng)。該系統(tǒng)以技術監(jiān)督工作為導向,以智能化工作流為目標,實現(xiàn)生產(chǎn)信息的及時發(fā)布;實現(xiàn)各項年度計劃的填寫、審批、與生產(chǎn)動態(tài)的在線聯(lián)動以及計劃偏差考核;實現(xiàn)各類重點、創(chuàng)新項目等的填報、審批及在線管理;科研項目的在線管理;實現(xiàn)貫標體系以及人資培訓在線管理;技術報告和技術監(jiān)督文檔的在線管理;實現(xiàn)大修技改及物資采購的在線管理;實現(xiàn)員工生產(chǎn)活動的績效統(tǒng)計考核。本系統(tǒng)操作簡便快捷,操作提示到位。各項工作信息豐富,統(tǒng)計查詢功能完善,工作量化數(shù)據(jù)表展示全面,趨勢變化圖表準確美觀。
J2EE(Java 2 Platform,Enterprise Edition)是SUN公司定義的一組開發(fā)企業(yè)級應用的技術規(guī)范與指南,其中所包含的各類組件、服務架構(gòu)及技術層次。目前在J2EE框架的基礎上已開發(fā)出了很多開源的框架,基于這些成熟框架開發(fā)應用系統(tǒng)可大大減輕開發(fā)人員的負擔??紤]到電力企業(yè)生產(chǎn)信息系統(tǒng)的用戶多、數(shù)據(jù)量大、分布點寬、數(shù)據(jù)結(jié)構(gòu)各異,以及存在個性化需求等特點,在構(gòu)建系統(tǒng)時,用戶的請求處理、頁面的表現(xiàn)形式、業(yè)務的邏輯處理以及數(shù)據(jù)的持久化都是必須考慮到的因數(shù)?;诖耍x擇使用最為廣泛框架的 Struts+Sping+Hibernate的J2EE框架作為開發(fā)平臺,構(gòu)建一個具有可擴展性和健壯性的電力生產(chǎn)信息系統(tǒng),同時與Ext框架結(jié)合,滿足用戶個性化操作需求,提高界面使用體驗。
SSH是Struts+Spring+Hibernate的一個集成框架,從邏輯上分為表示層、業(yè)務邏輯層、數(shù)據(jù)持久層,如圖1所示。其中表示層中的Struts作為系統(tǒng)的整體基礎架構(gòu),提供模型-視圖-控制器框架(Model-View-Control,MVC),控制業(yè)務的跳轉(zhuǎn),可將程序的輸入、處理和輸出分開,有利于模塊化的開發(fā)。業(yè)務層中的Spring是一個為了解決企業(yè)級應用開發(fā)的復雜性而創(chuàng)建的應用框架。Spring框架中使用最為廣泛的功能是其反轉(zhuǎn)機制,通過該機制將創(chuàng)建對象的任務用容器來實現(xiàn),即在運行期間將對象的依賴關系注入到組件之中,使得應用代碼可直接使用實例。通過控制反轉(zhuǎn)機制可降低組件之間的耦合性,有利于代碼的開發(fā)和測試。持久層中的Hibernate是一種對象持久層輕量級封裝框架,它對JDBC進行了非常輕量級的對象封裝,將數(shù)據(jù)庫表通過配置文件映射成對象。程序開發(fā)人員可以使用面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫資源,可以不關心數(shù)據(jù)庫的具體結(jié)構(gòu)和邏輯,完全使用面向?qū)ο蟮姆椒▉斫瞄_發(fā)的數(shù)據(jù)庫模型。
圖1 基于SSH的Web系統(tǒng)開發(fā)框架
集成SSH框架的方法是將Struts架構(gòu)作為系統(tǒng)的整體基礎架構(gòu),負責MVC的分離,控制業(yè)務跳轉(zhuǎn)。而在MVC的模型部分則利用Hibernate框架提供持久層支持,業(yè)務層用 Spring做管理,管理Struts和Hibernate。具體集成方法是:根據(jù)業(yè)務需求,使用面向?qū)ο蟮姆治龇椒ㄌ岢鰳I(yè)務模型,將模型實現(xiàn)為基本的Java對象,然后利用Hibernate編寫每個Java類對應的DAO接口和DAO實現(xiàn),通過Hibernate的DAO類來實現(xiàn)Java類與數(shù)據(jù)庫表之間的轉(zhuǎn)換和訪問,最后由Spring管理struts和hibernate。
Ext是一個開源的Javascript富客戶端應用程序框架,提供可定制用戶界面的控件,擁有可擴展的組件模型。Ext同時包含應用程序接口,交換格式采用靈活的JSON和XML,可大量減輕服務端的負擔。
Ext作為客戶端技術在程序開發(fā)過程中主要使用到 application,controller,viewport,view,store,model和data七大類,其邏輯關系如圖2所示。
圖2 Ext類邏輯關系圖
Application是應用程序模塊的入口,用來告訴Ext到哪里去找對應Controller與View等Javascript文件。Controller是用來處理業(yè)務邏輯的類,即View上的所觸發(fā)事件和操作都可在Controller中實現(xiàn),同時它也將對應的View,Store以及Model關聯(lián)起來。Model和Store是模型數(shù)據(jù)類,主要是給View類提供數(shù)據(jù),其中Model與Hibernate框架中的java對象相對應,定義界面的數(shù)據(jù)模型;Store用于緩存從Struts返回的界面數(shù)據(jù)。View主要負責頁面展示,包含Grid,F(xiàn)orm和Panel等各種UI組件。
在電力生產(chǎn)信息系統(tǒng)中使用JSON機制,即客戶端接收來自服務器端的數(shù)據(jù)的格式要求是JSON格式。實現(xiàn)JSON數(shù)據(jù)緩存機制,首先需要定義客戶端數(shù)據(jù)對象,即客戶端Model對象的定義需要與服務器端的Hibernate數(shù)據(jù)對象一一對應。其次建立數(shù)據(jù)解析器,其作用就是從JSON數(shù)據(jù)中解析出其中的數(shù)據(jù)對象實例。最后建立數(shù)據(jù)存儲器Store對象,存儲解析生成的數(shù)據(jù)對象。當用戶發(fā)出數(shù)據(jù)請求時,客戶端首先查詢本地Store,如果Store中有對應的數(shù)據(jù),則直接從Store中取得數(shù)據(jù),否則就發(fā)起與服務器端的數(shù)據(jù)請求,從服務器端取得對應的數(shù)據(jù)。
Ext+SSH集成架構(gòu)保留了Spring+Hibemate的組合,從表示層、控制層和業(yè)務邏輯層入手,使用Ext實現(xiàn)Struts框架中的頁面表示和頁面跳轉(zhuǎn),架構(gòu)整合的基本原理如圖3所示。
圖3 Ext+SSH集成架構(gòu)基本原理
在表現(xiàn)層Ext提供Form,Panel,Grid等各種UI組件,提高程序員的開發(fā)效率。Ext還負責管理界面上的各種操作事件,同時做出相應的響應,實現(xiàn)用戶業(yè)務邏輯的控制。Ext將表現(xiàn)層數(shù)據(jù)封裝為JSON數(shù)據(jù)格式,以Ajax的方式發(fā)送給業(yè)務層,并將返回的JSON數(shù)據(jù)解析后顯示給用戶。
在業(yè)務層Spring提供業(yè)務的邏輯處理,在表現(xiàn)層和持久層之間起到承上啟下的作用,將界面的負責邏輯和數(shù)據(jù)通過各種處理方法整合為持久層能夠接受的單一邏輯。同時Spring提供的注入機制可實現(xiàn)邏輯對象的自動關聯(lián),減輕程序員的代碼負擔,提高應用程序的模塊化程度。
在數(shù)據(jù)持久層Hibernate實現(xiàn)數(shù)據(jù)庫表到java類的映射,提供模塊化的數(shù)據(jù)操作方法,簡化數(shù)據(jù)庫事務管理。
如圖4所示,電力生產(chǎn)信息系統(tǒng)包括生產(chǎn)計劃、生產(chǎn)動態(tài)、科研培訓、項目管理、大修技改、技術監(jiān)督、技術報告、業(yè)績考核、設備采購、設備采購、質(zhì)量體系管理、綜合管理、通知發(fā)布、短信業(yè)務和系統(tǒng)配置15個功能模塊。系統(tǒng)的業(yè)務從生產(chǎn)計劃發(fā)起,經(jīng)過生產(chǎn)動態(tài)轉(zhuǎn)化為生產(chǎn)項目,并在項目的實施過程中編制技術報告和技術監(jiān)督文檔,經(jīng)過大修技改和物資采購模塊管理生產(chǎn)項目所需要購置的設備和材料,同時系統(tǒng)可實現(xiàn)對科研項目和教育培訓工作的在線管理。通過對生產(chǎn)項目和科研項目的在線管理,可自動生成部門和個人的工作總結(jié),最終可實現(xiàn)對部門和個人業(yè)績的考核。
圖4 電力生產(chǎn)信息系統(tǒng)功能結(jié)構(gòu)
Spring提供了對Sessionfactory的初始化,用戶不再關心Session的關閉和打開等操作。該集成配置需修改applicationContext.xml如下:
通過將 Hibernate整合入 Spring,輕松實現(xiàn)Hibernate的Session所提供的任何方法,并可大幅減少維護Session所需要的代碼工作。同時,將數(shù)據(jù)源中的表全部映射為hibernate中的模型,對表的操作全部交由hibernate對模型中對象的操作。
Struts要和Spring集成就必須能夠訪問Spring的上下文,Struts作為Web系統(tǒng)的框架,要保證系統(tǒng)在啟動前裝載了Spring的上下文。裝載Spring上下文需在web.xml文件作以下配置:
下面通過使用基于Ext和SSH開發(fā)架構(gòu)來實現(xiàn)一個生產(chǎn)任務發(fā)布功能,以說明該架構(gòu)的使用。
1)用戶填寫好生產(chǎn)任務表單信息后,通過“發(fā)布”按鈕發(fā)出Ajax異步請求,使用Ext框架中的Ext.Ajax.request全局方法將表單數(shù)據(jù)轉(zhuǎn)化JSON數(shù)據(jù)并發(fā)送到服務器。
2)服務器通過Struts配置文件struts.xml中定義路徑尋找處理該請求的類和方法。
3)通過Spring的注入機制@Controller("kjfzbScrwAction")找到處理kjfzbScrwAction類和pubOrEditKjfzbScrw方法。在 kjfzbScrwAction類中表單數(shù)據(jù)以Hibernate實體對象的形式存放。
4)并通過@Resource(name="kjfzbScrw Service")注入邏輯處理層并自動需找邏輯處理方法,在該方法中可實現(xiàn)對數(shù)據(jù)的轉(zhuǎn)化、計算等復雜的邏輯處理。
5)最后通過注入@Resource(name="kjfzbScrwDAO")找到數(shù)據(jù)保存方法,將表單數(shù)據(jù)保存到數(shù)據(jù)庫中。
從以上的實例分析可以看出,通過基于Ext和SSH架構(gòu)設計開發(fā)的電力生產(chǎn)信息系統(tǒng)層次分明,而且代碼比較簡潔。
文中將基于Ext+SSH的Web系統(tǒng)開發(fā)架構(gòu)運用到電力生產(chǎn)信息系統(tǒng)開發(fā)中,簡化了開發(fā)人員的代碼量和開發(fā)難度,并且使得頁面開發(fā)和Java后臺程序達到有效分離,提高了系統(tǒng)的擴展新,降低了維護成本?;谠摽蚣茈娏ιa(chǎn)信息系統(tǒng)代碼部署成本低,后期易于升級和維護。
〔1〕肖劍鋒,雷升印.基于Struts與Hibernate的MIS開發(fā)〔J〕.微計算機信息,2006(22):22-24.
〔2〕潘明惠.電力信息化工程的理論與應用研究〔J〕.中國電機工程學報,2005(15):96-99.
〔3〕張功彬.基于ExtJs的富客戶端MIS設計與開發(fā)〔D〕.中國海洋大學,2011.
〔4〕高秀慧,高建華.基于 J2EE框架的 Web應用可靠性研究〔J〕.計算機工程與設計,2013(4):1 270-1 275.
〔5〕鄧偉成,范軼翔,夏翔,等.ExtJs框架下Grid組件的擴展及應用〔J〕.計算機應用,2012,32(A01):80-82.