ローカルトランザクション運用におけるIDLファイルの文法の概要について説明します。IDLファイルの文法の詳細については、“アプリケーション作成ガイド(CORBAサービス編)”を参照してください。
ローカルトランザクション運用における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を指定した場合、以下の構造体でデータを宣言します。
struct { CORBA_unsigned_long _maximum; /* シーケンスの最大長 */ CORBA_unsigned_long _length; /* シーケンスの長さ */ CORBA_Type *_buffer; /* シーケンスのデータ */ }; |
_maximumはシーケンスの最大長、_lengthはシーケンスの長さ、_bufferはシーケンスのデータを指します。シーケンス構造体の領域を獲得するための関数(モジュール名、インタフェース名、構造体およびallocを"_"でつないだ名前の関数(以降XX_alloc関数と呼びます))がTDコンパイラで生成されます。
また、シーケンスのデータを獲得するための関数(モジュール名、インタフェース名、構造体名およびallocbufを"_"でつないだ関数(以降XX_allocbuf関数と呼びます))がTDコンパイラで生成されます。
シーケンス型の宣言の書式を以下に示します。
typedef sequence<データ型名 > データ名; |
または
typedef sequence<データ型名 , シーケンス要素数 > データ名; |
シーケンス型の要素として指定するデータ型は基本データ型だけに制限されています。
シーケンス型の記述例を以下に示します。
typedef sequence<long > Q; |
例外宣言では、オペレーション実行中に例外が発生したときに例外情報を受け渡すための例外構造体名を定義します。オペレーション宣言のraises式を定義する場合は、この例外構造体名を指定します。
例外宣言の書式を以下に示します。
exception 例外構造体名 { データ型 メンバ名 ; //構造体メンバを宣言 : } ; |
構造体メンバを複数定義する場合は、各メンバをセミコロン(“;”)で区切ります。メンバとして定義できるデータ型を以下に示します。
基本データ型
配列(配列要素のデータ型は基本データ型のみ、次元数は1次元まで)
また、例外にはシステムでの異常終了を通知するシステム例外とサーバアプリケーションでの異常終了を通知するユーザ例外がありますが、トランザクションアプリケーションではシステム例外は使用できません。
トランザクションアプリケーションでは、CORBAの初期化メソッドの呼び出しは必要ありませんが、例外を使用する場合、CORBAの初期化メソッドの呼び出しが必要となります。
例外の使用方法については、“アプリケーション作成ガイド(CORBAサービス編)”の各言語ごとのアプリケーションの例外処理を参照してください。
注意
トランザクション運用で使用するIDLファイルの文法は、OMGで規定しているIDLの文法に準拠していますが、以下に示す項目が制限されています。
モジュール宣言などでは、次の宣言が利用できません。
属性宣言
コンテキスト
以下のデータ型は使用できません。
基本データ型の列挙型(enum)とany型
共用体型
オペレーション宣言において、利用できる型は以下に限られています。
long
oneway void
各データ型の使用方法については、“アプリケーション作成ガイド(CORBAサービス編)”の各言語ごとのデータ型に対するマッピングを参照してください。
なお、クライアントアプリケーションにVisual Basicを使用し、サーバアプリケーションにOLE CORBA-ゲートウェイ経由で文字列型のデータを通信する場合には、IDL定義の記述に注意が必要です。“アプリケーション作成ガイド(CORBAサービス編)”のCOM/CORBA連携プログラミングを参照してください。
CORBAアプリケーションとトランザクションアプリケーションでは、使用するAPIが以下に示す点で異なります。
CORBA_string_alloc ==> TD_string_alloc CORBA_free ==> TD_free CORBA_wstring_alloc ==> TD_wstring_alloc |
また、トランザクションアプリケーションでは、リリースフラグの参照APIおよびリリースフラグの設定APIが用意されていません。データの扱いは、CORBA_FALSEが設定されているものとして扱ってください。
トランザクションアプリケーションでは、オペレーションの型として、longおよびoneway voidのみ用意しています。
oneway voidの場合、以下の注意が必要となります。
オペレーションを実装するプログラムは、void型となります。
クライアントアプリケーションへの復帰は、サーバアプリケーションの状態にかかわらず、サーバアプリケーションへデータを送信し、送信処理が成功した時点で正常復帰します。
outパラメタ、inoutパラメタは使用できません。
ユーザ例外を使用できません。
グローバルトランザクション連携機能は使用できません。