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

第4章 サーバアプリケーションの開発(CORBAアプリケーション/C言語)

4.1 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 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  例外構造体名 {
           データ型   メンバ名 ;      //構造体メンバを宣言
                   :
                           } ;

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

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


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

Copyright 2008 FUJITSU LIMITED