方鐘亮
(昆山市廣播電視臺 網絡中心,江蘇 昆山 215300)
隨著信息技術的發(fā)展,有線電視網絡運營商大都建立起了如BOSS,OA等運維管理系統(tǒng)[1],但是對于某些設備資源,包括收費計算機終端、光纖管道、節(jié)點機房的運維管理缺乏一個有效的信息化管理平臺,這使得運營商在設備資源管理中經常重復作業(yè),無法進行精確統(tǒng)計和合理部署。筆者介紹了基于Struts2,Spring和Hibernate開源框的終端運維管理系統(tǒng)設計,實現(xiàn)了面向終端運維的信息化統(tǒng)一管理平臺。
根據(jù)在終端運維工作中涉及的內容,系統(tǒng)在功能上的總體設計如圖1所示。系統(tǒng)包括運維記錄管理、終端設備管理、IP地址管理、文件下載管理和機構設置管理。系統(tǒng)的訪問分為普通用戶和管理員,普通用戶只能對上述功能的記錄信息進行查看和搜索,管理員則可以進行記錄的增加、刪除和編輯功能,普通用戶和管理員之間可以通過登錄、注銷進行切換。
系統(tǒng)的結構如圖2所示,由表示層、服務層和持久層組成,表示層用于處理系統(tǒng)數(shù)據(jù)和用戶之間的交互和數(shù)據(jù)圖表的顯示。服務層完成系統(tǒng)具體事務的托管處理。持久層可以實現(xiàn)系統(tǒng)和數(shù)據(jù)庫之間的訪問管理。
表示層基于Struts2框架。Struts2是Apache Software Foundation下設的一個開源項目,是基于MVC模式的一個Java輕量級Web應用程序框架,支持通過攔截器來處理用戶請求[2]。表示層通過JSP和Struts2標簽等技術直接將數(shù)據(jù)展示于用戶IE界面。用戶的HTTP請求會通過核心控制器FilterDispatcher根據(jù)struts.xml配置文件的定義分發(fā)到對應的Action類,Action類則通過調用服務層接口來完成相應業(yè)務處理。Action類的函數(shù)執(zhí)行后返回字符串值,并在配置文件的
服務層基于Spring框架。Spring是一個輕量級的控制反轉(Inversion of Control,IoC)技術的容器框架,Spring實現(xiàn)了J2EE框架中所倡導的由容器實現(xiàn)對象生命周期管理的功能[3]。通過Web.xml文件的配置,IoC容器在應用服務器啟動時得以初始化。配置文件applicationContext.xml中注冊定義了數(shù)據(jù)源、會話工廠、服務層接口和數(shù)據(jù)接口對象(Data Access Object,DAO),各管理類都以Bean的形式進行注冊,并同容器一起初始化。系統(tǒng)中各接口類在被調用現(xiàn)場無需進行對象初始化,而是通過依賴注入的方式由IoC容器提供,這樣就能實現(xiàn)軟件設計中各組件之間的“松散耦合”[4]。
持久層基于Hibernate框架,Hibernate是一種開源持久層框架,能夠通過在數(shù)據(jù)庫表和簡單舊式Java對象類(Plain Ordinary Java Objects,POJO)之間建立對象和關系數(shù)據(jù)庫之間映射(Object Relational Mapping,ORM)來實現(xiàn)對數(shù)據(jù)庫的面向對象操作。Hibernate的查詢語句HQL是對SQL的面向對象擴展。Hibernate將數(shù)據(jù)庫中的每張表通過定義classname.hbm.xml配置文件映射到相應的POJO對象類,配置文件的類名稱需和POJO類名稱相同,Hibernate通過在DAO接口中使用HQL語句來實現(xiàn)POJO對象和數(shù)據(jù)庫之間的訪問。Hibernate的應用極大簡化了J2EE持久層的開發(fā)工作[5]。
Struts2標簽庫中的iterator標簽用于頁面迭代的輸出集合元素,但目前iterator標簽還無法處理大批量數(shù)據(jù)的分頁顯示。筆者在業(yè)務邏輯控制模塊中實現(xiàn)分頁控制,處理流程如圖3所示。首先,通過DAO接口查詢符合條件的所有記錄,并以集合的形式存儲在緩存中;其次,通過計算獲取單個頁面需要顯示的記錄在查詢集合中的起始位置和終止位置,并由此在內存中截取生成一個新子集;最后,將新生成的集合一并提交給iterator標簽予以顯示。圖中 pageIndex為頁面指針(初始值為1),pageSize為頁面顯示記錄數(shù)量,listSize為查詢集合中所有記錄數(shù)量,p為每次顯示記錄在查詢集合中的起始指針,e為結尾指針。
上下翻頁控制中上、下頁指針值prePage和nextPage的計算公式為
式中:pageNum代表總頁數(shù),可根據(jù)記錄數(shù)和頁面大小來計算,在此不作介紹。翻頁過程中,上、下頁指針的值被賦給pageIndex,然后執(zhí)行圖3所示的流程來實現(xiàn)數(shù)據(jù)分頁顯示。
在業(yè)務邏輯控制模塊中進行分頁處理,相對于其他模塊更增加了系統(tǒng)的解耦合度,對表示層的頁面控制也更加靈活。
大批量數(shù)據(jù)的處理涉及到系統(tǒng)的效率和穩(wěn)定性,在持久層處理批量數(shù)據(jù)的方法通常有:
1)通過JDBC來執(zhí)行原始SQL語句,此種方法最直接高效,但缺少面向對象的數(shù)據(jù)庫管理,在修改數(shù)據(jù)時無法保證緩存中Java對象與數(shù)據(jù)庫中數(shù)據(jù)的一致性,不利于代碼的移植和系統(tǒng)的擴展。
2)通過循環(huán)語句調用ibernateTemplate對象的Save,SaveorUpdate和Delete方法來實現(xiàn)批量處理數(shù)據(jù)。Hibernate對象的一級緩存只是構建在內存中,在數(shù)據(jù)量過大時多次調用Save接口可能會導致內存溢出,需要及時刷新一級緩存或是建立二級緩存。同時在更新或刪除數(shù)據(jù)時每次還要執(zhí)行查詢語句,這種方法效率低下,且容易導致系統(tǒng)出錯。
3)利用Hibernate3中提供的用于批量數(shù)據(jù)處理的HQL語句接口。其處理方式代碼如下:
以上的處理方式無須對每個記錄進行查詢取出再修改保存,避免了內存溢出,并保持對象數(shù)據(jù)的一致性,在性能上和直接用JDBC進行操作相差無幾。文中的系統(tǒng)設計采用第3種批量處理方式。
系統(tǒng)采用JFreeChart技術進行統(tǒng)計數(shù)據(jù)的圖形化顯示。JFreeChart是基于Java的開源圖表軟件開發(fā)包,可融入所有Java程序中。JFreeChart可以生成如餅圖、柱狀圖和折線圖等多種統(tǒng)計圖表,并以JPEG或PNG文件格式保存。用JFreeChart生成統(tǒng)計圖表的流程為:1)數(shù)據(jù)查詢。服務器接受用戶客戶端的查詢請求,調用接口查詢數(shù)據(jù)庫原始數(shù)據(jù),并將數(shù)據(jù)返回至業(yè)務邏輯控制模塊,再通過分析計算得到用戶需要的統(tǒng)計數(shù)據(jù)。2)創(chuàng)建數(shù)據(jù)集。通過DefaultCategoryDataset類創(chuàng)建圖像數(shù)據(jù)集DataSet對象,將統(tǒng)計數(shù)據(jù)賦予數(shù)據(jù)集。此時數(shù)據(jù)集成為圖表的數(shù)據(jù)源。3)創(chuàng)建JFreeChart對象。通過ChartFactory工廠類來創(chuàng)建JFreeChart對象,其數(shù)據(jù)源指向DataSet,并設置圖表對象的顏色、標題和字體等。4)圖像生成顯示。通過ServletUtilites類在服務端將圖表保存為PNG格式的臨時文件,并傳送至客戶端瀏覽器顯示[6]。
圖4是2009年昆山廣電全年運維記錄的查詢統(tǒng)計結果。系統(tǒng)通過Web的方式將動態(tài)數(shù)據(jù)以圖表形式顯示,使用戶一目了然,可以直接觀察數(shù)據(jù)變化趨勢。
終端運維管理系統(tǒng)在企業(yè)管理中的部署應用如圖5所示,系統(tǒng)通過對運維施工的詳細記錄并進行類別統(tǒng)計分析,向企業(yè)管理者提供各種明確的運維信息指標,管理層可及時有針對性地調整管理策略、排除隱患,實現(xiàn)更為有效的運營管理。
從圖4來看,票據(jù)打印和業(yè)務軟件的維修施工在所有運維種類中比例較高,具有代表性,涉及打印機硬件設備的維修和職員對業(yè)務軟件誤操作的更正指導。針對這些問題,可逐步進行打印設備的更新和員工的業(yè)務操作培訓。其效果可以從昆山廣電2009年各季度運維統(tǒng)計(表1)中體現(xiàn),自一季度至四季度兩種類型運維比例分別從53.1%和28.1%逐季度降至13.0%和21.7%。這說明針對性的措施使得兩種故障發(fā)生比例明顯減小。
表1 季度運維統(tǒng)計
介紹了終端運維管理系統(tǒng)基于Struts2,Spring和Hibernate框架的開發(fā)設計。3種開源框架的整合符合J2EE分層設計的理念。同時系統(tǒng)利用開源JFreeChart實現(xiàn)了統(tǒng)計數(shù)據(jù)的圖形化展示。系統(tǒng)具有較高的可擴展性和良好的可維護性。終端運維管理系統(tǒng)實現(xiàn)了對運營終端的有效信息化管理,提供了一個面向設備運維的基礎管理平臺。在后續(xù)的開發(fā)中將逐步把廣電網絡運營所涉及的光纖管道和節(jié)點機房的管理融入到平臺中。
[1]方鐘亮.昆山廣電BOSS系統(tǒng)的策略管理建設[J].電視技術,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項目實訓Spring框架技術[M].北京:清華大學出版社,2008.
[5]王軍豪,彭巖.Hibernate+Struts+Spring整合技術在電子政務中的應用[J].計算機工程與設計,2008,29(6):1409-1412.
[6]朱賀新,穆榮,盧建軍.JFreeChart的應用開發(fā)與改進[J].西安科技大學學報,2008,28(4):789-792.