1.概述
Java,尤其是J2EE技術,在網絡管理系統中的應用已經比較普遍。很多公司都將自己的新一代網絡管理產品構建在J2EE技術平臺之上,以便實現大型網絡管理系統的分布式架構。一般的企業級或電信級網管系統都涵蓋FCAPS等基礎模塊,同時在此基礎上構建面向運營商的業務模塊,如端到端的監控和管理、基于商業規則的告警處理、工作流等等。EJB很適合實現這類模塊,很多公司的產品也已經這樣做了。但是,本文要討論的不是Java在網管服務器側的應用,而是大家討論比較少的客戶端應用。
Java桌面技術一直飽受批評。而在選擇了J2EE做網管后端后,客戶端該如何選擇呢?是選擇簡單靈巧的Web技術,還是選擇復雜強大的Swing技術呢?
2.Web客戶端
基于B/S結構的Web客戶端技術現在幾乎成為J2EE應用的主流。基于Web的應用系統優點很多,比如零安裝、占用資源少、技術簡單等。在加上Struts等優秀的開發工具支持,可以快速設計出結構合理、易于維護的程序界面。
由于B/S本質上是一個松散的、基于請求/響應機制的結構,它的缺點也很明顯:對于后端信息的主動呈現、復雜的交互圖形界面、實時監控圖表等處理起來比較吃力。考慮電信網管的以下一些情況:
- 實時呈現服務器側的告警、事件信息;
- 實時呈現某些資源的性能信息;
- 實時呈現整個被管理網絡的拓撲結構圖;
- 實時呈現單個設備的面板機架板位圖;
- 客戶端啟動時需要加載大量數據;
由于基于B/S結構的客戶端的某些局限性,使得它很難直接作為整個電信級網管系統的界面,所以它往往在一些小型的企業級網管、面向設備的EMS系統中出現,或者作為整個界面系統的補充,例如遠程告警查詢、計費信息查詢等。一個最簡單的例子是,我們常見的ADSL Modem或小型路由器中就內置了微型的基于Web的嵌入式網管(比如你可以直接通過地址http://192.168.1.1/登錄到ADSL Modem中進行配置)。
3.Swing客戶端
雖然大多數J2EE應用還是基于Web的,但Swing確實是Java標準的客戶端開發包。大家對Swing的評論也很多。但Swing的桌面應用(例如JBuilder和NetBeans)確實不多。大致說來,造成Swing不那么流行的原因有:
- 開發Swing應用很花時間。制作Swing界面需要編寫大量代碼。JBuilder等工具確實可以自動完成一些代碼,但還根本無法與Delphi等傳統開發工具效率相比。
- 掌握Swing比較難。為了跨平臺和性能等方面的考慮,Swing不得不采用Layout、LookAndFeel、非線程安全等特性。這使得對于初學者來說學習Swing門檻有點高,需要小心的處理很多底層細節,理解大量MVC概念和設計模式。
- 設計偏于復雜。Swing有著無與倫比的擴展性和靈活性。不過復雜的API使得即使某些簡單的常規問題也不那么容易找到答案(你能正確的使用進度條控件嗎?)。Swing是一個偏向理論化、學術化的工具包,它采用了很多現代的UI理論:工廠模式、渲染器、MVC、事件處理、國際化等等。但是對于大規模的常規界面開發來說,Swing的設計確實有點overkill了。
- 缺少Native特征。所以很多客戶都覺得Swing界面在顯示和使用上都有某些怪異之處,總之和本地的程序界面多少有些不同,例如速度、內存、拖拽、交點、字體甚至鼠標滾輪等都有一定的差異。
不過,使用Swing來做電信網管系統的界面還是比較合適的。Swing是Java的標準客戶端開發包,它可以方便的和后臺J2EE服務器交互,同時提供豐富的交互能力、實時告警/事件信息的通知、復雜網絡拓撲圖的呈現等。
SWT是另一個引人關注的客戶端技術。SWT是IBM為它的Eclipse集成開發環境而開發的圖形用戶界面工具。SWT可以在Eclipse環境外使用,而且提供對操作系統本地圖形用戶界面的直接訪問。因此,基于SWT的Java應用程序擁有本地的圖形用戶界面并且可以和本地別的應用程序和部件集成在一起。SWT的問題是,它還不是Java的標準技術,目前也尚在發展之中,變數很大。對于投入很大的電信網管系統來說,使用SWT似乎還有比較大的風險。
4.客戶端的幾個難點
我們的前提是,你已經決定采用J2EE和Swing技術來構建你的網管系統。對于客戶端來說,此時還有以下一些技術難點需要考慮。
4.1 網絡拓撲圖
網絡拓撲圖應該是電信網管客戶端的核心。網絡是網管系統的被管對象,網管系統自然需要用最直觀的方式呈現網絡的拓撲結構、配置信息、運行狀態等。客戶端的各種功能一般以網絡拓撲圖為核心進行展開,如通過菜單、鼠標等提供FCAPS模塊的各種功能入口。面對復雜的網絡結構和大量網絡運行信息,用圖形化的界面來呈現和操作網絡無疑是最直觀、方便的方式。
用Swing來實現網絡拓撲圖的呈現不是一件輕松的任務。尤其面對復雜、大型的電信網絡時,如何高效、直觀的呈現數量眾多、種類煩雜、有層次的各種設備、連接,以及各種告警/事件信息,確實是一個難點。我們要考慮的不光是Java和Swing技術,同時要掌握圖形學的一些技術,以及大量電信網絡知識。
解決問題的辦法:一是自己開發,二是使用第三方組件產品。有實力的大公司會考慮投入人力物力開發自己的Swing網絡拓撲組件,以便為自己眾多的網管產品使用,節省長期費用。不過更多的公司還是考慮使用第三方組件包來實現網絡拓撲圖的呈現,減少在GUI上花費的精力,將力量集中在網管業務模塊的設計和開發上。畢竟網管的任務是網絡管理,而不是圖形圖像處理。
4.2 設備面板圖
網絡是由網絡設備及其各種物理/邏輯連接構成的。用戶關心網絡中每一個設備節點的運行狀況。網管界面需要提供每一個設備的面板圖/機架板位圖。設備面板圖可以直觀的展示設備的外觀物理和邏輯結構,同時呈現各種告警、狀態信息,使用戶一目了然的了解設備運行和配置狀況。
Swing來呈現設備面板圖面臨的困難和網絡拓撲圖一樣。稍有不同的是,設備面板圖中的物理/邏輯連接比較少,但設備的種類、樣式、功能繁多,如何減少代碼開發工作量是一個要仔細考慮的問題。畢竟網管系統需要持續的增加更多的被管設備類型,而開發卻不能沒完沒了。
解決方法可以考慮自己開發或者外購第三方組件。
4.3 實時接收后端數據
簡單來說,數據的走向有兩種情況:客戶端主動從后端獲取數據;后端主動將數據通知客戶端。假如后端系統模塊以EJB的形式存在,則可以通過普通的遠程調用來創建、使用EJB業務模塊。而后端的運行信息如告警等如何主動、及時的“推”給客戶端則需要仔細研究。尤其要考慮以下各種情況:
- 客戶端數量很大時;
- 客戶端斷鏈時;
- 每個客戶端需要接收的信息不同時(比如由于權限、角色的不同所致);
有兩種方案可以考慮:一是采用EJB回調(Callback)客戶端的方式;二是采用JMS消息通知的方式。
4.4 加載啟動數據
由于網管系統非常龐大復雜,客戶端在啟動時一般需要加載大量數據進行初始化。比如,加載用戶個性化信息、網絡拓撲數據、告警信息、設備信息等等。對于一個有1000個電信設備節點的網管系統,其物理對象(如網元、架、框、板、端口、時隙等)將非常多。再加上各種物理連接(光纖、電纜、電路等)和邏輯連接(各種虛電路、各種協議鏈路、連接、通道、路由等)數量將非常大。此外客戶端還需要加載所有被管對象的告警、狀態、權限等信息。很多大型網管系統的客戶端,啟動就需要數分鐘,同時要求機器要有寬大的顯示器和服務器般的CPU、內存。
如何解決客戶端快速啟動、快速加載數據并初始化是網管開發中一個難題。簡化數據結構、實現按需加載(on-demand-load)可以有效緩解這類問題。
5.結束語
本文簡要的探討了Java客戶端技術在電信網管系統中的應用及其面對的問題。后續文章將針對本文提出的一些技術難點進行深入探討。下一次我們將討論如何使用ILOG的JTGO與賽瓦軟件的TWaver組件產品進行網絡拓撲圖、機架板位圖的設計和開發。
參考文獻:
- [1] Telecom Network Management With Enterprise JavaBeans Technology, A Technical White Paper. Sun Microsystems, Inc. 2001