■ 劉忠 李洪研
在企業(yè)級(jí)Java平臺(tái)第二版(J2EE)應(yīng)用系統(tǒng)開發(fā)中,W eb層框架(Struts)+業(yè)務(wù)層框架(Spring)+數(shù)據(jù)持久層框架(Hibe rnate)(SSH)是流行的輕量級(jí)整合開源框架,采用模型-視圖-控制器(M VC)設(shè)計(jì)模式將表示層、業(yè)務(wù)邏輯層分離并與持久層協(xié)同工作,可增強(qiáng)應(yīng)用系統(tǒng)的可維護(hù)性和可擴(kuò)展性,提高代碼的可復(fù)用性和開發(fā)效率。在分析SSH結(jié)構(gòu)和整合原理基礎(chǔ)上,設(shè)計(jì)出跨平臺(tái)、可伸縮,適用于多種層面、多種對(duì)象和多種網(wǎng)絡(luò)環(huán)境的GSM-R數(shù)據(jù)管理系統(tǒng),實(shí)現(xiàn)GSM-R網(wǎng)絡(luò)數(shù)據(jù)管理、終端數(shù)據(jù)管理、通信地理信息數(shù)據(jù)管理、報(bào)表管理、系統(tǒng)管理等功能。實(shí)際應(yīng)用表明:SSH整合架構(gòu)為開放的、企業(yè)級(jí)和可伸縮性的J2EE應(yīng)用開發(fā)提供了有效支持。
J2EE是平臺(tái)獨(dú)立的、可移植的、安全的、標(biāo)準(zhǔn)的企業(yè)級(jí)應(yīng)用平臺(tái)。J2EE本身是一類協(xié)議標(biāo)準(zhǔn)而不是產(chǎn)品,包括Java企業(yè)級(jí)Bean(EJB),Java服務(wù)器頁面(JSP),Java編寫的服務(wù)器端程序(Se rv le t),Java消息服務(wù)(JMS),Java組件結(jié)構(gòu)(JCA),Java事務(wù)應(yīng)用程序接口(JTA)等規(guī)范,涵蓋企業(yè)應(yīng)用開發(fā)中涉及到的各種實(shí)現(xiàn)技術(shù),其中EJB是J2EE的核心。
M VC是一種軟件體系結(jié)構(gòu)模式,模型包含應(yīng)用所需的所有行為和數(shù)據(jù),試圖是模型的可視化表示,控制器處理用戶輸入并將模型映射到試圖中。M VC特別適用于基于J2EE的3層體系結(jié)構(gòu),視圖主要由JSP頁面的表示層元素組成,模型主要是EJB構(gòu)件實(shí)現(xiàn)的應(yīng)用模型,而Servle t則可視為控制器。
SSH是由客戶端表示層(CPL)、服務(wù)器端表示層(SPL)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)持久層(DPL)和域模型層(DM L)構(gòu)成的4層體系結(jié)構(gòu),其中SPL用Stru ts框架描述M VC模型;BLL由Sp ring框架的控制反轉(zhuǎn)(IoC)容器協(xié)助完成;DPL用Hibe rnate框架的對(duì)象和關(guān)系映射(ORM)完成與后臺(tái)數(shù)據(jù)庫的交互。此外,SPL與BLL通過DM L的值對(duì)象(VO)進(jìn)行數(shù)據(jù)傳遞;BLL與DPL用DM L的VO-PO(持久化對(duì)象)來描述對(duì)象之間的關(guān)系。
在SSH分布應(yīng)用架構(gòu)中,為確保各層間界面清晰且松散耦合,BLL的各種業(yè)務(wù)邏輯服務(wù)都應(yīng)設(shè)計(jì)成可重用,且相互間不存在依賴關(guān)系;數(shù)據(jù)訪問操作應(yīng)在DPL中被封裝成數(shù)據(jù)存取目標(biāo)(DAO)類,而不直接出現(xiàn)在BLL或SPL代碼中。
(1)在SPL中不應(yīng)出現(xiàn)業(yè)務(wù)邏輯代碼。Stru ts框架用Ac tion Fo rm完成請(qǐng)求的參數(shù)傳遞,但它不屬于DM L中的VO。因?yàn)锳ctionForm 繼承了org.apache.struts.action.Action-M apping,所以ActionForm與Struts有著緊密的耦合,若使用Ac tion Fo rm作為VO,則在移植到其他表示層的MVC 框架時(shí),底層BLL與DPL的工作將無法完成。
(2)在BLL中Sp ring框架應(yīng)針對(duì)接口編程,因?yàn)槭褂肐oC/DI(依賴注入)容器的服務(wù)可以很容易地幫助程序員遷移其他業(yè)務(wù)邏輯實(shí)現(xiàn)類。
(3)在DPL中Hibe rnate框架應(yīng)將實(shí)現(xiàn)數(shù)據(jù)庫交互的工作封裝成DAO模式,同時(shí)為每個(gè)DAO實(shí)現(xiàn)類提供接口,以配合Spring框架在BLL中的工作。
GSM-R數(shù)據(jù)管理系統(tǒng)主要具有GSM-R數(shù)據(jù)操作人機(jī)界面、業(yè)務(wù)邏輯實(shí)現(xiàn)、后臺(tái)數(shù)據(jù)處理、業(yè)務(wù)流程控制、數(shù)據(jù)整合報(bào)表、業(yè)務(wù)申請(qǐng)審批等功能。其業(yè)務(wù)功能模塊包括:系統(tǒng)管理、登錄管理、網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)管理、終端數(shù)據(jù)管理、通信地理信息數(shù)據(jù)管理、基本資料管理等模塊。GSM-R的11類數(shù)據(jù)類型在日常業(yè)務(wù)申請(qǐng)中,會(huì)出現(xiàn)一類或若干類數(shù)據(jù)同時(shí)申報(bào)業(yè)務(wù)的現(xiàn)象,需確保操作的便捷性、安全性和可靠性。GSM-R數(shù)據(jù)管理系統(tǒng)每項(xiàng)操作必須在2~5 s內(nèi)完成,最復(fù)雜的分類程序也要在5~10 s內(nèi)完成處理。GSM-R數(shù)據(jù)管理系統(tǒng)用例圖見圖1。
GSM-R數(shù)據(jù)管理系統(tǒng)結(jié)構(gòu)采用基于瀏覽器/服務(wù)器模式(B/S)的3層結(jié)構(gòu)(見圖2)??蛻舳艘訵 EB瀏覽器實(shí)現(xiàn)人機(jī)交互界面,應(yīng)用服務(wù)器作為中間層是GSM-R數(shù)據(jù)管理系統(tǒng)的核心,它運(yùn)行于J2EE應(yīng)用服務(wù)器上,實(shí)現(xiàn)GSM-R數(shù)據(jù)與數(shù)據(jù)間及數(shù)據(jù)自身修改的業(yè)務(wù)邏輯,后臺(tái)GSM-R數(shù)據(jù)存儲(chǔ)采用ORACLE數(shù)據(jù)庫系統(tǒng)。
根據(jù)當(dāng)前鐵路GSM-R無線網(wǎng)絡(luò)發(fā)展態(tài)勢(shì)所展現(xiàn)的功能需求目標(biāo),整個(gè)系統(tǒng)分為業(yè)務(wù)系統(tǒng)、報(bào)表管理、系統(tǒng)管理、權(quán)限管理、工作流管理和個(gè)人信息管理6個(gè)功能模塊。
圖1 GSM-R數(shù)據(jù)管理系統(tǒng)用例圖
圖2 GSM-R數(shù)據(jù)管理系統(tǒng)體系結(jié)構(gòu)
2.3.1 系統(tǒng)主要功能模塊分析
(1)業(yè)務(wù)系統(tǒng):包括網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)管理、網(wǎng)絡(luò)終端數(shù)據(jù)管理、通信地理信息數(shù)據(jù)管理、SIM卡業(yè)務(wù)管理,實(shí)現(xiàn)對(duì)上述4類數(shù)據(jù)的增刪改查等功能。對(duì)于工程數(shù)據(jù)可通過Exce l導(dǎo)入方式將現(xiàn)有數(shù)據(jù)導(dǎo)入系統(tǒng)中,并可按照所屬鐵路局、所屬線路對(duì)數(shù)據(jù)進(jìn)行檢索。
(2)報(bào)表管理:實(shí)現(xiàn)對(duì)業(yè)務(wù)系統(tǒng)中采集到的各種數(shù)據(jù),按特定要求進(jìn)行統(tǒng)計(jì)匯總。包括網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)報(bào)表、網(wǎng)絡(luò)終端數(shù)據(jù)報(bào)表、SIM卡業(yè)務(wù)報(bào)表和通信地理信息數(shù)據(jù)報(bào)表。
(3)系統(tǒng)管理:對(duì)業(yè)務(wù)系統(tǒng)及系統(tǒng)基本使用信息進(jìn)行配置,包括數(shù)據(jù)字典管理、組織機(jī)構(gòu)管理、系統(tǒng)公告管理和日志管理。
(4)權(quán)限管理:對(duì)使用系統(tǒng)的操作員進(jìn)行管理、對(duì)操作員使用權(quán)限進(jìn)行管理。功能模塊包括角色管理、操作員管理、權(quán)限分配管理和菜單管理。通過菜單管理,可動(dòng)態(tài)地對(duì)所要顯示的左側(cè)菜單進(jìn)行位置及所屬父級(jí)菜單的調(diào)整更新。
(5)工作流管理:在業(yè)務(wù)管理中對(duì)數(shù)據(jù)進(jìn)行維護(hù)時(shí)的流程進(jìn)行管理。包括流程申請(qǐng)、流程當(dāng)前狀態(tài)及申請(qǐng)業(yè)務(wù)流程列表等。
2.3.2 GSM-R數(shù)據(jù)管理系統(tǒng)框架設(shè)計(jì)
GSM-R數(shù)據(jù)管理系統(tǒng)總體采用M VC模式的分層思想降低應(yīng)用界面、邏輯和控制的耦合度。分別由Struts+ExtJS框架實(shí)現(xiàn)表示層,Sp ring框架實(shí)現(xiàn)業(yè)務(wù)邏輯層,Hibe rnate框架實(shí)現(xiàn)持久層,構(gòu)成富客戶端的B/S結(jié)構(gòu)GSM-R數(shù)據(jù)管理系統(tǒng)。這種多層架構(gòu)的系統(tǒng)結(jié)構(gòu)有助于降低模塊間的耦合度,增加代碼的可復(fù)用性。
(1)表示層:是一些帶有TagLib 標(biāo)簽和 ExtJS腳本的JSP頁面,利用JSP編程技術(shù)結(jié)合Stru ts強(qiáng)大的自定義標(biāo)簽庫Tag Lib和Ex tJS富客戶端腳本來實(shí)現(xiàn),JSP頁面中一般不會(huì)嵌入Java代碼,可增強(qiáng)代碼段的可讀性和可維護(hù)性。
(2)業(yè)務(wù)層:是由Struts的控制組件ActionServlet,ActionM apping,Action及業(yè)務(wù)邏輯類JavaBean來實(shí)現(xiàn),該層借助Sp ring框架的依賴注入、面向接口編程等容器組件處理業(yè)務(wù)邏輯、業(yè)務(wù)校驗(yàn)和事務(wù)處理等,降低持久層之間的耦合性。在JavaBean里封裝了與數(shù)據(jù)持久層的交互關(guān)系,以實(shí)現(xiàn)所有的業(yè)務(wù)邏輯。
(3)持久層:以Sp ring和Hibe rnate相結(jié)合的方法實(shí)現(xiàn),設(shè)計(jì)目標(biāo)是為整體項(xiàng)目提供高層、統(tǒng)一、完全和并發(fā)的數(shù)據(jù)持久機(jī)制。通過運(yùn)用ORM工具,對(duì)Hibernate進(jìn)行關(guān)系數(shù)據(jù)庫與對(duì)象的關(guān)聯(lián),把對(duì)數(shù)據(jù)庫表的操作轉(zhuǎn)變?yōu)閷?duì)對(duì)象的操作,并考慮與數(shù)據(jù)庫交互操作情況及連接池等數(shù)據(jù)傳輸性能。
(4)域?qū)ο髮樱河糜驅(qū)ο蠓庋b業(yè)務(wù)對(duì)象,利用Hibe rnate將域?qū)ο笥成涞綌?shù)據(jù)庫中的數(shù)據(jù)表,使底層數(shù)據(jù)庫表結(jié)構(gòu)相對(duì)面向?qū)ο竽P投该?。采用面向?qū)ο笤O(shè)計(jì)方法中繼承樹對(duì)應(yīng)一個(gè)表的策略,使該映射策略極易擴(kuò)展,能將復(fù)雜的數(shù)據(jù)表轉(zhuǎn)化成若干簡(jiǎn)單的域?qū)ο髞肀硎?,提高系統(tǒng)的可維護(hù)性和可修改性。
(1)平臺(tái)選擇:系統(tǒng)前端為IE6及以上或FireFox3.0及以上瀏覽器,并下載安裝基于PC/SC規(guī)范的Ac tiveX組件進(jìn)行對(duì)SIM卡數(shù)據(jù)的讀寫,中間層采用Tom ca t中間件作為應(yīng)用服務(wù)器,后臺(tái)數(shù)據(jù)庫采用Oracle 10g。
(2)多類數(shù)據(jù)業(yè)務(wù)并行處理方式:對(duì)于11類數(shù)據(jù)同時(shí)進(jìn)行申報(bào)業(yè)務(wù)的情況,系統(tǒng)采用ExtJS 作為富客戶端的實(shí)現(xiàn)?;贓xtJS界面,如C/S架構(gòu)系統(tǒng)的界面一樣,便于用戶操作,通過標(biāo)簽(TAB)頁面方式,通過在一個(gè)界面上顯示11種數(shù)據(jù),在數(shù)據(jù)修改編輯完成后,直接可進(jìn)行批量數(shù)據(jù)的更新提交。既能保證數(shù)據(jù)的完整性和一致性,又能減少系統(tǒng)操作及業(yè)務(wù)流程的繁瑣性。
(3)大批數(shù)據(jù)及歷史數(shù)據(jù)處理:對(duì)于大批數(shù)據(jù)更改,可采用在Exce l本地進(jìn)行修改的方式,在Exce l中對(duì)數(shù)據(jù)進(jìn)行處理后,通過上傳數(shù)據(jù)導(dǎo)入方式對(duì)數(shù)據(jù)進(jìn)行批量更新。數(shù)據(jù)導(dǎo)入可分為兩種方式:新增導(dǎo)入和更新導(dǎo)入。對(duì)于歷史數(shù)據(jù),一般可采用新增導(dǎo)入方式,按照一定格式將數(shù)據(jù)在Excel表格中編輯處理后,導(dǎo)入系統(tǒng)中。
(4)響應(yīng)速度:一些模塊的數(shù)據(jù)存取量大,數(shù)據(jù)實(shí)體Bean在多表多數(shù)據(jù)項(xiàng)存取時(shí),由于有太大量的重復(fù)數(shù)據(jù)庫操作,系統(tǒng)響應(yīng)速度變得緩慢。解決方案主要是提高數(shù)據(jù)庫存取效率,可采用數(shù)據(jù)庫連接標(biāo)準(zhǔn)(JDBC)連接取代實(shí)體Bean,同時(shí)對(duì)JDBC代碼進(jìn)行優(yōu)化,部分?jǐn)?shù)據(jù)處理運(yùn)算可分配到數(shù)據(jù)庫端采用存儲(chǔ)過程來完成,從而提高程序運(yùn)行效率。
將GSM-R數(shù)據(jù)管理系統(tǒng)部署到Tom cat W eb應(yīng)用服務(wù)器中并啟動(dòng)Tom cat,在IE地址欄中輸入GSM-R 數(shù)據(jù)管理系統(tǒng)的訪問地址,進(jìn)入GSM-R數(shù)據(jù)管理系統(tǒng)。實(shí)測(cè)表明:
(1)GSM-R數(shù)據(jù)管理系統(tǒng)對(duì)GSM-R無線網(wǎng)絡(luò)中的數(shù)據(jù)可進(jìn)行科學(xué)管理,并提供有效支持,系統(tǒng)運(yùn)行良好,穩(wěn)定可靠。
(2)JSP實(shí)現(xiàn)個(gè)性化頁面,有利于實(shí)現(xiàn)操作權(quán)限的細(xì)化管理。每個(gè)操作員只能看到自己的功能界面,從而減少操作人員誤操作引起的錯(cuò)誤。
(3)Ex tJS實(shí)現(xiàn)富客戶端,有效提升用戶體驗(yàn),減少頁面操作的復(fù)雜性。
(4)系統(tǒng)具有良好的擴(kuò)展性,新功能實(shí)現(xiàn)只需增加相應(yīng)的模塊代碼,而不必改動(dòng)系統(tǒng)原結(jié)構(gòu)和代碼。對(duì)于業(yè)務(wù)邏輯的擴(kuò)展可通過ActionBean實(shí)現(xiàn)。
(5)系統(tǒng)具有良好的重用性,多個(gè)Ac tionBean和EJB可供不同模塊共用。
(6)系統(tǒng)結(jié)構(gòu)清晰,有利于軟件開發(fā)的文檔管理,提高了文檔編寫的質(zhì)量和效率。
[1] 孫衛(wèi)琴,精通. Stru ts 基于M VC的JAVA W EB設(shè)計(jì)與開發(fā)[M]. 北京:電子工業(yè)出版社,2004
[2] 付京周,精通. H ibe rna te3.0 JAVA數(shù)據(jù)庫持久層開發(fā)實(shí)踐[M]. 北京:人民郵電出版社,2007
[3] 孫長(zhǎng)明,余利建. 基于Hibernate+Spring+Struts的WEB應(yīng)用開發(fā)框架鐵路計(jì)算機(jī)應(yīng)用[J]. 鐵路計(jì)算機(jī)應(yīng)用2007,16(3)
[4] 劉斌,精通. Java W eb整合開發(fā)[JSP+AJAX+Struts+Hi bernate][M]. 北京:電子工業(yè)出版社,2007
[5] 李剛. 輕量級(jí)Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)-Stru ts2+Sp ring+H ibe rn a te整合開發(fā)[M]. 北京:電子工業(yè)出版社,2008