20.2.2 サーバインタセプタ

4種類のサーバインタセプタがあります。

サーバインタセプタの詳細については,「19. ポータブルインタセプタの使用」を参照してください。

<この項の構成>
(1) POALifeCycleInterceptor
(2) ActiveObjectLifeCycleInterceptor
(3) ServerRequestInterceptor
(4) IORCreationInterceptor

(1) POALifeCycleInterceptor

POALifeCycleInterceptorオブジェクトはPOAが(create()メソッドによって)生成されるたび,または(destroy()メソッドによって)デストラクトされるたびに呼び出されるグローバルインタセプタです。

コードサンプル20-3 POALifeCycleInterceptorインタフェース(Java)

package com.inprise.vbroker.InterceptorExt;
public interface POALifeCycleInterceptor {
  public void create(org.omg.PortableServer.POA poa,
     org.omg.CORBA.PolicyListHolder policies_holder,
     IORValueHolder iorTemplate,
     InterceptorManagerControl control);
  public void destroy(org.omg.PortableServer.POA poa);
}

(2) ActiveObjectLifeCycleInterceptor

ActiveObjectLifeCycleInterceptorオブジェクトは,オブジェクトが(createメソッドによって)アクティブオブジェクトマップに追加された場合,またはオブジェクトが(destroyメソッドによって)停止し,エーテライズされたあとに呼び出されます。インタセプタは,POALifeCycleInterceptorによって,POA生成時にPOAごとに登録できます。このインタセプタは,POAにRETAINポリシーがある場合だけ登録できます。

コードサンプル20-4 ActiveObjectLifeCycleInterceptorインタフェース(Java)

package com.inprise.vbroker.InterceptorExt;
public interface ActiveObjectLifeCycleInterceptor {
  public void create(byte[ ] oid,,
        org.omg.PortableServer.Servant servant,
        org.omg.PortableServer.POA adapter);
  public void destroy (byte[ ] oid,,
        org.omg.PortableServer.Servant servant,
        org.omg.PortableServer.POA adapter);
}

(3) ServerRequestInterceptor

ServerRequestInterceptorオブジェクトは,リモートオブジェクトのサーバインプリメンテーションの起動中のさまざまな段階,例えば(preinvokeメソッドによる)起動前,(postinvoke_premarshalおよびpostinvoke_premarshalメソッドによる)応答のマーシャル前後の起動後に呼び出されます。このインタセプタは,POAごとに,POAの生成時にPOALifeCycleInterceptorオブジェクトによって登録できます。

コードサンプル20-5 ServerRequestInterceptorインタフェース(Java)

package com.inprise.vbroker.InterceptorExt;
public interface ServerRequestInterceptor {
  public void preinvoke(org.omg.CORBA.Object target,
     String operation,
     ServiceContext [ ] service_contexts,
     InputStream payload,
     Closure closure);
  public void postinvoke_premarshal(org.omg.CORBA.Object target,
     ServiceContextListHolder service_contexts_holder,
     org.omg.CORBA.Environment env,
     Closure closure);
  public void postinvoke_postmarshal(org.omg.CORBA.Object target,
     OutputStream payload,
     Closure closure);
  public void exception_occurred(org.omg.CORBA.Object target,
     org.omg.CORBA.Environment env,
     Closure closure);
}

(4) IORCreationInterceptor

IORCreationInterceptorオブジェクトは,POAが(createメソッドによって)オブジェクトリファレンスを生成する場合に呼び出されます。このインタセプタは,POAごとに,POAの生成時にPOALifeCycleInterceptorオブジェクトによって登録できます。

IDLサンプル20-1 IORCreationInterceptorインタフェース(Java)

package com.inprise.vbroker.InterceptorExt;
public interface IORCreationInterceptor {
  public void create(org.omg.PortableServer.POA poa,
        IORValueHolder ior);
}