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

4.4.1 静的起動インタフェース

  静的起動インタフェースを使用する場合の、クライアントアプリケーションの処理の流れを以下に示します。



4.4.1.1 初期化

  CORBAの初期化メソッドCORBA::ORB_init()を呼び出し、初期化処理を行います。結果として、ORBのオブジェクトリファレンスが返されます。このオブジェクトリファレンスは、以降で呼び出すORBインタフェースを使用する場合に指定します。

  main( int argc, char *argv[] ) 
  {
      CORBA::ORB_ptr          orb;                   // ORBのオブジェクトリファレンス
      CORBA::Environment      env;                   // 例外情報
      int                     current_argc = argc; 

      env = new CORBA::Environment;                  // 例外情報
      orb = CORBA::ORB_init(current_argc, argv, FJ_OM_ORBid, env);

4.4.1.2 ネーミングサービスのオブジェクトリファレンスの獲得

  実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスが必要となります。CORBAインタフェースのオブジェクトリファレンスの取り出しメソッドCORBA::ORB::resolve_initial_references()によりネーミングサービスのオブジェクトリファレンスを取り出します。このとき、CORBA_ORB_ObjectId_NameServiceをメソッドのパラメタとして指定します。

  // NamingServiceのオブジェクトリファレンスを獲得
  CORBA::Object_ptr
  obj = orb->resolve_initial_references( CORBA_ORB_ObjectId_NameService, env );

  // NamingContextクラスへの変換
  CosNaming::NamingContext_ptr
  cos_naming = CosNaming::NamingContext::_narrow( obj );

4.4.1.3 サーバアプリケーションのオブジェクトリファレンスの獲得

  ネーミングサービスのメソッドCosNaming::NamingContext::resolve()により、これから実行したいサーバアプリケーションのオブジェクトリファレンスを取り出します。検索したいオブジェクト名を当メソッドのパラメタとして指定します。

  CosNaming::Name               name;             // CosNaming::Nameのインスタンス
  CORBA::Object_ptr          obj; // サーバアプリケーションのオブジェクトリファレンス

  name.length(1);
  // オブジェクト名
  name[0]->id = (const CORBA::Char *)"ODdemo::calculator";
  // オブジェクトのタイプ
  name[0]->kind = (const CORBA::Char *)"";

  // サーバアプリケーションのオブジェクトリファレンスを獲得
  obj = cos_naming-> resolve( name, env );

  // ODdemo::calculatorクラスへの変換
  ODdemo::calculator_ptr ap = ODdemo::calculator::_narrow( obj );

4.4.1.4 メソッドの呼出し

  サーバプログラムのメソッドを呼び出します。メソッド名はIDLで指定したモジュール名、インタフェース名およびオペレーション名を2つのコロン(“::”)でつなげた形式で指定します。この例では、ODdemo, calculator, calculateがそれにあたります。なお、メソッド呼出し時にネーミングサービスで求めたサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合に例外情報を獲得するためにCORBA::Environment構造体を指定します。
  なお、アプリケーションで使用可能なCORBAのデータ型については“4.5 データ型に対するマッピング”を参照してください。

  ODdemo::calculator::result    res;   // 復帰値
  CORBA::Long                   a, b;  // パラメタ

  a = 10; 
  b = 5; 

  // メソッドの呼出し
  res = ap->calculate( a, b, *env );