ajax
文章提示 AJAX和JMX分別位於系統管理棧的兩個對立端。然而,如今AJAX模型已普遍存在於豐富的瀏覽器用戶端。這使得該模型在構架領域為在問題解析管道中提高支援模式所具有的優點變得模糊起來。
本文將詳細描述一種AJAX架構的優點-它可以把管理狀態"廣播"到一個能夠使用瀏覽器的使用者基上而不必等待頁面更新。
這種架構是一個通用模型的擴充-可用於把JMX事件和屬性記載到一個伺服器端記錄檔中;而且,這種變化進一步把管理資訊記錄或"廣播"到(支援AJAX的)使用者基。
在本文中,我們將特別分析AJAX請求/響應模型和把管理資料繪製到頁面的過程,還有漂亮的JMX通知架構-所有這些都通過一個裝配的servlet清晰地整合到一起。
接下來我們還會粗略地看一下通常在標準AJAX討論中所不及的內容-安全和容量模型。
本文中,我們使用BEA WebLogic 8.1用作這些軟體的發布平台,儘管這裡的架構和方法也適用於其它J2EE應用程式伺服器。
一、關鍵需求
針對於企業Java和J2EE應用程式的系統管理棧形成了問題解析管道的一部分-在此,Java/J2EE應用程式與一個管理層進行互動以監視潛在的問題,例如應用程式伺服器線程饑餓,堆溢出或到一個資料庫的陳舊串連等。
管理層通常包括JMX Mbeans-要裝配並使用哪個應用程式,以及其它一些產品例如讀取這些JMX屬性的Wily Introscope和HP OpenView-如果超過一個事先配置的門檻值,那麼它能夠從Wily中得到警告。
這個模型存在一個問題-如果系統在後台出現問題的話,針對JMX管理的伺服器端模式將無法協助瀏覽器端客戶,因為這種模型全部是以伺服器為中心的。例如,如果一新的J2EE Web應用程式要被發布或該應用程式在幾分鐘內將要關閉-因為Wily檢測到一個問題,那麼在瀏覽器上的使用者並不知道發生了這麼緊迫的管理事件!
通過全面地允許使用者進入問題解析管道,系統管理員可以管理終端使用者體驗-通過把管理資訊廣播到使用者基並在一定程度上控制使用者的行為來實現。
為了通過HTTP協議實現把管理資訊傳遞給客戶,存在這樣一個問題:如果用戶端使用者不是公開地使用GET或POST更新頁面而是偷偷地更新一隱形架構,那麼管理方面如何把管理資訊發送到一個HTTP客戶?
二、方案描述
本文要實現一簡單的AJAX指令碼,它將從MBean伺服器取得以XML訊息形式的管理資訊並經由一個servlet解決這個問題。這些管理資訊必須被加以管理並且被反饋到所有的參與其中的能夠接收AJAX請求的應用程式伺服器。
在伺服器端:
·一個J2EE應用程式伺服器簇用於服務於來自基於瀏覽器的使用者和線上交易處理(OLTP)使用者基(例如有兩個或四個伺服器)的請求。通過使用一個第三方Web伺服器,使用者請求被跨越該簇(OLTP簇)平衡裝載。
·一個標準MBean(UserWeb)用於儲存管理資訊,如加上中繼資料屬性的管理訊息。該Mbean宿主在J2EE"管理"伺服器和在OLTP簇上的J2EE伺服器上。
·在管理伺服器上,由系統管理員使用針對JMX的HTMLAdaptor來設定警告狀態,稍候再試(在相鄰XMLHttp-Requests之間的間隔)以及警告訊息-例如"System Down in 10 Minutes."。然後,管理員把該狀態廣播到管理伺服器上的Mbeans-由該管理伺服器來把它們的狀態重設到master管理狀態。
在用戶端:
·支援AJAX的用戶端使用一個XMLHttpRequest(它調用一個servlet以返回XML訊息形式的相關的MBean值)來檢索狀態、稍候再試和訊息。
·然後由用戶端JavaScript分析這個XML訊息,重設稍候再試並且用管理訊息重畫螢幕的一部分。
·在retry-interval秒之後,該客戶進行另外一個XMLHttpRequest並且客戶周期再次開始。
三、 基本架構
圖1顯示出全面的方案架構,其中表1描述了相應的基本架構元素。
元素 |
描述 |
標準MBean(UserWeb) |
用於警告狀態和訊息的屬性,還有getter/setters和一個方法來廣播(通知)MBean狀態 |
MBean助理(UserWebMBeanHelper) |
封裝裝配的代碼以便於使用UserWeb MBean |
MBean伺服器 |
J2EE容器內的MBean伺服器 |
Servlet(Admin.java) |
裝配的Servlet,基於UserWebMBean的內容格式化XML響應 |
事件聽者 (ManagementListener.java) |
Singleton-它用管理伺服器上的UserWeb MBean把自己註冊為一個"alert.broadcast"類型事件的聽者 |
用戶端AJAX引擎(admin.js) |
用於管理XMLHttpRequest-/-repaint周期的JavaScript |
用戶端描述(main.jsp) |
裝配的JSP。AJAX基於MBean屬性啟動該頁面 |
HTML適配器封裝器(StartHTMLAdaptor.java) |
在聽連接埠+100啟動一個HTMLAdaptorServer以實現到MBeans的HTTP存取 |
表1 架構元素
(一) JMX通知模型
這個模型包含兩個組件:
·MBean-為本地和遠程註冊的聽者啟用事件
·聽者-它用MBean註冊自己以聽取由該MBean所產生的事件
第一個由UserWeb Mbean來實現,第二個由ManagementListener來實現。
(二) 系統管理使用者資訊的JMX MBean
UserWeb標準的MBean是一個簡單類-它包含關鍵的屬性和方法(表2)。
元素 |
描述 |
AlertEnabled |
如果AlertStatus>-1,則為真 |
AlertMessage |
使用者將在螢幕上看到的資訊 |
AlertReady |
如果AlertStatus>0,則為真 |
CallBack |
在每兩個XMLHttpRequest之間的毫秒數 |
BroadcastState |
方法-它用一個事件(alert.broadcast)(它把Mbean狀態作為事件數目據傳遞)來通知在本地/遠程JVM上的所有登入的聽者 |
表2 UserWeb Mbeam屬性和方法
(三) 事件聽者
Singleton ManagementListener類實現了Weblogic.management.RemoteNotificationListener-它擴充了javax.management.NotificationListener和java.rmi.Remote以允許在一個遠程WebLogic JVM上的事件通過使用RMI技術被通知到遠程聽者。
在應用程式伺服器啟動時,在每個JVM上的一個聽者用管理伺服器上的UserWeb MBean註冊自己。
(四) MBean助理
使用一個助理類來對Mbeans加以封裝是個不錯的注意。這樣,我們可以從裝配的代碼中調用這個助理從而調用MBean方法。
UserWebMBeanHelper類被用作UserWeb Mbean的封裝。所有助理的祖先是ApplicationMBeanHelper,它負責:
·尋找本地和遠程MBean伺服器
·調用這些伺服器以取得/設定MBean屬性並且調用MBean方法
為了確保相匹配,MBean和MBean助理都實現介面UserWebMBean。
(五) 裝配Servlet
一個應用程式可以被裝配以使用JMX。用AOP術語來說就是,把管理方面織入到應用程式代碼中。本文中第一個JMX裝配點是一個HTTPServlet。這個servlet是AJAX請求的目標,並且它實現一個控制器模式-它可以被精心製作以使用簡單的請求參數來處理其它AJAX請求。
從一個MVC的角度來看,該模型是UserWeb Mbean,視圖是支援AJAX的(JSP)頁面,而控制器是被裝配的servlet。
(六) 用戶端AJAX引擎
這是一組JavaScript函數,它們:
·管理XMLHttpRequest並且響應處理重複性操作
·分析由XMLHttpRequest返回的XML訊息
·用XML訊息內容重畫螢幕
客戶描述
這是main.jsp頁面-它包含用戶端AJAX引擎和可重畫的部分。
(七) 序列
實質上,伺服器端序列參與管理管理屬性的設定並且把這些屬性廣播到所有的感興趣(聽)的JVM上。而,用戶端序列參與檢索這些屬性並且以管理指定的間隔時間用重要的管理資訊來重畫該HTML頁面。
(八) JMX通知(伺服器序列)
·UserWeb MBeans和MBean事件聽者在應用程式伺服器啟動時被使用相應的啟動類建立並且註冊
·管理員設定"master"UserWeb MBean屬性(警告訊息和稍候再試),然後向宿主在遠端管理伺服器上的聽者廣播或通知這一狀態
·遠程聽者處理通知-通過把master(通知)資料複製到本地UserWeb MBean實現
(九) XMLHttpRequest查詢(客戶序列)
·支援AJAX的用戶端間隔地調用一個servlet以查詢管理狀態
·該servlet讀取本地UserWeb MBean屬性,然後把它們插入到一個XML訊息中並且返回該XML訊息作為一個到瀏覽器客戶的XML響應(以後討論可供選擇的訊息格式)
·然後,AJAX客戶分析XML文檔,提取警告和稍候再試等訊息,重畫螢幕,然後使用這一稍候再試來設定下一個XMLHttpRequest的延遲時間。
下面詳細描述其中的每一步。
[1] [2] [3] 下一頁