グローバルトランザクション運用におけるIDLファイルの文法の概要について説明します。IDLファイルの文法の詳細については、「アプリケーション作成ガイド(CORBAサービス編)」の「IDL定義」を参照してください。
■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 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を指定した場合、以下の構造体でデータを宣言します。
struct { CORBA_unsigned_long _maximum; /* シーケンスの最大長 */ CORBA_unsigned_long _length; /* シーケンスの長さ */ CORBA_Type *_buffer; /* シーケンスのデータ */ };
_maximumはシーケンスの最大長、_lengthはシーケンスの長さ、_bufferはシーケンスのデータを指します。シーケンス構造体の領域を獲得するための関数(モジュール名、インタフェース名、構造体、およびallocをアンダースコア(_)でつないだ名前の関数(以降、XX_alloc関数))がIDLコンパイラにより生成されます。
また、シーケンスのデータを獲得するための関数(モジュール名、インタフェース名、構造体名、およびallocbufをアンダースコア(_)でつないだ関数(以降、XX_allocbuf関数))がIDLコンパイラにより生成されます。
シーケンス型の宣言の書式を以下に示します。
typedef sequence<データ型名 > データ名 ;
または
typedef sequence<データ型名 , シーケンス要素数 > データ名 ;
シーケンス型の要素として指定するデータ型は、基本データ型だけに制限されています。
シーケンス型の記述例を以下に示します。
typedef sequence<long > Q;
例外宣言では、オペレーション実行中に例外が発生したときに例外情報を受け渡すための例外構造体名を定義します。オペレーション宣言のraises式を定義する場合は、この構造体名を指定します。
例外宣言の書式を以下に示します。
exception 例外構造体名 { データ型 メンバ名 ; // 構造体メンバを宣言 : } ;
構造体メンバを複数定義する場合は、各メンバをセミコロン(;)で区切ります
メンバとして定義できるデータ型を以下に示します。
基本データ型
配列(配列要素のデータ型は基本データ型のみ、次元数は1次元まで)
例外の使用方法については、「アプリケーション作成ガイド(CORBAサービス編)」の各言語のアプリケーションの例外処理を参照してください。