方鐘亮
(昆山市廣播電視臺(tái) 網(wǎng)絡(luò)中心,江蘇 昆山 215300)
隨著信息技術(shù)的發(fā)展,有線電視網(wǎng)絡(luò)運(yùn)營商大都建立起了如BOSS,OA等運(yùn)維管理系統(tǒng)[1],但是對于某些設(shè)備資源,包括收費(fèi)計(jì)算機(jī)終端、光纖管道、節(jié)點(diǎn)機(jī)房的運(yùn)維管理缺乏一個(gè)有效的信息化管理平臺(tái),這使得運(yùn)營商在設(shè)備資源管理中經(jīng)常重復(fù)作業(yè),無法進(jìn)行精確統(tǒng)計(jì)和合理部署。筆者介紹了基于Struts2,Spring和Hibernate開源框的終端運(yùn)維管理系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)了面向終端運(yùn)維的信息化統(tǒng)一管理平臺(tái)。
根據(jù)在終端運(yùn)維工作中涉及的內(nèi)容,系統(tǒng)在功能上的總體設(shè)計(jì)如圖1所示。系統(tǒng)包括運(yùn)維記錄管理、終端設(shè)備管理、IP地址管理、文件下載管理和機(jī)構(gòu)設(shè)置管理。系統(tǒng)的訪問分為普通用戶和管理員,普通用戶只能對上述功能的記錄信息進(jìn)行查看和搜索,管理員則可以進(jìn)行記錄的增加、刪除和編輯功能,普通用戶和管理員之間可以通過登錄、注銷進(jìn)行切換。
系統(tǒng)的結(jié)構(gòu)如圖2所示,由表示層、服務(wù)層和持久層組成,表示層用于處理系統(tǒng)數(shù)據(jù)和用戶之間的交互和數(shù)據(jù)圖表的顯示。服務(wù)層完成系統(tǒng)具體事務(wù)的托管處理。持久層可以實(shí)現(xiàn)系統(tǒng)和數(shù)據(jù)庫之間的訪問管理。

表示層基于Struts2框架。Struts2是Apache Software Foundation下設(shè)的一個(gè)開源項(xiàng)目,是基于MVC模式的一個(gè)Java輕量級Web應(yīng)用程序框架,支持通過攔截器來處理用戶請求[2]。表示層通過JSP和Struts2標(biāo)簽等技術(shù)直接將數(shù)據(jù)展示于用戶IE界面。用戶的HTTP請求會(huì)通過核心控制器FilterDispatcher根據(jù)struts.xml配置文件的定義分發(fā)到對應(yīng)的Action類,Action類則通過調(diào)用服務(wù)層接口來完成相應(yīng)業(yè)務(wù)處理。Action類的函數(shù)執(zhí)行后返回字符串值,并在配置文件的

服務(wù)層基于Spring框架。Spring是一個(gè)輕量級的控制反轉(zhuǎn)(Inversion of Control,IoC)技術(shù)的容器框架,Spring實(shí)現(xiàn)了J2EE框架中所倡導(dǎo)的由容器實(shí)現(xiàn)對象生命周期管理的功能[3]。通過Web.xml文件的配置,IoC容器在應(yīng)用服務(wù)器啟動(dòng)時(shí)得以初始化。配置文件applicationContext.xml中注冊定義了數(shù)據(jù)源、會(huì)話工廠、服務(wù)層接口和數(shù)據(jù)接口對象(Data Access Object,DAO),各管理類都以Bean的形式進(jìn)行注冊,并同容器一起初始化。系統(tǒng)中各接口類在被調(diào)用現(xiàn)場無需進(jìn)行對象初始化,而是通過依賴注入的方式由IoC容器提供,這樣就能實(shí)現(xiàn)軟件設(shè)計(jì)中各組件之間的“松散耦合”[4]。
持久層基于Hibernate框架,Hibernate是一種開源持久層框架,能夠通過在數(shù)據(jù)庫表和簡單舊式Java對象類(Plain Ordinary Java Objects,POJO)之間建立對象和關(guān)系數(shù)據(jù)庫之間映射(Object Relational Mapping,ORM)來實(shí)現(xiàn)對數(shù)據(jù)庫的面向?qū)ο蟛僮鳌ibernate的查詢語句HQL是對SQL的面向?qū)ο髷U(kuò)展。Hibernate將數(shù)據(jù)庫中的每張表通過定義classname.hbm.xml配置文件映射到相應(yīng)的POJO對象類,配置文件的類名稱需和POJO類名稱相同,Hibernate通過在DAO接口中使用HQL語句來實(shí)現(xiàn)POJO對象和數(shù)據(jù)庫之間的訪問。Hibernate的應(yīng)用極大簡化了J2EE持久層的開發(fā)工作[5]。
Struts2標(biāo)簽庫中的iterator標(biāo)簽用于頁面迭代的輸出集合元素,但目前iterator標(biāo)簽還無法處理大批量數(shù)據(jù)的分頁顯示。筆者在業(yè)務(wù)邏輯控制模塊中實(shí)現(xiàn)分頁控制,處理流程如圖3所示。首先,通過DAO接口查詢符合條件的所有記錄,并以集合的形式存儲(chǔ)在緩存中;其次,通過計(jì)算獲取單個(gè)頁面需要顯示的記錄在查詢集合中的起始位置和終止位置,并由此在內(nèi)存中截取生成一個(gè)新子集;最后,將新生成的集合一并提交給iterator標(biāo)簽予以顯示。圖中 pageIndex為頁面指針(初始值為1),pageSize為頁面顯示記錄數(shù)量,listSize為查詢集合中所有記錄數(shù)量,p為每次顯示記錄在查詢集合中的起始指針,e為結(jié)尾指針。

