public interface ORBInitializerOperations
インタセプタは、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
修飾子と型 | メソッドと説明 |
---|---|
void |
post_init(ORBInitInfo info)
ORBの初期化中に呼び出されます。
|
void |
pre_init(ORBInitInfo info)
ORBの初期化中に呼び出されます。
|
void pre_init(ORBInitInfo info)
ORBInitInfo.register_initial_reference
の呼出しを介してそれらの初期サービスが登録されます。info
- インタセプタを登録するための初期化属性とオペレーションを提供する。void post_init(ORBInitInfo info)
post_init
オペレーションの呼出しは、ORB初期化処理の最後のタスクではありません。post_init
呼出しのあとに行われる最後のタスクでは、登録されたインタセプタのリストをORBに組み込みます。したがって、post_init
の呼出し時はORBにそれらのインタセプタは含まれていません。post_init
内部からORBを介して呼出しを行なっても、その呼出しに対して起動される要求インタセプタはありません。同様に、IORが作成されるオペレーションを実行しても、起動されるIORインタセプタはありません。
info
- インタセプタを登録するための初期化属性とオペレーションを提供する。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.