ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(コンポーネントトランザクションサービス編)

3.2 IDLファイルの作成

  ローカルトランザクション運用におけるIDLファイルの文法の概要について説明します。IDLファイルの文法の詳細については、“アプリケーション作成ガイド(CORBAサービス編)”を参照してください。

IDLファイルの記述形式

  ローカルトランザクション運用におけるIDLファイルの記述形式を、以下に示します。

モジュール宣言

  モジュール宣言では、IDL定義のオペレーション名や型名などが、ほかのIDL定義と重複しないように、オブジェクトのグループ化を定義します。
  モジュール宣言の書式を以下に示します。

   module モジュール名  {
          interface インタフェース名m {
              ・・
         } ;
          interface インタフェース名n {
              ・・
          } ;
    } ;

  モジュール宣言の中に新たなモジュール宣言をすることもできます。これをモジュール宣言の入れ子と呼びます。モジュール宣言のmodule A宣言内にmodule B宣言をする例を以下に示します。

  module A  {
    interface a1 {
        ・・
    } ;
    module B  {
       interface b1 {
        ・・
       } ;
    } ;
  } ;

インタフェース宣言

  インタフェース宣言では、アプリケーションへの入力と出力を規定するためのインタフェースを定義します。
  インタフェース宣言の書式を以下に示します。

interface  インタフェース名[:継承するインタフェース名]  {
      オペレーション宣言 ;
      定数宣言 ;
      型宣言 ;
      例外宣言 ;

 } ;

  ※ [ ]内は省略可能です。

  インタフェース宣言は、モジュール宣言内に複数個記述できます。トランザクション運用では、モジュール宣言を記述せずにインタフェース宣言を記述することはできません。

オペレーション宣言

  オペレーション宣言では、アプリケーションに対応したオペレーション名、復帰値の型、パラメタのデータ型を定義します。
  オペレーション宣言の書式を以下に示します。

復帰値のデータ型  オペレーション名 (
  [ パラメタタイプ  データ型  パラメタ名[ , . . ]]
)  [  raises (例外構造体名[ , . .])] ;

  ※ [ ]内は省略可能です。

  オペレーション宣言は、インタフェース宣言内に複数個記述できます。

定数宣言

  インタフェースの定義内で使用する定数を定義します。
  定数宣言の書式を以下に示します。

  const データ型 定数名 = 定数式;

データ型と型宣言

  トランザクション運用で使用できるデータ型とその型宣言について示します。

基本データ型の宣言

  データ型宣言では、インタフェース内で使用されるデータ型を定義できます。基本データ型のうち、整数型、浮動小数点型、文字型、オクテット型、ブーリアン型については、型宣言にtypedefを利用することもできます。


  文字列型を除く基本データ型宣言の書式を以下に示します。

 typedef long long         データ型名 ;
 typedef long              データ型名 ;
 typedef short             データ型名 ;
 typedef unsigned long     データ型名 ;
 typedef unsigned short    データ型名 ;
 typedef float             データ型名 ;
 typedef double            データ型名 ;
 typedef long double       データ型名 ;
 typedef char              データ型名 ;
 typedef wchar             データ型名 ;
 typedef octet             データ型名 ;
 typedef boolean           データ型名 ;

 long long                 データ名 ;
 long                      データ名 ;
 short                     データ名 ;
 unsigned long             データ名 ;
 unsigned short            データ名 ;
 float                     データ名 ;
 double                    データ名 ;
 long double               データ名 ;
 char                      データ名 ;
 wchar                     データ名 ;
 octet                     データ名 ;
 boolean                   データ名 ;

  文字列型の型宣言の書式を以下に示します。

 typedef string<サイズ>    データ型名;
 typedef string            データ型名;
 typedef wstring<サイズ>   データ型名;
 typedef wstring           データ型名;

 string<サイズ>            データ名 ;
 string                    データ名 ;
 wstring<サイズ>           データ名 ;
 wstring                   データ名 ;
構造体

  構造体の宣言の書式を以下に示します。

struct  データ名 {
          構造体メンバの宣言
 };

  構造体メンバの宣言の書式を以下に示します。

  基本データ型 メンバ名 ;

  構造体メンバは1つ以上必要であり、空の構造体は定義できません。


  構造体の記述例を以下に示します。

module A {
         struct S {
                   string  name;
                   short   number;
                   long    value;
         };
 };
配列

  配列宣言では1次元固定長の配列を定義します。配列宣言の書式を以下に示します。

  typedef データ型 識別子 [配列サイズ];

  配列の次元は1階層までに制限されています。配列サイズは正の整数定数式で指定します。配列サイズはコンパイル時に固定されます。

  配列宣言の例を以下に示します。

  typedef long A[5];