上下翻頁控制中上、下頁指針值prePage和nextPage的計(jì)算公式為

式中:pageNum代表總頁數(shù),可根據(jù)記錄數(shù)和頁面大小來計(jì)算,在此不作介紹。翻頁過程中,上、下頁指針的值被賦給pageIndex,然后執(zhí)行圖3所示的流程來實(shí)現(xiàn)數(shù)據(jù)分頁顯示。
在業(yè)務(wù)邏輯控制模塊中進(jìn)行分頁處理,相對于其他模塊更增加了系統(tǒng)的解耦合度,對表示層的頁面控制也更加靈活。
大批量數(shù)據(jù)的處理涉及到系統(tǒng)的效率和穩(wěn)定性,在持久層處理批量數(shù)據(jù)的方法通常有:
1)通過JDBC來執(zhí)行原始SQL語句,此種方法最直接高效,但缺少面向?qū)ο蟮臄?shù)據(jù)庫管理,在修改數(shù)據(jù)時(shí)無法保證緩存中Java對象與數(shù)據(jù)庫中數(shù)據(jù)的一致性,不利于代碼的移植和系統(tǒng)的擴(kuò)展。
2)通過循環(huán)語句調(diào)用ibernateTemplate對象的Save,SaveorUpdate和Delete方法來實(shí)現(xiàn)批量處理數(shù)據(jù)。Hibernate對象的一級緩存只是構(gòu)建在內(nèi)存中,在數(shù)據(jù)量過大時(shí)多次調(diào)用Save接口可能會(huì)導(dǎo)致內(nèi)存溢出,需要及時(shí)刷新一級緩存或是建立二級緩存。同時(shí)在更新或刪除數(shù)據(jù)時(shí)每次還要執(zhí)行查詢語句,這種方法效率低下,且容易導(dǎo)致系統(tǒng)出錯(cuò)。
3)利用Hibernate3中提供的用于批量數(shù)據(jù)處理的HQL語句接口。其處理方式代碼如下:

