モジュール java.corba

インタフェースORBInitializerOperations

  • 既知のすべてのサブインタフェース:
    ORBInitializer

    public interface ORBInitializerOperations
    インタセプタの登録と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>は、次のプロパティを実装するクラスの文字列名です。
    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
    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
    • メソッドの詳細

      • 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 - インタセプタを登録するための初期化属性とオペレーションを提供する。