シーケンス型

  IDL言語でシーケンス型sequenceを指定した場合、C++言語では最大長_maximum、シーケンス長_length、バッファポインタ_bufferをprivateデータに持ったC++のクラスで定義します。シーケンスのデータを獲得するための関数("モジュール名::インタフェース名::シーケンス名::allocbuf"で定義された関数(以降XX::allocbuf関数と呼びます))がTDコンパイラで生成されます。

class データ名
{
        public:
                データ名();                    //デフォルトコンストラクタ
                データ名( CORBA::ULong max);   //maximumコンストラクタ
                データ名( CORBA::ULong max,
                        CORBA::ULong length,
                        CORBA::Type *data,
                        CORBA::Boolean release = CORBA_TRUE );
//T *dataコンストラクタ
                データ名( const sampleseq &s );
                                //コピーコンストラクタ
                データ名();   //デストラクタ
                static CORBA::Type *allocbuf( CORBA::ULong );
                                // allocbuf
                static void freebuf( CORBA::Type* );
                                // freebuf
                sampleseq &operator=( const sampleseq &s );
                                //割当てオペレータ
                CORBA::ULong maximum() const;
                                // maximumアクセス関数
                void length( CORBA::ULong );
                                // lengthアクセス関数
                CORBA::ULong length() const;
                                // lengthアクセス関数
                CORBA::Type &operator[]( CORBA::ULong index );
                                // _bufferのindex番目の要素を取得
                const CORBA::Type &operator[]( CORBA::ULong index )
                                               const;
                                // _bufferのindex番目の要素を取得
        private:
                CORBA::ULong _maximum;          // 配列の最大個数
                CORBA::ULong _length;           // 配列の個数
                CORBA::Type *_buffer;           // 配列の値
                CORBA::Boolean _release;        // releaseフラグ
};

  シーケンス型の宣言の書式を以下に示します。

  typedef sequence<データ型名 > データ名;

  または

  typedef sequence<データ型名 , シーケンス要素数 > データ名;

  シーケンス型の要素として指定するデータ型は基本データ型だけに制限されています。
  シーケンス型の記述例を以下に示します。

  typedef sequence<long > Q;

例外宣言

  例外宣言では、オペレーション実行中に例外が発生したときに例外情報を受け渡すための例外構造体名を定義します。オペレーション宣言のraises式を定義する場合は、この例外構造体名を指定します。
  例外宣言の書式を以下に示します。

exception  例外構造体名 {
        データ型   メンバ名 ;      //構造体メンバを宣言
                :
} ;

  構造体メンバを複数定義する場合は、各メンバをセミコロン(“;”)で区切ります。メンバとして定義できるデータ型を以下に示します。

  また、例外にはシステムでの異常終了を通知するシステム例外とサーバアプリケーションでの異常終了を通知するユーザ例外がありますが、トランザクションアプリケーションではシステム例外は使用できません。
  トランザクションアプリケーションでは、CORBAの初期化メソッドの呼び出しは必要ありませんが、例外を使用する場合、CORBAの初期化メソッドの呼び出しが必要となります。

  例外の使用方法については、“アプリケーション作成ガイド(CORBAサービス編)”の各言語ごとのアプリケーションの例外処理を参照してください。

注意

コンポーネントトランザクションサービスにおける利用範囲

  トランザクション運用で使用するIDLファイルの文法は、OMGで規定しているIDLの文法に準拠していますが、以下に示す項目が制限されています。

データ型の使用方法

  各データ型の使用方法については、“アプリケーション作成ガイド(CORBAサービス編)”の各言語ごとのデータ型に対するマッピングを参照してください。

  なお、クライアントアプリケーションにVisual Basicを使用し、サーバアプリケーションにOLE CORBA-ゲートウェイ経由で文字列型のデータを通信する場合には、IDL定義の記述に注意が必要です。“アプリケーション作成ガイド(CORBAサービス編)”のCOM/CORBA連携プログラミングを参照してください。

  CORBAアプリケーションとトランザクションアプリケーションでは、使用するAPIが以下に示す点で異なります。

  CORBA::string_alloc ==> TD::string_alloc
  CORBA::string_free  ==> TD::string_free
  CORBA::wstring_alloc ==> TD::wstring_alloc
  CORBA::wstring_free  ==> TD::wstring_free

オペレーションの使用方法

  トランザクションアプリケーションでは、オペレーションの型として、longおよびoneway voidのみ用意しています。

  oneway voidの場合、以下の注意が必要となります。