JavaTM 2 Platform
Standard Ed. 5.0

org.omg.PortableInterceptor
インタフェース ORBInitializerOperations

既知のサブインタフェースの一覧:
ORBInitializer

public interface ORBInitializerOperations

インタセプタの登録と ORB の初期化を容易にします。

インタセプタは、ORB サービスが ORB 処理にアクセスして、事実上 ORB の一部になるための手段となるよう意図されています。インタセプタは ORB の一部であるため、ORB.init が ORB を返すときは、インタセプタの登録が完了しています。ORB.init の呼び出しによって ORB が返されたあとでインタセプタを ORB に登録することはできません。

インタセプタの登録は、ORBInitializer インタフェースを実装する関連付けられた ORBInitializer オブジェクトを登録する方法で行われます。ORB は、初期化しているときに、登録されている各 ORBInitializer を呼び出し、そのインタセプタの登録に使用される ORBInitInfo オブジェクトをそれに渡します。

Java での ORB イニシャライザの登録

ORBInitializers は、Java ORB プロパティを介して登録されます。

プロパティ名の形式は、次のとおりです。

org.omg.PortableInterceptor.ORBInitializerClass.<Service>
ここでの <Service> は、実装を行うクラスの文字列名です。
org.omg.PortableInterceptor.ORBInitializer
名前の重複を避けるために、逆の DNS 命名規則が使用されます。たとえば、X という会社にイニシャライザが 3 つある場合は、次のプロパティを定義できます。 ORB.init の実行中は、org.omg.PortableInterceptor.ORBInitializerClass で始まるこれらの ORB プロパティが収集され、各プロパティの <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

インタセプタの登録に関する注意事項

要求インタセプタは、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 の初期化中に呼び出されます。
 

メソッドの詳細

pre_init

void pre_init(ORBInitInfo info)
ORB の初期化中に呼び出されます。インタセプタによって登録された初期サービスが他のインタセプタによって使用されるものと考えられる場合は、この時点で ORBInitInfo.register_initial_reference の呼び出しを介してそれらの初期サービスが登録されます。

パラメータ:
info - インタセプタを登録するための初期化属性とオペレーションを提供します。

post_init

void post_init(ORBInitInfo info)
ORB の初期化中に呼び出されます。サービスがその初期化の一環として初期参照を解釈処理する必要がある場合は、この時点ですべての初期参照が利用できるものとします。

post_init オペレーションの呼び出しは、ORB 初期化処理の最後のタスクではありません。post_init 呼び出しのあとに行われる最後のタスクでは、登録されたインタセプタのリストを ORB に組み込みます。したがって、post_init の呼び出し時は ORB にそれらのインタセプタは含まれていません。post_init 内部から ORB を介して呼び出しを行っても、その呼び出しに対して起動される要求インタセプタはありません。同様に、IOR が作成されるオペレーションを実行しても、起動される IOR インタセプタはありません。

パラメータ:
info - インタセプタを登録するための初期化属性とオペレーションを提供します。

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。