JavaTM 2 Platform
Standard Ed. 6

org.omg.PortableInterceptor
介面 ORBInitializer

所有父級介面:
IDLEntity, Object, ORBInitializerOperations, Serializable

public interface ORBInitializer
extends ORBInitializerOperations, Object, IDLEntity

便於註冊 interceptor 和初始化 ORB。

ORB 服務憑借 Interceptor 這一方法獲得進行 ORB 處理的權力,Interceptor 實際上已成為 ORB 的一部分。因為 Interceptor 是 ORB 的一部分,所以當 ORB.init 返回 ORB 時,應該已經註冊了 Interceptor。在已經調用 ORB.init 返回 Interceptor 後,不能在 ORB 上註冊 Interceptor。

通過註冊實作 ORBInitializer 介面的關聯的 ORBInitializer 物件才能註冊 Interceptor。ORB 在初始化時,應該調用每個已註冊 ORBInitializer,並將用來註冊其 Interceptor 的 ORBInitInfo 物件傳遞給該 ORB。

用 Java 註冊 ORB Initializer

ORBInitializer 通過 Java ORB 屬性註冊。

屬性名稱的形式如下:

org.omg.PortableInterceptor.ORBInitializerClass.<Service>
其中 <Service> 是實作以下類別的字元串名稱:
org.omg.PortableInterceptor.ORBInitializer
要避免名稱衝突,應使用與 DNS 名稱約定相反的約定。例如,如果 X 公司有三個 initializer,則它能夠定義以下屬性: 在 ORB.init 期間,應該收集那些以 org.omg.PortableInterceptor.ORBInitializerClass 開頭的屬性,提取每個屬性的 <Service> 部分,然後將該 <Service> 字元串作為類別名來實例化某個物件,並對該物件調用 pre_initpost_init 方法。如果存在異常,ORB 應忽略這些異常並繼續進行。

範例

例如,X 公司編寫的客戶端登陸可能具有以下 ORBInitializer 實作:

 package com.x.logging;
 
 import org.omg.PortableInterceptor.Interceptor; 
 import org.omg.PortableInterceptor.ORBInitializer; 
 import org.omg.PortableInterceptor.ORBInitInfo; 
 
 public class LoggingService implements ORBInitializer { 
     void pre_init( ORBInitInfo info ) { 
         // Instantiate the Logging Service s Interceptor. 
         Interceptor interceptor = new LoggingInterceptor(); 

         // Register the Logging Service s Interceptor. 
         info.add_client_request_interceptor( interceptor ); 
     } 
 
     void post_init( ORBInitInfo info ) { 
         // This service does not need two init points. 
     } 
 } 
要運行使用此日誌記錄服務的名為 MyApp 的程序,使用者可以鍵入:
java -Dorg.omg.PortableInterceptor.ORBInitializerClass.com.x.Logging.LoggingService MyApp

註冊 Interceptor 的有關注意事項:

每個 ORB 都要註冊請求 Interceptor。

要獲得虛擬的針對物件的 Interceptor,應在截取點內的目標上查詢策略以確定它們是否應該執行某些操作。

要獲得虛擬的針對 POA 的 Interceptor,應使用不同的 ORB 實例化每個 POA。雖然在管理上 Interceptor 是有序的,但註冊 Interceptor 時並不需要按順序進行。請求 Interceptor 參與服務上下文。服務上下文沒有順序,因此請求 Interceptor 也沒有必要有順序。IOR Interceptor 參與帶標記的元件。帶標記的元件沒有順序,因此 IOR Interceptor 也沒有必要有順序。

註冊程式碼應該避免使用 ORB(即使用提供的 orb_id 調用 ORB.init)。因為註冊發生在初始化 ORB 期間,對出於此狀態的 ORB 進行調用的結果是不確定的。

另請參見:
ORBInitInfo

方法摘要
 
從介面 org.omg.PortableInterceptor.ORBInitializerOperations 繼承的方法
post_init, pre_init
 
從介面 org.omg.CORBA.Object 繼承的方法
_create_request, _create_request, _duplicate, _get_domain_managers, _get_interface_def, _get_policy, _hash, _is_a, _is_equivalent, _non_existent, _release, _request, _set_policy_override
 


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only