-
- すべてのスーパー・インタフェース:
IDLEntity
,Object
,ORBInitializerOperations
,Serializable
public interface ORBInitializer extends ORBInitializerOperations, Object, IDLEntity
インタセプタの登録とORBの初期化を容易にします。インタセプタは、ORBサービスがORB処理にアクセスして、事実上ORBの一部になるための手段となるよう意図されています。 インタセプタはORBの一部であるため、
ORB.init
がORBを返すときは、インタセプタの登録が完了しています。ORB.init
への呼出しで返されたあとは、インタセプタはそのORBに登録できません。インタセプタの登録は、
ORBInitializer
インタフェースを実装する関連付けられたORBInitializer
オブジェクトを登録する方法で行われます。 ORBは、初期化しているときに、登録されている各ORBInitializer
を呼び出し、そのインタセプタの登録に使用されるORBInitInfo
オブジェクトをそれに渡します。JavaでORB初期化子を登録する
ORBInitializersは、Java ORBプロパティを経由して登録されます。
プロパティ名は、次の形式をとります。
org.omg.PortableInterceptor.ORBInitializerClass.<Service>
<Service>
は、次のプロパティを実装するクラスの文字列名です。
名前の競合を防ぐため、逆方向のDNS命名規則が使用されます。 たとえば、X社に初期化子が3つある場合、次のプロパティを定義できます。org.omg.PortableInterceptor.ORBInitializer
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
で始まるこれらのORBプロパティが収集され、各プロパティの<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
インタセプタ登録時の注意
要求インタセプタは、ORBベースで登録されます。
オブジェクトごとの仮想インタセプタを実現するには、遮断点におけるターゲット上のポリシー問い合わせ、作業の必要性の有無を決定します。
POAごとの仮想インタセプタを実現する場合は、各POAを異なるORBでインスタンス化してください。 インタセプタは管理しやすいように順序付けられていますが、インタセプタの登録と順序は何の関係もありません。 要求インタセプタは、サービス・コンテキストに関係しています。 サービス・コンテキストには順番がないため、要求インタセプタに順番を付ける必要はありません。 IORインタセプタはタグ付きコンポーネントに関係しています。 タグ付きコンポーネントにも順番がないため、IORインタセプタに順番を付ける必要はありません。
登録コード内ではORBを使用する(
orb_id
を指定してORB.init
を呼び出す)ことは避けてください。 ORBの初期化中に登録が行われるため、この状態にあるかぎり、このORBの呼出し結果は保証されません。- 関連項目:
ORBInitInfo
-
-
メソッドのサマリー
-
インタフェース 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
-
インタフェース org.omg.PortableInterceptor.ORBInitializerOperationsで宣言されたメソッド
post_init, pre_init
-
-