以上的處理方式無須對每個(gè)記錄進(jìn)行查詢?nèi)〕鲈傩薷谋4妫苊饬藘?nèi)存溢出,并保持對象數(shù)據(jù)的一致性,在性能上和直接用JDBC進(jìn)行操作相差無幾。文中的系統(tǒng)設(shè)計(jì)采用第3種批量處理方式。
系統(tǒng)采用JFreeChart技術(shù)進(jìn)行統(tǒng)計(jì)數(shù)據(jù)的圖形化顯示。JFreeChart是基于Java的開源圖表軟件開發(fā)包,可融入所有Java程序中。JFreeChart可以生成如餅圖、柱狀圖和折線圖等多種統(tǒng)計(jì)圖表,并以JPEG或PNG文件格式保存。用JFreeChart生成統(tǒng)計(jì)圖表的流程為:1)數(shù)據(jù)查詢。服務(wù)器接受用戶客戶端的查詢請求,調(diào)用接口查詢數(shù)據(jù)庫原始數(shù)據(jù),并將數(shù)據(jù)返回至業(yè)務(wù)邏輯控制模塊,再通過分析計(jì)算得到用戶需要的統(tǒng)計(jì)數(shù)據(jù)。2)創(chuàng)建數(shù)據(jù)集。通過DefaultCategoryDataset類創(chuàng)建圖像數(shù)據(jù)集DataSet對象,將統(tǒng)計(jì)數(shù)據(jù)賦予數(shù)據(jù)集。此時(shí)數(shù)據(jù)集成為圖表的數(shù)據(jù)源。3)創(chuàng)建JFreeChart對象。通過ChartFactory工廠類來創(chuàng)建JFreeChart對象,其數(shù)據(jù)源指向DataSet,并設(shè)置圖表對象的顏色、標(biāo)題和字體等。4)圖像生成顯示。通過ServletUtilites類在服務(wù)端將圖表保存為PNG格式的臨時(shí)文件,并傳送至客戶端瀏覽器顯示[6]。
圖4是2009年昆山廣電全年運(yùn)維記錄的查詢統(tǒng)計(jì)結(jié)果。系統(tǒng)通過Web的方式將動(dòng)態(tài)數(shù)據(jù)以圖表形式顯示,使用戶一目了然,可以直接觀察數(shù)據(jù)變化趨勢。

終端運(yùn)維管理系統(tǒng)在企業(yè)管理中的部署應(yīng)用如圖5所示,系統(tǒng)通過對運(yùn)維施工的詳細(xì)記錄并進(jìn)行類別統(tǒng)計(jì)分析,向企業(yè)管理者提供各種明確的運(yùn)維信息指標(biāo),管理層可及時(shí)有針對性地調(diào)整管理策略、排除隱患,實(shí)現(xiàn)更為有效的運(yùn)營管理。

從圖4來看,票據(jù)打印和業(yè)務(wù)軟件的維修施工在所有運(yùn)維種類中比例較高,具有代表性,涉及打印機(jī)硬件設(shè)備的維修和職員對業(yè)務(wù)軟件誤操作的更正指導(dǎo)。針對這些問題,可逐步進(jìn)行打印設(shè)備的更新和員工的業(yè)務(wù)操作培訓(xùn)。其效果可以從昆山廣電2009年各季度運(yùn)維統(tǒng)計(jì)(表1)中體現(xiàn),自一季度至四季度兩種類型運(yùn)維比例分別從53.1%和28.1%逐季度降至13.0%和21.7%。這說明針對性的措施使得兩種故障發(fā)生比例明顯減小。

表1 季度運(yùn)維統(tǒng)計(jì)
介紹了終端運(yùn)維管理系統(tǒng)基于Struts2,Spring和Hibernate框架的開發(fā)設(shè)計(jì)。3種開源框架的整合符合J2EE分層設(shè)計(jì)的理念。同時(shí)系統(tǒng)利用開源JFreeChart實(shí)現(xiàn)了統(tǒng)計(jì)數(shù)據(jù)的圖形化展示。系統(tǒng)具有較高的可擴(kuò)展性和良好的可維護(hù)性。終端運(yùn)維管理系統(tǒng)實(shí)現(xiàn)了對運(yùn)營終端的有效信息化管理,提供了一個(gè)面向設(shè)備運(yùn)維的基礎(chǔ)管理平臺(tái)。在后續(xù)的開發(fā)中將逐步把廣電網(wǎng)絡(luò)運(yùn)營所涉及的光纖管道和節(jié)點(diǎn)機(jī)房的管理融入到平臺(tái)中。
[1]方鐘亮.昆山廣電BOSS系統(tǒng)的策略管理建設(shè)[J].電視技術(shù),2009,33(3):52-53.
[2]Apache Software Foundations.About apache struts2[EB/OL].[2009-10-01].http://struts.apache.org/2.0.11/.2009-10-1.
[3]Spring Source.Spring documentation[EB/OL].[2009-10-01].http://www.springsource.org/documentation.
[4]楊少波.J2EE項(xiàng)目實(shí)訓(xùn)Spring框架技術(shù)[M].北京:清華大學(xué)出版社,2008.
[5]王軍豪,彭巖.Hibernate+Struts+Spring整合技術(shù)在電子政務(wù)中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(6):1409-1412.
[6]朱賀新,穆榮,盧建軍.JFreeChart的應(yīng)用開發(fā)與改進(jìn)[J].西安科技大學(xué)學(xué)報(bào),2008,28(4):789-792.