摘要:針對(duì)電力系統(tǒng)傳統(tǒng)采用的C/S結(jié)構(gòu)的生產(chǎn)設(shè)備管理系統(tǒng)程序復(fù)雜、資源占用多、安全隱患大、效率低的缺點(diǎn),基于J2EE平臺(tái)提出了一種三層B/S結(jié)構(gòu)的電力計(jì)量設(shè)備管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方法。軟件構(gòu)架上采用了Struts、Hibernate與Ajax三種技術(shù)相結(jié)合,基于J2EE平臺(tái)的軟件結(jié)構(gòu);數(shù)據(jù)庫(kù)采用高效、安全的Oracle大型數(shù)據(jù)庫(kù)。實(shí)現(xiàn)了電力系統(tǒng)內(nèi)部生產(chǎn)組織的網(wǎng)上管理自動(dòng)化,在減輕員工工作負(fù)擔(dān)、提高工作效率及信息交流方面都發(fā)揮了重要的作用。
關(guān)鍵詞:J2EE平臺(tái);Struts框架;Hibernate技術(shù);Ajax技術(shù)
中圖法分類號(hào):TP315 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)36-10462-03
Design of Electric Metering Equipment Management System Based On J2EE Platform
SU Bo-guang, WANG Qing-sheng
(Dept. of Computer and Software, Taiyuan University Of Technology, Taiyuan 030024, China)
Abstract: As to the deficiency of complexity program, resources, occupy more, security risks and low efficiency of traditional C/S structure in electronic system, It is proposed a designing and implementing method of three-tier B/S structural system that is a electric metering equipment management system based on J2EE Platform, It is used software architecture that is three combination technology of Struts, Hibernate and Ajax based on J2EE Platform, high-efficiency and safety Oracle for Database. It brings the web-based management automation of production organization within electric system and plays an important role in reducing the staff workload, improve work efficiency and information exchange.
Key words: J2EE platform; struts framework; hibernate technology; ajax technology
目前國(guó)內(nèi)有關(guān)電力生產(chǎn)管理系統(tǒng)的研究已有文獻(xiàn)報(bào)道,不同研究人員設(shè)計(jì)開發(fā)的體系結(jié)構(gòu)有所不同。1)北京交通大學(xué)的周宇等人基于工作流技術(shù)提出了一種三層B/S結(jié)構(gòu)的電力生產(chǎn)協(xié)同組織管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方法,該系統(tǒng)運(yùn)行于微軟.NET平臺(tái),以SQL Server 2000作為后臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,以ASP.NET組件ADO.NET訪問數(shù)據(jù)庫(kù)[1]。2)面向服務(wù)的體系結(jié)構(gòu)(SOA)是一種松散耦合的應(yīng)用程序體系結(jié)構(gòu),其應(yīng)用程序的不同功能單元被包裝為服務(wù),每個(gè)服務(wù)帶有明確可調(diào)用的接口,服務(wù)的接口采用中立的方式進(jìn)行定義,獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。浙江大學(xué)的陶佳在結(jié)合SOA架構(gòu)方法的基礎(chǔ)上,對(duì)電力企業(yè)生產(chǎn)信息集成的實(shí)際應(yīng)用及其發(fā)展方向進(jìn)行了深入探討[2]。東南大學(xué)的張卿杰提出了基于SOA的業(yè)務(wù)流程管理,并且利用UML對(duì)電力企業(yè)進(jìn)行業(yè)務(wù)流程建模,在此基礎(chǔ)上又提出了基于SOA的電力企業(yè)的業(yè)務(wù)流程管理與集成。
本文擬設(shè)計(jì)一套基于J2EE平臺(tái)的電力計(jì)量設(shè)備管理系統(tǒng)。該系統(tǒng)在軟件構(gòu)架上采用J2EE架構(gòu)的體系模式,在開發(fā)過程中使用到了Struts和Hibernate來處理頁(yè)面邏輯和對(duì)象的持久化工作。同時(shí),系統(tǒng)中也應(yīng)用到了當(dāng)前較為流行的Ajax技術(shù),給用戶帶來了全新的體驗(yàn)。Struts、Hibernate與Ajax的結(jié)合使系統(tǒng)結(jié)構(gòu)更加清晰同時(shí)也給用戶的操作帶來便捷
1 相關(guān)技術(shù)介紹
1.1 J2EE架構(gòu)的簡(jiǎn)介
J2EE(Java 2 Platform Enterprise Edition)Java2平臺(tái)企業(yè)版是一套面向企業(yè)應(yīng)用的體系結(jié)構(gòu),其不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含了許多組件,主要可簡(jiǎn)化并且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進(jìn)而提高可移植性、安全與再用價(jià)值。
J2EE通過提供中間層集成框架來滿足多種需求,其中包括高可用性,高可靠性、高可擴(kuò)展性以及低成本等需求。同時(shí)通過提供統(tǒng)一的開發(fā)平臺(tái)、降低了開發(fā)多層系統(tǒng)的復(fù)雜性。 其核心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共同的標(biāo)準(zhǔn)及規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺(tái)之間,存在良好的兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無法兼容,導(dǎo)致企業(yè)內(nèi)部或外部難以互通的窘境,同時(shí)提供對(duì)現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持Enterprise JavaBeans,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高了性能。
J2EE使用多層分布式應(yīng)用模型,它的應(yīng)用邏輯按功能劃分為組件,各應(yīng)用組件可以部署在同一臺(tái)機(jī)器上。更多情況下,各應(yīng)用組件根據(jù)它們所在不同層,分布在不同的機(jī)器上。J2EE實(shí)際上是為了解決兩層模型(C/S)的弊端而出現(xiàn)的一種多層體系結(jié)構(gòu),每種不同的服務(wù)提供一個(gè)獨(dú)立的層,其典型的四層結(jié)構(gòu)如圖1所示[3]。
1.2 Struts框架介紹
Struts框架它是當(dāng)前較為成熟的Web開發(fā)框架,是在JSP Model2的基礎(chǔ)上實(shí)現(xiàn)的一個(gè)MVC框架,其結(jié)構(gòu)如圖2所示。
圖2中,從左到右分別是視圖層(View)、控制器(Controller)和模型層(Model)。其視圖層是通過JSP使用Struts標(biāo)簽庫(kù)構(gòu)建的;來自客戶端的所有請(qǐng)求都統(tǒng)一由一個(gè)叫做ActionServlet的Servlet接收,然后根據(jù)接收到的請(qǐng)求參數(shù)和Struts配置中的ActionMapping,將請(qǐng)求送給合適的Action去處理,等業(yè)務(wù)邏輯操作完之后,ActionServlet再把處理結(jié)果返回給相應(yīng)的視圖進(jìn)行顯示;Action通過調(diào)用需要的業(yè)務(wù)組件(模型)完成應(yīng)用的業(yè)務(wù),并把執(zhí)行結(jié)果以一個(gè)代表所需顯示響應(yīng)的JSP的ActionForward對(duì)象返回給ActionServlet,然后再由ActionServlet把響應(yīng)顯示給視圖層[4]。
1.3 Hibernate技術(shù)
Hibernate是一個(gè)開放源碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的封裝,使得Java程序員可以隨心所欲地使用面向?qū)ο缶幊趟枷雭聿倏v數(shù)據(jù)庫(kù)。它可以幫助開發(fā)者消除或包裝那些針對(duì)特定廠商的SQL代碼,并且?guī)椭_發(fā)者從表格式的表現(xiàn)形式轉(zhuǎn)換到一系列的對(duì)象中去,使得開發(fā)人員沒必要在編寫瑣碎的面向過程的SQL語(yǔ)句,也不需要將數(shù)據(jù)庫(kù)中的字段一個(gè)個(gè)拆開在進(jìn)行組裝,從而將開發(fā)人員從繁瑣的工作中解脫出來。
Hibernate提供了一個(gè)與SQL語(yǔ)句非常類似的HQL語(yǔ)句,同時(shí)它也提供智能化,可以動(dòng)態(tài)的根據(jù)實(shí)體對(duì)象和數(shù)據(jù)庫(kù)表的狀態(tài)自動(dòng)進(jìn)行更新、刪除和插入。
圖3所示說明了Hibernate使用數(shù)據(jù)庫(kù)和配置文件數(shù)據(jù)來為應(yīng)用程序提供持久層服務(wù)的過程。開發(fā)人員編寫的HQL語(yǔ)句最終也會(huì)被Hibernate翻譯成SQL語(yǔ)句,然后通過JDBC來訪問數(shù)據(jù)庫(kù),在這一過程中,開發(fā)者唯一需要配置的是XML數(shù)據(jù)映射文件。XML映射文件定義了實(shí)體類(Entity Bean)和數(shù)據(jù)庫(kù)表之間的關(guān)系,從而在兩者之間架起了橋梁。
1.4 Ajax技術(shù)
Ajax(Asynchronous JavaScript and XML),異步JavaScript和XML是一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù)。Ajax應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用SOAP或其它一些基于XML的頁(yè)面服務(wù)接口(界面),并在客戶端采用JavaScript處理來自服務(wù)器的回應(yīng)。因?yàn)樵诜?wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少(大約只有原來的5%),結(jié)果我們就能看到回應(yīng)(服務(wù)器回應(yīng))更快的應(yīng)用(結(jié)果)。同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,所以Web服務(wù)器的處理時(shí)間也減少了。
Ajax不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執(zhí)行。就像DHTML應(yīng)用程序那樣,Ajax應(yīng)用程序必須在眾多不同的瀏覽器和平臺(tái)上經(jīng)過嚴(yán)格的測(cè)試。隨著Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能。
2 系統(tǒng)的設(shè)計(jì)及其實(shí)現(xiàn)
按照J(rèn)2EE規(guī)范,本系統(tǒng)體系架構(gòu)從邏輯部署上可以分成四個(gè)層次:表示層、運(yùn)行在J2EE服務(wù)器上的Web層、業(yè)務(wù)邏輯層和數(shù)據(jù)持久化層。在這種體系結(jié)構(gòu)中,客戶機(jī)只存放表示層軟件,應(yīng)用邏輯包括事務(wù)處理、監(jiān)控、信息排隊(duì)、Web服務(wù)等采用專門的中間件服務(wù)器,后臺(tái)是數(shù)據(jù)庫(kù)。通過劃分層次,使得應(yīng)用系統(tǒng)結(jié)構(gòu)清晰,每一層具備相對(duì)的獨(dú)立性,提高了應(yīng)用系統(tǒng)的可維護(hù)性和易集成性,也使系統(tǒng)具有了極強(qiáng)的可擴(kuò)展性和可伸縮性。在多層分布式體系中,系統(tǒng)資源被統(tǒng)一管理和使用,用戶可以通過網(wǎng)絡(luò)門戶透明地使用整個(gè)網(wǎng)絡(luò)資源[5]。
本系統(tǒng)在軟件的具體實(shí)現(xiàn)中采用了Struts、Hibernate與Ajax三種技術(shù)的結(jié)合,Struts和Hibernate的結(jié)合有效的保證系統(tǒng)的可交換性、可維護(hù)性、可擴(kuò)展性和可移植性,Ajax的應(yīng)用更是給用戶帶來了不一般的體驗(yàn)。系統(tǒng)數(shù)據(jù)庫(kù)采用具有高可用性、高可擴(kuò)展性、高安全性以及高穩(wěn)定性等優(yōu)點(diǎn)的大型數(shù)據(jù)庫(kù)—Oracle數(shù)據(jù)庫(kù)。由此設(shè)計(jì)很好地解決了傳統(tǒng)系統(tǒng)程序復(fù)雜、資源占用多、安全隱患大、效率低的缺點(diǎn),實(shí)現(xiàn)了電力計(jì)量設(shè)備管理的高效、安全、方便、快捷。
該系統(tǒng)主要包括系統(tǒng)維護(hù)、臺(tái)賬管理、運(yùn)行管理、計(jì)劃管理、缺陷管理和查詢統(tǒng)計(jì)六大功能模塊,采用Struts構(gòu)建系統(tǒng),系統(tǒng)中的每個(gè)模塊都有一個(gè)自己的配置文檔,以控制該模塊的流程,每個(gè)模塊除了業(yè)務(wù)邏輯不一樣之外,采用Struts和Hibernate架構(gòu)來實(shí)現(xiàn)模塊的技術(shù)與過程完全一樣。下面僅就系統(tǒng)維護(hù)模塊中的部門權(quán)限管理子模塊為例進(jìn)行說明。
2.1 部門權(quán)限管理模塊的設(shè)計(jì)
用戶登陸該模塊,可以瀏覽到其下屬各部門的一些基本信息,同時(shí)他也可以在其所具有的權(quán)限范圍內(nèi)分配給各部門一定的權(quán)限,主要包括模塊權(quán)限分配和設(shè)備權(quán)限分配兩個(gè)主要功能。
2.1.1 數(shù)據(jù)持久層設(shè)計(jì)
數(shù)據(jù)持久層基于Hibernate架構(gòu),采用了DAO設(shè)計(jì)模式。首先,把用戶信息封裝為VO(Value Object)。VO是一組值對(duì)象,只包含了一些屬性和getter/setter方法的。本模塊中主要涉及到四個(gè)表所對(duì)應(yīng)的值對(duì)象,即:模塊表、設(shè)備表、部門模塊權(quán)限表和部門設(shè)備權(quán)限表。其次,采用了DAO設(shè)計(jì)模式和抽象工廠設(shè)計(jì)模式,完成了 DAO工廠和Hibernate 數(shù)據(jù)庫(kù)操作的具體實(shí)現(xiàn)。
在該層的設(shè)計(jì)中,VO的信息封裝體現(xiàn)了面向?qū)ο笤O(shè)計(jì)編程思想;DAO的設(shè)計(jì)模式和抽象工廠模式減弱了上層調(diào)用和具體實(shí)現(xiàn)之間的耦合。
2.1.2 Hibernate的數(shù)據(jù)庫(kù)連接配置
Hibernate的數(shù)據(jù)庫(kù)連接信息是從配置文件中加載的。在配置文件中包含了一系列屬性的配置,Hibernate將根據(jù)這些屬性來連接數(shù)據(jù)庫(kù)。XML格式的配置文件的默認(rèn)文件名為hibernate.cfg.xml,將它的路徑添加到應(yīng)用的類路徑中就可以完成Hibernate的配置。要將底層數(shù)據(jù)庫(kù)內(nèi)的變動(dòng)映射到整個(gè)應(yīng)用,只需要修改該文件內(nèi)的屬性值。Hibernate配置實(shí)現(xiàn)了數(shù)據(jù)庫(kù)高移植性,只需要改變Hibernate配置文件,不用修改程序設(shè)計(jì)就可以完成不同數(shù)據(jù)庫(kù)之間的更換。其數(shù)據(jù)庫(kù)連接配置如下:
hibernate-configuration PUBLIC
\"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"
\"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">
jdbc:oracle:thin:@192.168.1.253:1521:mprmis
2.1.3 業(yè)務(wù)邏輯層設(shè)計(jì)
業(yè)務(wù)邏輯層包含了供客戶端程序調(diào)用的業(yè)務(wù)邏輯規(guī)則,以幫助客戶端完成業(yè)務(wù)操作。該層基于Struts框架采用了DAO和抽象工廠的設(shè)計(jì)模式,各業(yè)務(wù)的實(shí)現(xiàn)主要是在Struts框架的Action類中完成。每個(gè)業(yè)務(wù)所需要客戶端請(qǐng)求、處理該請(qǐng)求的Action類,收集該次請(qǐng)求數(shù)據(jù)信息的FormBean類,并說明業(yè)務(wù)執(zhí)行完畢后各種結(jié)果應(yīng)該給用戶返回的視圖。本模塊中主要實(shí)現(xiàn)的業(yè)務(wù)邏輯就是各部門的管理員登陸后為其子部門劃分模塊權(quán)限和設(shè)備權(quán)限,初始權(quán)限是從部門模塊權(quán)限表和部門設(shè)備權(quán)限表分別讀出,每次操作都是刪除初始權(quán)限將新的權(quán)限再次重新保存在對(duì)應(yīng)的權(quán)限表中。
在該層的設(shè)計(jì)中,這種設(shè)計(jì)模式的使用,使業(yè)務(wù)邏輯更加靈活,如果具體業(yè)務(wù)發(fā)生變化,在表示層和數(shù)據(jù)持久化層幾乎不需要改變就可以完成改變,這種設(shè)計(jì)增強(qiáng)了系統(tǒng)的可維護(hù)性和靈活性。
2.1.4 表示層的設(shè)計(jì)
表示層基于Struts框架,采用了JSTL標(biāo)簽庫(kù)技術(shù)。在表示層的設(shè)計(jì)中,首先,建立用于用戶瀏覽的JSP視圖頁(yè)面,其中最重要的是設(shè)計(jì)出封裝用戶表單信息的ActionForm。ActionForm是Struts架構(gòu)的重要組件,是包含了一些屬性和getter/setter方法,其次,搭建用戶請(qǐng)求和業(yè)務(wù)邏輯之間的橋梁——Action組件,該組件負(fù)責(zé)把用戶信息和具體的業(yè)務(wù)邏輯處理聯(lián)系在一起,最后,通過Struts配置連接ActionForm和Action,完成一個(gè)業(yè)務(wù)設(shè)計(jì),本模塊中部門權(quán)限的分配及查看都是通過兩棵帶復(fù)選框的樹來實(shí)現(xiàn)的,部門管理員可以通過勾選各復(fù)選框,然后點(diǎn)擊保存按鈕來完成權(quán)限的修改工作,所有的保存工作都是通過ActionForm將數(shù)據(jù)帶回到Action,最后在Action中完成保存的業(yè)務(wù)邏輯。
該層設(shè)計(jì)中,JSTL標(biāo)簽的使用簡(jiǎn)化了JSP頁(yè)面,使頁(yè)面設(shè)計(jì)和表示層業(yè)務(wù)邏輯分離,提高了應(yīng)用程序的可維護(hù)性;Struts架構(gòu)的引入,使應(yīng)用程序?qū)崿F(xiàn)了J2EE設(shè)計(jì)模式,結(jié)構(gòu)清晰,提高了系統(tǒng)的可擴(kuò)展性。
2.2 Ajax技術(shù)在系統(tǒng)中的應(yīng)用
本系統(tǒng)在實(shí)現(xiàn)過程中多處使用了Ajax技術(shù),尤其是在大量的數(shù)據(jù)查詢模塊和用戶提交的表單中。查詢過程中,JSP頁(yè)面的大部分不需要進(jìn)行刷新,只是一小部分?jǐn)?shù)據(jù)需要查找數(shù)據(jù)庫(kù),再返回到頁(yè)面中,這樣就節(jié)約了系統(tǒng)的運(yùn)行的時(shí)間,提高了工作效率,同時(shí)也給用戶帶來了友好的頁(yè)面體驗(yàn)。同樣在提交表單中,重復(fù)驗(yàn)證也是在用戶輸入數(shù)據(jù)時(shí)通過事件觸發(fā)機(jī)制,系統(tǒng)就開始在數(shù)據(jù)庫(kù)中查找數(shù)據(jù)是否重復(fù),及時(shí)反饋給用戶,而不需要在用戶填寫完整個(gè)表單后,點(diǎn)擊提交按鈕后在進(jìn)行判斷,給用戶帶來極大的便利。使用Ajax的最大優(yōu)點(diǎn),就是能在不更新整個(gè)頁(yè)面的前提下維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地回應(yīng)用戶動(dòng)作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變過的信息。
3 結(jié)束語(yǔ)
本文提出了一種電力計(jì)量設(shè)備管理系統(tǒng)的實(shí)現(xiàn)方案、該系統(tǒng)采用了Struts+Hibernate+Ajax的基于J2EE平臺(tái)的開發(fā)模式,該模式已成功運(yùn)用于實(shí)際項(xiàng)目的開發(fā)。這個(gè)設(shè)計(jì)方案顯著提高了軟件開發(fā)的效率,在功能性、可用性、可擴(kuò)展性、可維護(hù)性、安全性以及可靠性等方面都有良好的表現(xiàn),實(shí)現(xiàn)了企業(yè)內(nèi)部應(yīng)用之間,企業(yè)內(nèi)部應(yīng)用與外部應(yīng)用之間的協(xié)同工作最優(yōu)化,可以大大提高企業(yè)的工作效率及運(yùn)行的安全性和靈活性。目前,該系統(tǒng)已應(yīng)用于臨汾供電分公司,并取得了良好的效果。
參考文獻(xiàn):
[1] 周宇,王瑋,趙洪斌,等.基于工作流技術(shù)的B/S結(jié)構(gòu)電力生產(chǎn)協(xié)同組織管理系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2008,28(B06):387-389.
[2] 陶佳.電力企業(yè)生產(chǎn)信息集成理論及應(yīng)用研究[D].浙江:浙江大學(xué)電氣工程學(xué)院,2007.
[3] 計(jì)磊,李里,周偉.精通J2EE-Eclipse.Struts.Hibernate.Spring整合應(yīng)用案例[M].北京:人民郵電出版社,2006.
[4] 張丹.JSP寶典[M].北京:電子工業(yè)出版社,2007.
[5] 邵騰,曲利芹.基于Struts和Hibenate的遙感信息發(fā)布系統(tǒng)研究[EB/OL].[2009-09-05].http://www.studa.net/pc-Theory/080505/16503235. html.