自動完成事件內容
藉由設定內容和原則,即可自動完成事件內容。
執行這項作業的原因和時機
在某些狀況中,您可能希望為您建立的每一個事件自動設定一部分事件內容資料。
這種方式可用來填寫某些不變的標準值(如應用程式名稱),
或基於可取自執行時期環境的資訊(如建立時間或執行緒資訊)來設定某些內容。您也可以根據商業規則來設定控管事件內容的原則;
比方說,您可能需要含有特定延伸規格名稱的任何事件,其嚴重性皆設為某個值。
您可以建立內容處理常式來執行這項作業。內容處理常式是基於您要使用的任何原則自動設定每一個事件的內容值的物件。只要事件仍然符合 Common Base Event 規格,共用事件基礎架構並不會限制內容處理常式修改事件資料的方法。
為了確保所有的事件來源皆符合相同的原則,
您可以建立與內容處理常式相關聯的事件 Factory (利用 EventFactoryFactory),
接著將所建立的事件 Factory 連結至 JNDI 名稱空間中。您不需建立其自己的事件 Factory ,
事件來源接著可執行 JNDI 查閱來存取已存在的事件 Factory ,而不需要瞭解內容處理常式的內容。
如果之後您的商業規則變更,您可以一次修改內容處理常式。
事件來源不需要執行任何動作,即可完成內容。如果事件 Factory 與內容處理常式相關聯,
其建立的每一個事件都會附帶該內容處理常式的參照。
當事件送出給發射器時,該事件會呼叫內容處理常式的 completeEvent() 方法,將參照傳給自己。這樣可確定事件來源完成設定事件特定內容之後,但是在發射器驗證及處理事件之前,將正確的原則套用到事件中。
註: 當事件從一個程序傳輸到另一個程序時,內容處理常式的參照不會隨著傳輸。
這是因為內容完成需依賴產生事件的環境,而其他地方可能沒有提供這項必要資訊。這項限制不會影響應用程式之間的本端呼叫(比方說,利用本端介面呼叫 Enterprise Bean)。
如果要建立內容處理常式,請遵循下列步驟:
這項作業的步驟
- 建立新的 Java 類別來實作 org.eclipse.hyades.logging.events.cbe.ContentHandler 介面。 這個介面定義了單一方法,稱為 completeEvent(CommonBaseEvent);其參數為要完成其內容的事件。在這個方法的實作中,
您可以使用 CommonBaseEvent 的 getter 和 setter 方法,依照套用的任何原則來處理事件內容資料。
註: 當事件來源使用 JNDI 來擷取事件 Factory 時,
即會傳回內容處理常式以及該事件 Factory 。
基於這個原因,內容處理常式必須可序列化。
下列範例是一個簡單的內容處理常式,其會自動設定每一事件的延伸規格名稱:
import java.io.Serializable;
import org.eclipse.hyades.logging.events.cbe.*;
public class BusinessContentHandler
implements ContentHandler, Serializable {
public void completeEvent(CommonBaseEvent event)
throws CompletionException {
event.setExtensionName("business");
}
}
- 使內容處理常式與事件 Factory 相關聯。 要執行這項作業,
請於建立事件 Factory 時指定內容處理常式:
EventFactory eventFactory =
(EventFactory) EventFactoryFactory.createEventFactory(contentHandler);
傳回的事件 Factory 將與指定的內容處理常式永久關聯。