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

3.7.9 属性宣言(attribute)のマッピング

(1)IDLマッピング

IDL言語で属性宣言(attribute)を指定すると、オブジェクトのデータ設定/取得を行う関数(関数名:“モジュール名_インタフェース名_set(get)_変数名”。以降、データ設定関数/データ設定関数と呼ぶ)が生成されます。
以降では、以下のIDL定義例をもとに説明します。

IDL言語
module ODsample{
    interface    attrtest{
        attribute long           para1; 
        attribute string         para2; 
        readonly attribute long  para3; 
    };
};

C言語
ODsample_attrtest_set_para1( obj, 2, &env ); 
ODsample_attrtest_get_para1( obj, &env ); 

ODsample_attrtest_set_para2( obj, "test", &env ); 
ODsample_attrtest_get_para2( obj, &env ); 

ODsample_attrtest_get_para3( obj, &env );

(2)クライアントアプリケーションで扱うパラメタ

データ設定関数でデータ設定に使用するデータ域は、inパラメタと同様に扱われます。また、データ取得関数でデータ取得に使用するデータ域は、復帰パラメタと同様に扱われます。このため、可変長データでは、その領域が不要になった時点でCORBA_free()で領域を解放する必要があります。

CORBA_Object         obj; 
CORBA_Environment    env; 
CORBA_long           ret; 
CORBA_string         str; 

/* para1: データ設定関数 */
ODsample_attrtest_set_para1( obj, 2, &env ); 

/* para1: データ取得関数 */
ret = ODsample_attrtest_get_para1( obj, &env ); 
printf( "ODsample_attrtest_get_para1 returns [%d]\n", ret ); 

/* para2: データ設定関数 */
ODsample_attrtest_set_para2( obj, "test", &env ); 

/* para2: データ取得関数 */
str = ODsample_attrtest_get_para2( obj, &env ); 
env_check( "ODsample_attrtest_get_para2" ); 
printf( "ODsample_attrtest_get_para2 returns [%s]\n", str ); 
CORBA_free( str );                  /* 領域解放 */

/* para3: データ取得関数 */
ret = ODsample_attrtest_get_para3( obj, &env ); 
printf( "ODsample_attrtest_get_para3 returns [%d]\n", ret );

(3)サーバアプリケーションで扱うパラメタ

データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われ、スケルトンで自動的に獲得/解放されます。データ取得関数でデータ取得に使用するデータ域は、復帰パラメタと同様に扱われます。このため、可変長データでは、データ域獲得関数で領域獲得する必要があります。獲得した領域は、スケルトンで自動的に解放されます。

/* para1: データ設定関数 */
void
ODsample_attrtest_set_para1( 
      ODsample_attrtest   obj, 
      CORBA_long          para, 
      CORBA_Environment   *env ) 
{
      para1 = para; 
}

/* para1: データ取得関数 */
CORBA_long
ODsample_attrtest_get_para1( 
      ODsample_attrtest   obj, 
      CORBA_Environment   *env ) 
{
      return para1 ;
}

/* para2: データ設定関数 */
void
ODsample_attrtest_set_para2( 
      ODsample_attrtest   obj, 
      CORBA_string        para, 
      CORBA_Environment   *env ) 
{
      CORBA_free( para2 ); 
      para2 = CORBA_string_alloc( strlen( para ) ); 
      strcpy( para2, para ); 
      return; 
}

/* para2: データ取得関数 */
CORBA_string
ODsample_attrtest_get_para2( 
      ODsample_attrtest   obj, 
      CORBA_Environment   *env ) 
{
      CORBA_string    ret; 

      if( para2 == NULL ) {
              ret = CORBA_string_alloc(1); 
              ret[0] = '\0'; 
              return( ret ); 
      }
      else {
              ret = CORBA_string_alloc( strlen(para2)+1 ); 
              strcpy( ret, para2 ); 
              return( ret ); 
      }
}

/* para3: データ取得関数 */
CORBA_long
ODsample_attrtest_get_para3( 
      ODsample_attrtest   obj, 
      CORBA_Environment   *env ) 
{
      return( para3 ); 
}