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