Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第5章 アプリケーションの開発(C++言語) | > 5.2 サーバアプリケーションのプログラミング(Basic Object Adapter:BOA) | > 5.2.1 静的スケルトンインタフェース |
初期化処理の後、サーバアプリケーションで実装するインタフェースの処理を記述します。インタフェースを実装する方法として、以下の2種類があります。
派生クラスのメソッドとして実装する方法です。以下に特長を示します。
テンプレートクラス機能を利用して実装する方法です。以下に特長を示します。
備考
TIEクラス方式を使用する場合は、IDLcコマンド実行時に-tieオプションを指定する必要があります。
それぞれの実装方法について、以下のIDL定義をもとに説明します。
module ODdemo{ interface calculator{ exception ZEROPARAM {}; struct result { long add_result; long subtract_result; long multiple_result; float divide_result; }; result calculate( in long a, in long b ) raises( ZEROPARAM ); }; };
implクラスを使用する場合、以下を記述します。
インタフェース実装関数
インタフェース実装関数は、"モジュール名_インタフェース名_impl"という名前で定義されたインタフェース実装クラスのメンバ関数として実装します。
// IDLで生成されるヘッダ定義 class ODdemo_calculator_impl { public: ODdemo::calculator::result calculate( CORBA::Long, CORBA::Long, CORBA::Environment & ) throw ( CORBA::Exception ); } // インタフェースの実装 ODdemo::calculator::result // 復帰値の型 ODdemo_calculator_impl::calculate( // addメソッドの実装 CORBA::Long a, // 入力値 CORBA::Long b, // 入力値 CORBA::Environment & ) // エラー値 throw( CORBA::Exception ) { if( b == 0 ){ // 0除算チェック ODdemo::calculator::ZEROPARAM exc; throw( exc ); } ODdemo::calculator::result res; res.add_result = a+b; // 加算結果設定 res.subtract_result = a-b; // 減算結果設定 res.multiple_result = a*b; // 乗算結果設定 res.divide_result = (CORBA::Float)a/b; // 除算結果設定 return res; }
TIEクラスを使用する場合、以下を記述します。
インタフェース実装クラス
インタフェース実装関数
インタフェース実装クラス割当て関数
インタフェース実装クラスには、以下の定義をpublic属性として含める必要があります。
デフォルトコンストラクタ
デストラクタ
オペレーション/アトリビュートの実装関数
オペレーションとアトリビュートの実装関数は、IDLコンパイラが生成するヘッダに定義されているインタフェースと同一の名前にします。ただし、"throw( CORBA::Exception )"は必要ありません。
その他のメンバ定義やクラス名は適宜追加することができます。
class CalculatorImpl { public: CalculatorImpl(); //コンストラクタの宣言 ~CalculatorImpl(); //デストラクタの宣言 ODdemo::calculator::result calculate ( //オペレーションの宣言 CORBA::Long a, CORBA::Long b, CORBA::Environment & ); };
インタフェース実装関数は、インタフェース実装クラスのメンバ関数として定義します。
デフォルトコンストラクタとデストラクタでは、特定の処理を記述する必要はありませんが、独自の処理を記述することもできます。
CalculatorImpl::CalculatorImpl() { } CalculatorImpl::~CalculatorImpl() { } ODdemo::calculator::result // 復帰値の型 CalculatorImpl::calculate( // メソッドの実装 CORBA::Long a, // 入力値 CORBA::Long b, // 入力値 CORBA::Environment & ) // エラー値 { if( b == 0 ){ // 0除算チェック ODdemo::calculator::ZEROPARAM exc; throw( exc ); } ODdemo::calculator::result res; res.add_result = a+b; // 加算結果設定 res.subtract_result = a-b; // 減算結果設定 res.multiple_result = a*b; // 減算結果設定 res.divide_result = (CORBA::Float)a/b; // 除算結果設定 return res; }
インタフェース実装クラス割当て関数は、インタフェース実装クラスを生成し、TIEクラスにインスタンスを設定します。この関数は、クライアントからリクエストを受け取ったときに自動的に呼び出され、インタフェース実装クラスのインスタンスが生成されます。
TIEクラスとインタフェース実装クラス割当て関数の名前は以下のようになります。
TIEクラス: _tie_インタフェース名
インタフェース実装クラス割当て関数: インタフェースクラス_ptr _ct_インタフェース名();
インスタンスの生成はデフォルトコンストラクタで行う必要はなく、パラメタ付きのコンストラクタやoperator演算子などを利用して行うようにすることもできます。TIEクラスにインスタンスを設定するためのコンストラクタは1つに限定されており、TIEクラスを割り当てるときは必ずインタフェース実装クラスのインスタンスを引数として渡さなければなりません。
ODdemo::calculator_ptr _ct_ODdemo_calculator() { CalculatorImpl *impl = new CalculatorImpl(); _tie_ODdemo_calculator<CalculatorImpl> *tie = new _tie_ODdemo_calculator<CalculatorImpl>(*impl); return tie; }
目次
索引
![]() ![]() |