名詞釋義
軟體包 javax.naming.event 的描述
在訪問命名和目錄服務時提供對事件通知的支持。
此包定義 Java Naming and Directory InterfaceTM (JNDI) 的事件通知操作。JNDI 向使用 Java程式語言編寫的應用程式提供命名和目錄功能。它被設計成與任何特定的命名或目錄服務實現無關。因此可以使用共同的方式對多種服務(新的、新出現的及已經部署的服務)進行訪問。
命名事件
此包定義 NamingEvent 類以表示由命名/目錄服務生成的事件。它還定義 Context 和 DirContext 的子接口(分別稱為 EventContext 和 EventDirContext),應用程式可以通過這些子接口註冊它們感興趣的、由上下文觸發的事件。
NamingEvent 表示在命名或目錄服務中發生的事件。有兩種命名事件:
影響名稱空間的事件(添加/移除/重命名對象)
影響對象內容的事件。
這兩種事件分別由對應的偵聽器處理:NamespaceChangeListener 或 ObjectChangeListener。
例如,應用程式可以按以下方式註冊對上下文中的對象進行的其感興趣的更改:
EventContext src =
(EventContext)(new InitialContext()).lookup("o=wiz,c=us");
src.addNamingListener("ou=users", EventContext.ONELEVEL_SCOPE,
new ChangeHandler());
...
class ChangeHandler implements ObjectChangeListener {
public void objectChanged(NamingEvent evt) {
System.out.println(evt.getNewBinding());
}
public void namingExceptionThrown(NamingExceptionEvent evt) {
System.out.println(evt.getException());
}
}
執行緒問題
執行緒問題
將事件指派給偵聽器時,偵聽器方法(如 objectChanged())可以在沒有執行調用 addNamingListener() 的某個執行緒中執行。由服務提供程式選擇要使用的執行緒。將一個事件指派給多個偵聽器時,服務提供程式可以選擇(通常建議這樣做)在各個執行緒中並發執行偵聽器方法。
當偵聽器實例調用 NamingEvent.getEventContext() 時,它必須考慮到其他執行緒可能將並發使用該上下文。同樣,在通過 addNamingListener() 註冊偵聽器時,註冊執行緒也必須考慮到類似的可能性,即服務提供程式稍後可能在新創建的執行緒中調用這些偵聽器。因為一般不保證 Context 實例是執行緒安全的,所以必須根據需要同步所有上下文操作。
異常處理
當偵聽器在上下文中註冊事件時,上下文可能需要進行一些內部處理以便收集生成事件所需的信息。例如,上下文可能需要向伺服器請求註冊在伺服器上進行的感興趣更改,這些更改最終將被轉換為事件。如果發生了阻止收集關於事件的信息的異常,則偵聽器將永遠無法獲得這些事件的通知。發生此類異常時,將觸發 NamingExceptionEvent 來通知偵聽器。偵聽器的 namingExceptionThrown() 方法被調用(如上文示例代碼所示),偵聽器被自動註銷。
包規範
以下文檔可以在 Java 技術站點找到:
JNDI API Document (Postscript)
JNDI API Document (PDF)
從以下版本開始:
1.3