ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)
Interstage

8.3.6 リクエストの作成

CORBA::Object::_create_request()により、リクエストオブジェクトを作成します。リクエストオブジェクトに対して、サーバオブジェクトのオブジェクトリファレンス、NVListオブジェクトリファレンス、後述するNamedValueと呼ぶサーバの処理結果を格納する領域を指定します。結果として、リクエストオブジェクトのオブジェクトリファレンスが返されます。
ここで獲得したリクエストオブジェクトは、不要になった時点で削除する必要があります。オブジェクトの削除については、“8.3.8 リクエストの削除”を参照してください。

CORBA::NVList_ptr arg_tmp; 

// 復帰パラメタ用リストオブジェクトの生成
orb->create_list(1, arg_tmp, env);

ODdemo::calculator::result *res = NULL; 

CORBA::Any any_tmp( _tc_ODdemo_calculator_result, res, CORBA_FALSE ); 

// 結果受け取り用変数(CORBA::NamedValue型変数) 
CORBA::NamedValue_ptr
result = arg_tmp->add_value(
              NULL,            // resultの設定
              any_tmp,
              (CORBA::Flags)0, 
              env); 

CORBA::Request_ptr  request; 

// リクエストオブジェクトの生成
obj->_create_request(
      CORBA_OBJECT_NIL,      // context
      "calculate",           // メソッド名
      arg_list,              // 入力パラメタ
      result,                // 復帰値
      request,               // 出力パラメタの格納域
      CORBA::OUT_LIST_MEMORY, 
      *env );

NamedValueは、サーバの処理結果を格納するための領域であり、以下のように定義されています。
IDLファイルでの定義を以下に示します。


module CORBA 
{
    struct NamedValue
    { 
        identifier     name;           // パラメタの名前
        any            argument;       // パラメタの値
        long           len;            // パラメタの長さ
        Flags          arg_modes;      // パラメタの引き渡し方法(in,out,inout) 
    };
};

C++言語でのNamedValueの定義を以下に示します。


class CORBA 
{
    class NamedValue
    { 
        public: 
        const char *name(CORBA::Environment &) const;  // パラメタの名前
        Any *value(CORBA::Environment &) const;        // パラメタの値
        Flags flags(CORBA::Environment &) const;       // パラメタの引き渡し方法(in,out,inout) 
    };
};