| Interstage Application Server アプリケーション作成ガイド (コンポーネントトランザクションサービス編) |
目次
索引
![]()
|
| 第3章 サーバアプリケーションの作成(C++言語) |
ローカルトランザクション運用における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を指定した場合、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の場合、以下の注意が必要となります。
目次
索引
![]()
|