public interface ORBInitializer extends ORBInitializerOperations, Object, IDLEntity
インタセプタは、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>
は、次のプロパティーを実装するクラスの文字列名です。
org.omg.PortableInterceptor.ORBInitializer
名前の競合を防ぐため、逆方向の DNS 命名規則が使用されます。たとえば、X 社に初期化子が 3 つある場合、次のプロパティーを定義できます。
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
post_init, pre_init
_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
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.