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

第11章 CORBAアプリケーションの高度な使い方> 11.1 Factory

11.1.3 private領域の実装

 private領を使用する場合のプログラミング例を以下に示します。
 IDLでattributeを定義すると、インプリメンテーションクラス用のprivateデータ域にマッピングされます。この領域はサーバアプリケーションが管理します。attributeの詳細は、“属性宣言(attribute)のマッピング”を参照してください。

(1) サーバアプリケーションの処理

 サーバアプリケーションのprivate領域の設定/参照メソッドの実装例を以下に示します。

  // attribute x の設定(固定長データ)
  void
  ODsample_intf1_impl::x( CORBA::Long l, CORBA::Environment &env ) 
        throw( CORBA::Exception ) 
  {
        __x = l; 
  }
        
  // attribute x の参照(固定長データ)
  CORBA::Long
  ODsample_intf1_impl::x( CORBA::Environment &env ) 
        throw( CORBA::Exception ) 
  {
        return( __x ); 
  }

  // attribute y の設定(可変長データ)
  void
  ODsample_intf1_impl::y( const CORBA::Char* s, CORBA::Environment &env ) 
        throw( CORBA::Exception ) 
  {
        __y = (const CORBA::Char *)s; 
  }

  // attribute y の参照(可変長データ)
  CORBA::Char *
  ODsample_intf1_impl::y( CORBA::Environment &env ) 
        throw( CORBA::Exception ) 
  {
        CORBA::Char *tmp; 

        tmp = CORBA::string_alloc(strlen(__y)); 
        strcpy( tmp, __y ); 
        return( tmp ); 
  }

 また、IDLコンパイラの生成するヘッダファイルに直接privateデータを設定することもできます。そのとき、文字列等の可変長データを使用する場合は、獲得した領域を解放する必要があります(“終了処理のプログラミング”を参照してください)。

  class    ODsample_intf1_impl : public _sk_ODsample_intf1
  {
  public: 
      ODsample_intf1_impl();
      ~ODsample_intf1_impl();

      // Attribute Method ( for _get ) 
      CORBA::Long    x(
      ....... 
      
  private : 
      CORBA::Long    __x; 
      CORBA::String_var    __y; 
    
      // ユーザ追加領域
      long    user_data; 
      char    *data; 
  };

注意事項

 private領域を使用した場合は、アプリケーション実行時にクライアントごとにインスタンスを持たせるため、OD_impl_instコマンド実行時(インプリメンテーションリポジトリ登録)に"iswitch=ON"を指定する必要があります(詳細は“リファレンスマニュアル(コマンド編)”の“OD_impl_inst”を参照してください)。

(2) クライアントアプリケーションの処理

 クライアントアプリケーションでのattributeの使用例を以下に示します。

  // attribute x の設定(固定長データ)
  target->x( 3, env ); 

  // attribute x の参照(固定長データ)
  CORBA::Long result = target->x( env ); 

  // attribute y の設定(可変長データ)
  CORBA::Char *dummy = CORBA::string_alloc(7); 
  strcpy( dummy, "testabc" ); 
  target->y( dummy, env ); 

  // attribute y の参照(可変長データ)
  CORBA::Char *data = target->y( env ); 
  cout << "data = " << data << endl;

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

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