Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第5章 アプリケーションの開発(C++言語) | > 5.3 サーバアプリケーションのプログラミング(Portable Object Adapter:POA) | > 5.3.6 サーバアプリケーションの実装アプローチ |
代理方式によるユーザクラス(インタフェース実装クラス)は、以下のような継承関係で実装します。サーバアプリケーションのメイン部では、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クラスのインスタンス
目次
索引
![]() ![]() |