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

付録F 動的スケルトンインタフェースのプログラミング> F.1 C言語の開発

F.1.4 ゲートウェイの処理

 ゲートウェイでは、以下に示す処理を行います。

(1)メソッドの解析

 CORBA_ServerRequest_op_name()により、メソッド名の解析を行います。下の例ではゲートウェイ関数としてstaticな関数を使用していますが、staticである必要はありません。ゲートウェイ関数の第1引数はサーバオブジェクトリファレンス、第2引数はServerRequestオブジェクト、第3引数は例外情報を設定するためのenv構造体です。

  static void
  dsi(
      CORBA_Object         obj, 
      CORBA_ServerRequest  request, 
      CORBA_Environment    *env ) 
  {

      CORBA_Identifier  dsi_op_name; 

      dsi_op_name = CORBA_ServerRequest_op_name(
                         request, 
                         env ); 
      if( strcmp( dsi_op_name, "calculate" ) == 0 ) 
          method_calculate( request, env ); 
      CORBA_free( dsi_op_name ); 
      return; 
  }

(2)パラメタの組立て

リストオブジェクトの生成

 CORBA_ORB_create_list()により、サーバアプリケーションに渡すパラメタを格納するための領域を保持するリストオブジェクト(NVListオブジェクト)を生成します。パラメタとして、何個のパラメタを格納するかを指定します。リストオブジェクトのオブジェクトリファレンスが返されます。

  CORBA_NVList  arg_list; 
  CORBA_ORB_create_list( orb, 2, &arg_list, env );

パラメタリストの設定

 CORBA_NVList_add_item()により、サーバアプリケーションに渡すパラメタをリストオブジェクトに設定します。パラメタには、CORBA_NVListオブジェクトリファレンス、サーバアプリケーションのパラメタの名前、型、値および長さを指定します。

  CORBA_NVList_add_item(
      arg_list, 
      "a", TC_long, NULL, 
      sizeof( CORBA_long ), 
      CORBA_ARG_IN, 
      env ); 

  CORBA_NVList_add_item(
      arg_list, 
      "b", TC_long, NULL, 
      sizeof( CORBA_long ), 
      CORBA_ARG_IN, 
      env );

(3)パラメタの解析

 CORBA_ServerRequest_params()により、パラメタの解析を行います。

  CORBA_ServerRequest_params(
      dsi_request, 
      arg_list, 
      env );

(4)復帰情報の設定

 CORBA_ServerRequest_result()により、復帰情報の設定を行います。

  CORBA_long                  a, b; 
  ODdemo_calculator_result    *res; 
  CORBA_any                   any_value; 

  a = *(long *)(arg_list[0].argument._value ); 
  b = *(long *)(arg_list[1].argument._value ); 

  if( b == 0 ){ 
      CORBA_ServerRequest_exception(
          dsi_request, 
          CORBA_USER_EXCEPTION, 
          ex_ODdemo_calculator_ZEROPARAM, 
          NULL, 
          env ); 
      return; 
  }
  res = ODdemo_calculator_result_alloc();
  res->add_result = a+b; 
  res->subtract_result = a/b; 
  res->multiple_result = a*b; 
  res->divide_result = (CORBA_float)a/b; 

  any_value._type = TC_ODdemo_calculator_result; 
  any_value._value = res; 
  CORBA_ServerRequest_result(
      dsi_request, 
      any_value, 
      env ); 

(5)例外情報の設定

 CORBA_ServerRequest_exception()を発行して、例外情報の設定を行います。


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

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