| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) | 
			目次
			索引
			![]()  
		 | 
	
| 第6章 アプリケーションの開発(Java言語) | > 6.10 サーバアプリケーションのプログラミング(POA概要) | 
 ServantManagerオブジェクトは、リクエスト受信時にServantオブジェクトの生成/削除や検索を可能にする機能です。ServantManagerオブジェクトの各メソッドの実装はユーザ自身で作成します。作成したServantManagerオブジェクトはPOAオブジェクトに登録しておきます。
 POAオブジェクトがリクエストを受信した際、AOMにオブジェクトIDが一致するServantオブジェクトが登録されていない場合に、POAオブジェクトはServantManagerオブジェクトのメソッドを呼び出し、Servantオブジェクトの生成/削除、検索を依頼します。
 ServantManagerオブジェクトは、Servantオブジェクトの生成/削除を行うServantActivatorオブジェクトと、Servantオブジェクトを検索するServantLocatorオブジェクトの2種類が存在します。POAオブジェクトはServerRetentionポリシがRETAINの場合はServantActivatorオブジェクトを呼び出し、NON_RETAINの場合はServantLocatorオブジェクトを呼び出します。
作成するServantActivatorクラスは、以下のようにorg.omg.PortableServer.ServantActivatorクラスを継承させる必要があります。また、メソッドとしてincarnate(), etherealize()を実装している必要があります。
【ServantActivatorクラスの実装形式】
  class UserServantActivator extends org.omg.CORBA.LocalObject
        implements org.omg.PortableServer.ServantActivator{
      public org.omg.PortableServer.Servant incarnate(...) {...}
      public void etherealize(...) {...}
  } | 
POAオブジェクトは、Servantオブジェクトの生成を依頼する場合、ServantActivatorオブジェクトのincarnate()メソッドを呼び出し、Servantオブジェクトの削除を依頼する場合は、etherealize()メソッドを呼び出します。POAオブジェクトから渡されるパラメタは必要に応じて各メソッドの実装部で使用することができます。
    org.omg.PortableServer.Servant  incarnate(
        byte[] oid,
        org.omg.PortableServer.POA adapter )
    oid    : リクエスト対象のオブジェクトのオブジェクトID
    adapter: 呼び出し元のPOAオブジェクト    void etherealize(
        byte[] oid,
        org.omg.PortableServer.POA adapter,
        org.omg.PortableServer.Servant serv,
        boolean cleanup_in_progress,
        boolean remaining_activations );
    oid                  : 削除対象のServantオブジェクトに対応するオブジェクトID
    adapter              : 呼び出し元のPOAオブジェクト
    serv                 : 削除対象のServantオブジェクト
    cleanup_in_progress  : POA.destoroy()から本メソッドが呼ばれた場合にtrue
    remaining_activations: 本メソッド呼出し時、常にfalseServantActivatorオブジェクトの具体的な処理の流れを以下に示します。

注) Factoryはリクエストごとにオブジェクトリファレンスやインスタンスを作成するオブジェクトであり、インスタンス管理を行う場合に必要となるオブジェクトです。
作成するServantLocatorクラスは、以下のようにorg.omg.PortableServer.ServantLocatorクラスを継承させる必要があります。また、メソッドとしてpreinvoke(), postinvoke()を実装している必要があります。
【ServantLocatorクラスの実装形式】
  class UserServantLocator extends org.omg.CORBA.LocalObject
        implements org.omg.PortableServer.ServantLocator{
      public org.omg.PortableServer.Servant preinvoke(...) {...}
      public void postinvoke(...) {...}
  } | 
 POAオブジェクトはクライアントからの要求を処理するため、毎回ServantLocatorオブジェクトのpreinvoke()メソッドを呼び出し、処理対象のServantオブジェクトを獲得します。POAオブジェクトはそのServantオブジェクトに処理を要求し、その処理が終わったら、ServantLocatorオブジェクトのpostinvoke()メソッドを呼び出し、ServantLocatorオブジェクトに後処理を依頼します。
 POAオブジェクトから渡されるパラメタは必要に応じて各メソッドの実装部で使用することができます。
   org.omg.PortableServer.Servant  preinvoke(
         byte[] oid, 
         org.omg.PortableServer.POA adapter, 
         String operation, 
         org.omg.PortableServer.ServantLocatorPackage.CookieHolder the_cookie ) 
    oid       : リクエスト対象のオブジェクトのオブジェクトID
    adapter   : 呼び出し元のPOAオブジェクト
    operation : リクエスト対象のオペレーションの名前
    the_cookie: Cookieオブジェクトを格納するためのCookieHolderオブジェクト
    void  postinvoke(
        byte[] oid,
        org.omg.PortableServer.POA adapter,
        String operation,
        java.lang.Object the_cookie,
        org.omg.PortableServer.Servant the_servant );
    oid        : リクエスト対象のオブジェクトのオブジェクトID
    adapter    : 呼び出し元のPOAオブジェクト
    operation  : リクエスト対象のオペレーションの名前
    the_cookie : preinvokeで返されたCookieオブジェクト
    the_servant: リクエストに対する処理を行ったServantオブジェクトServantLocatorの具体的な処理の流れを以下に示します。

			目次
			索引
			![]()  
		 |