|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface ORBInitializer
便於註冊 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,則它能夠定義以下屬性:
org.omg.PortableInterceptor.ORBInitializerClass.com.x.Init1
org.omg.PortableInterceptor.ORBInitializerClass.com.x.Init2
org.omg.PortableInterceptor.ORBInitializerClass.com.x.Init3
org.omg.PortableInterceptor.ORBInitializerClass
開頭的屬性,提取每個屬性的 <Service>
部分,然後將該 <Service>
字元串作為類別名來實例化某個物件,並對該物件調用 pre_init
和 post_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。