Event Listener)

来源:互联网 发布:multisim for mac下载 编辑:程序博客网 时间:2024/04/29 20:59

目錄 [隱藏] 1 簡介 2 指示相關的類別架構 3 指示過濾 (Indication Filter) 4 事件處理 (Event Handler) 5 訂閱 (Subscription) 6 事件監聽 (Event Listener) 7 自我練習 8 參考資料 [編輯]簡介所有系統中,當事件狀況的發生會自動引起警報。有些引起操作者注意的警報,對某些需求而言,需要再做檢查的動作或是調閱過去監控的紀錄或是監聽設備(FCAPS中的效能〝P〞),對大多數需求是可以忽視的。每一次特別的警示的處理方式可以由每一分的差異而有所不同:一旦發生警示,或許一位操作者會試圖阻止一個不易捉摸錯誤並且做警示的動作;或是在最近還沒有其他錯誤發生狀況下,部分特別的錯誤僅僅發生某些重要的日子。 WBEM伺服器提供界面來允許操作者能持續不斷且確切地說明他們想要被通知的錯誤訊息,這些在事件模組中過去是以建立監控事件來做類別。 圖 8.1 過濾及操作處理流程在圖8.1中每一小步驟包含在許多軟硬體的組合上事件的發生,並將所顯示的數據呈現在操作者的螢幕上。 指示提供者 當發現警報並且把它遞給WBEM伺服器。從CIM_Indication中的類別中所顯示的指示實例。 過濾機 WBEM伺服器必須商議事件是否指示滿足預先規定的樣本。過濾流程是由CIM_IndicationFilter的類別中所顯示的過濾實例。過濾的舉例,如:當選擇全部事件起因於該MyTemperatureAlarm,當嚴重 == 緊急和溫度>180。 簽署 WBEM伺服器商議任何操作者是否對被指示通知感興趣。簽署是CIM協會從IndicationSubscriptions的實例。 處理機 WBE伺服器負責傳送通知。處理機是從CIM_IndicationHandler中的類別中所顯示的指示實例。 監聽者 代表那些操作者接收到指示。 消費者 將CIM所顯示出的流程結果以軟體將內容操作顯示在螢幕上。或將它寫到一個檔案等。 整個流程在下圖8.2所顯示。當時間流程假定為由上到下。活動的流程大致狀況顯示在下圖: 圖 8.2 活動流程描述如下: 操作者(或是WBEM客戶端,如 mof 編譯器) 建立一個類別的實例,用來表示處理機。 操作者建立一過濾器種類的實例,精確地描述操作者所感興趣的類別。 操作者建立一個關連,把過濾器和處理機連結起來。 當事件發生時,相關提供者 (一個指示提供者) 造成一個指示的實例。 WBEM伺服器察覺到這個事件,並檢查過濾器,確定過濾器允許它通過。於是透過關連性找出哪台處理機 (如果有的話) 對這次事件感興趣。 WBEM伺服器將選擇的訊息,從指示實例傳送到處理機。 處理機再把訊息傳遞給監聽者並輸出。 [編輯]指示相關的類別架構 圖 8.3 說明指示種類階層的上層結構。 圖 8.3 指示類別 CIM_Indication是一個抽象化的類別,但無法生成實例,是所有指示器的父類別,有3 個子類別︰ CIM _ ClassIndication 習慣用於描述在操作類別時,所發生的事件起因︰ 他們的創造,刪除,和 修改。 這樣的話,那些CIM伺服器能夠有效擔任指示器提供者,當類別被操作時,建立一個指示。 CIM _ InstIndication 習慣用於描述在建立實例時,所發生的事件起因。 像CIM_ ClassIndication一樣,包含實例的創造,刪除和修改,並包括實例中方法的引用。 WBEM伺服器再一次作為指示提供者。一位監聽者可能被建立去獲得有關類別的指示,以及透過預定的CIM _ InstIndications和CIM_ClassIndications 實例操作,或許建立一份日誌檔案作為安全追蹤。 CIM _ ProcessIndication 用於所有 "外部" 事件 – 因為操作模組而沒觸發的事件。 原則上,這類指示沒有實際被要求,因為外部發生的所有事件可以被對應到操作的模型 (例如:一個實例的建立)。實際上, 大多數事件處理確實透過CIM_ProcessIndication,因為這個類別包含一個警報通知的大部分標準特性需求的叢集︰ 見 圖 8.3 . 這類指示被設計來發現作業系統或者電信堆內部的警報,而且儘可能的不與CIM物件本身的訊號系統有直接的關連。 在圖8.3中,CIM _ ProcessIndication的子類別的說明: CIM_SNMPTrapIndication ??? CIM_AlertIndication ??? CIM_J2eeNotification ??? [編輯]指示過濾 (Indication Filter) 一旦指示類別被定義去描述以上實例,它必需建立一個過濾器,容許特定類型的指示通過。 名字:過濾器的名字。能鑑別一個過濾器並允許它被重新使用。 查詢:這是遛濾器的實體,其中定義了哪些特定的指示可通過或者被丟棄。 過濾器的格式取決於選擇的語言表示 (可參考QueryLanguage)。舉個例子,使用WQL, 可能如下︰ SELECT Temperature, Name FROM TemperatureIndication WHERE Name != "Alison" 這個範例表示,從溫度指示中,過濾出名稱不是“Alison”的烤麵包機,這個過濾器會將其名稱與溫度,傳送到相對應的監聽器。 查詢語言。 原則上,查詢語言可以是WBEM伺服器能理解的任何語言。 實際上,有兩種查詢語言常被使用︰ 網路查詢語言 (WQL) 與ANSI 所定義的SQL語言屬同一語系,主要擴展SQL語言來支援CIM 物件。 在WQL裡的一個查詢看起來如下︰ Select * from Solaris_DiskDrive Where Storage_Capacity = 1000 CIM查詢語言 (CQL) 在DMTF的文件DSP0202中,定義這種語言(查詢說明) 並且也基於SQL和W3C (World Wide Web Consortium) 所定義XML查詢語言。 建立一個事件過濾器 建立一個事件過濾器的步驟如下: 建立CIM_IndicationFilter 類別實例 CIMClass cimfilter = cc.getClass( new CIMObjectPath ("CIM_IndicationFilter"), true, true, true, null); 給定事件過濾器的名字 Name = "filter_all_new_diskdrives" 建立WQL字串,查詢哪個事件指示需回覆 String filterString = "SELECT * FROM CIM_InstCreation WHERE sourceInstance "; 在cimfilter中設定初始值來識別過濾器名稱,根據查詢字串選擇CIM事件,以及用查詢語言 (WQL) 來處理字串 ci.setProperty ("Name", new CIMValue ("filter_all_new_diskdrives")); ci.setProperty ("Query", new CIMValue (filterString)); ci.setProperty ("QueryLanguage", new CIMValue ("WQL");) 建立一個cimfilter實例, 名為filter並且把它儲存在CIM 物件管理倉庫中 CIMObjectPath filter = cc.createInstance ( new CIMObjectPath(), ci); [編輯]事件處理 (Event Handler) 這種方式是在 WBEM伺服器的處理過程中,喚起一台處理機。 通常處理機將看起來像是提供者的特別的類型,並擁有一個相似的界面,如像允許指示實例 handleIndication( ) 的方法。 主要問題是處理機怎樣找到它的相關監聽者。 在更早期的事件共同模型版本裡,類別CIM_IndicationHandler被定義來保存關於特別的處理機和他們所關聯監聽者的訊息。 在2.8版中,這種類別已經被修正並替換成 CIM_ListenerDestination,而CIM_IndicationHandler變成它的子類別。 這說明了類別被討論並且替換的方法︰ CIM_IndicationHandler仍然在模型裡存在,並且因為它已經被移動,沿自它的以前的位置,所有現有的實施的階層將繼續工作。 監聽者實際位址 (例如," localhost︰5988 /myHandler1") 不存在CIM_ListenerDestination 實例中,但是在一個其子類中,子類取決於協議。 目前只 CIM_ListenerDestinationCIMXML被確定。 通常當WBEM伺服器喚起一台處理機,它將傳遞給處理機一個指示的實例以及一個CIM_ListenerDestination的實例。 由於這兩訊息,處理機能改變訊息格式,為標準輸出格式,並傳遞給它的監聽者。 CIMClass filterdelivery = cc.getClass(new CIMObjectPath("CIM_IndicationSubscription"), true, true, true, null); ci = filterdelivery.newInstance(): ci.setProperty("filter", new CIMValue(filter)); ci.setProperty("handler", new CIMValue(delivery)); CIMObjectPath indsub = cc.createInstance(new CIMObjectPath(), ci); [編輯]訂閱 (Subscription) 客戶端應用程式能訂閱協議,當CIM 事件發生時能被通知。 訂閱是一種對某個事件有興趣的宣告,是一種事件指示,目前提供者不能訂閱事件指示。 一個應用程式訂閱CIM事件指示,描述內容如下︰ 想要預定的指示。 處理機對CIM物件管理交付指示。 事件是一個實例,它屬於CIM_Indication類別的子類別。只有當一位客戶端訂閱時某一事件,則事件只產生一個指示。應用程式能建立一個或更多事件過濾器,來對映一台或更多事件處理機。事件指示直到建立事件簽署才能被交付。 建立一個CIM_Listener 實例。 建立一個CIM_IndicationFilter實例。 建立一個CIM_IndicationHandler實例。 關聯CIM_IndicationFilter 與 CIM_IndicationHandler。 [編輯]事件監聽 (Event Listener) 一旦以上描述的所有基礎設施都已經建立,如過濾器,訂閱和處理機都設定完成,指示開始傳遞到處理機。處理機然後開始傳遞到監聽者,對那些監聽者來說,那些監聽者不能被假冒,因為在CIM namespaces 中存放者監聽者的資訊。 // Add this client as a listener for an event cl = new Listener(); cc.addCIMListener(cl);

原创粉丝点击