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