Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第5章 アプリケーションの開発(C++言語)> 5.3 サーバアプリケーションのプログラミング(Portable Object Adapter:POA)> 5.3.5 サーバアプリケーションの実装アプローチ

5.3.5.3 代理方式のServant実装

 代理方式によるユーザクラス(インタフェース実装クラス)は、以下のような継承関係で実装します。サーバアプリケーションのメイン部では、tieクラス(POA_<インタフェース名>_tie)のインスタンスをPOAに登録します。継承方式を使用した場合のような規定の継承関係から解放されるため、実装の自由度が高くなります。ただし、tieクラスのメンバとして登録するために、インタフェース実装クラスをtieクラスと関連付ける必要があります。代理方式のアプリケーション例は、“サーバアプリケーションのプログラミング例”を参照してください。

 上図のとおり、代理方式では、ユーザクラスは以下のようにPOA_<interface名>tieインタフェースを実装するように記述します。

【IDL定義】

  module ODsample{
      interface   intf{
          long    add(in long a, in long b);
      };
  };

【スケルトンクラス】

    class POA_ODsample_intf : public virtual PortableServer::ServantBase
    {
         :
    }
    template <class T>
    class POA_ODsample_intf_tie : public virtual POA_ODsample_intf
    {
            :
        CORBA::Long  add( CORBA::Long  a,
                      CORBA::Long  b,
                      CORBA::Environment  &_env = CORBA::Environment() )
                      throw( CORBA::Exception ) { return _ptr->add( _env ); }
            :
  };

【ユーザクラスの例】

  class UserClass
  {
    public :
      CORBA::Long add(
                CORBA::Long a,
                CORBA::Long b,
                CORBA::Environment&env )
                throw( CORBA::Exception )
    {
        return( a + b );
    }
  };

 メイン処理部では、いったんこのユーザクラスのインスタンスをtieクラスのインスタンスに登録します(tieクラスのコンストラクタの引数としてユーザクラスインスタンスを渡します)。さらに、tieクラスのインスタンスをPOAにServantとして登録します。以下の例ではDefault Servantとして登録しています。

【メイン部の例】

  // ユーザクラスのインスタンス生成
  UserClass*  uc = new UserClass();
  // ユーザクラスとtieオブジェクトの関連付け
  POA_ODsample_intf_tie< UserClass >*  svt = new POA_ODsample_intf_tie< UserClass >( uc );
  // Default Servantに設定
  aPOA->set_servant( svt ); 

注) aPOAはPOAクラスのインスタンス


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005