• 検索結果がありません。

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

N/A
N/A
Protected

Academic year: 2022

シェア "第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ"

Copied!
14
0
0

読み込み中.... (全文を見る)

全文

(1)

13

第 第

第 第 2 章 章 章 章 インタフェース定義言語 インタフェース定義言語 インタフェース定義言語 インタフェース定義言語 (IDL)

IDLとは、言語やOSに依存しないインタフェース定義を行うためのインタフェース定義言語です。CORBA アプリケーションを作成する場合は、インタフェースを定義したIDLファイルを作成する必要があります。

ここでは、IDLの文法やIDLファイルの作成方法、コンパイル方法について説明します。IDLファイルの作 成にあたっては、INTERSTAGE APWORKSを使用します。

IDL

APWORKSでの設定方法

<補足>

Java、COBOL以外の言語でIDLコンパイルを行う場合は、INTERSTAGEで提供されるIDLコンパイラを 使用してコンパイルを行います。詳細な利用方法については、「INTERSTAGE Application Server リファレン スマニュアル(コマンド編)」をご参照ください。

(2)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

14

2.1 IDL

IDL(Interface Definition Language:インタフェース定義言語)は、オブジェクトのインタフェースを定義する 言語です。

IDL により、サーバアプリケーションが提供するインタフェースを定義することができます。インタフェ ースを定義したIDLファイルをIDLコンパイラでコンパイルすることにより、指定した言語にマッピングさ れたクライアントアプリケーション、サーバアプリケーション用のソースコードが生成されます。このソー スコードを、それぞれスタブ、スケルトンといいます。クライアントアプリケーションからは、スタブ/スケ ルトンを通してIDLで定義したサーバアプリケーションを呼び出すことができます。

IDLインタフェースの概念インタフェースの概念インタフェースの概念インタフェースの概念

(3)

2.1 IDL

15

2.1.1 IDL の書式 の書式 の書式 の書式

IDLの構造は以下のようになっています。

IDLの構造の構造の構造の構造

(4)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

16

次にIDLの定義例を示します。

IDLの定義例

それぞれの詳細については、「2.2.1 IDL宣言」で説明します。

// モジュール宣言 module sample { // 定数宣言

const string MSG1 = "item1 is zero" ; const string MSG2 = "item2 is zero" ; // 型宣言

// 構造体宣言 struct S1 {

long item1;

long item2;

long result;

};

// 例外宣言

exception CDException{

string CDExceptionMsg;

long CDExceptionCode;

};

// ユーザインタフェース宣言 interface calcsv {

void addop(inout S1 param1);

void subop(inout S1 param1);

void mltop(inout S1 param1)

raises (CDException);

void divop(inout S1 param1)

raises (CDException);

};

};

(5)

2.1 IDL

17

2.1.2 サポートしているデータ型 サポートしているデータ型 サポートしているデータ型 サポートしているデータ型

IDLでサポートしているデータ型は次のとおりです。

IDLでサポートしているデータ型でサポートしているデータ型でサポートしているデータ型でサポートしているデータ型

これらのデータ型には固定長と可変長があります。文字列型、シーケンス型、固定小数点型、文字列型、

シーケンス型、固定小数点型を含む構造体および共用体、オブジェクトリファレンスは可変長です。それ以 外のデータ型は固定長です。

(6)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

18

2.2 IDL 構文 構文 構文 構文

IDLは、7つの宣言で構成されています。各宣言で使用する名前(識別子)は、先頭が英文字で、英文字、数 字、およびアンダースコア("_")で指定します。英大文字と英小文字は同じものとして扱われます。また、す べてのIDLファイル内に設定した識別子は一意でなければなりません。例えば、異なるIDLファイルでも定 数とインタフェースに同じ識別名を使用すると、コンパイルエラーとなります。

2.2.1 モジュール宣言 モジュール宣言 モジュール宣言 モジュール宣言

モジュールは、IDLのメソッド名や型名などが他のIDLと重複しないように、オブジェクトのグループ化 宣言を行うものです。モジュール宣言では、モジュールとモジュールを束ねて、さらに大きなモジュールを 宣言することができます。

次に、モジュール宣言の書式を示します。

ここで指定したモジュール名は、IDLをコンパイルしたときに生成されるJavaコード内に保持されます。

モジュール名を変更する場合は、IDL の再コンパイルが必要です。静的インタフェースの場合、再コンパイ ルによって生成されたスタブ・スケルトンを使用するか、再コンパイル時にインタフェース情報のインタフ ェースリポジトリへの登録のみを行い、既存のスタブ・スケルトンを修正する必要があります。

次に、モジュール宣言の定義例を示します。

module モジュール名 { IDLの繰り返し };

module sample { IDLの繰り返し };

(7)

2.2 IDL構文構文構文構文

19

2.2.2 インタフェース宣言 インタフェース宣言 インタフェース宣言 インタフェース宣言

インタフェース宣言では、インタフェースの実体を定義します。インタフェース宣言は、C++言語のクラ ス宣言と同様に他のインタフェース宣言を継承して、新しいインタフェース宣言を行うことができます。他 のインタフェース宣言を継承すると、その継承したインタフェース宣言のオペレーション宣言や型宣言など を、あたかも自分で宣言したと同じに扱えるようになります。

インタフェースの継承では、新しいインタフェースを宣言する際に、他のインタフェース宣言を使用して、

差分だけを定義することができます。また、複数のインタフェースを継承することができます。これを多重 継承と呼びます。すべてのインタフェース定義は、明示的に記述しなくてもObjectインタフェースを継承し ます。そのため、オブジェクト自身にインタフェース情報を問い合わせるメソッド get_interfaceDef などの

Objectインタフェースを使用できます。

次に、インタフェース宣言の書式を示します。

ここで指定したインタフェース名は、IDLをコンパイルしたときに生成されるJavaコード内に保持されま す。インタフェース名を変更する場合は、IDL の再コンパイルが必要です。静的インタフェースの場合、再 コンパイルによって生成されたスタブ・スケルトンを使用するか、再コンパイル時にインタフェース情報の インタフェースリポジトリへの登録のみを行い、既存のスタブ・スケルトンを修正する必要があります。

次に、インタフェース宣言の定義例を示します。

interface インタフェース名 ; // フォワード宣言

interface インタフェース名 [:継承するインタフェース] { // ヘッダ オペレーション宣言 ; // 本体

属性宣言 ; 定数宣言 ; 型宣言 ; 例外宣言 ; };

interface calcsv { // ヘッダ

オペレーション宣言 ; // 本体 属性宣言 ;

定数宣言 ; 型宣言 ; 例外宣言 ; };

(8)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

20

2.2.3 オペレーション宣言 オペレーション宣言 オペレーション宣言 オペレーション宣言

オペレーション宣言は、メソッド名、復帰値の型、パラメタのデータ型、メッセージ呼び出し時に返され る例外、コンテキスト情報(サーバアプリケーションとクライアントアプリケーションの間で共通に持つ環 境変数に相当)を含みます。

次に、オペレーション宣言の書式を示します([ ]内は省略可能)。

ここで指定したメソッド名は、クライアントアプリケーションから呼び出すことができます。サーバアプ リケーションではメソッドごとにクライアントアプリケーションから呼び出されたときの処理を記述します。

次に、オペレーション宣言の定義例を示します。

2.2.4 属性宣言 属性宣言 属性宣言 属性宣言

インタフェースが持つデータを宣言します。

次に、属性宣言の形式を示します([ ]内は省略可能)。

Java言語ではIDLで定義された変数名と同じ名前のメンバ変数、およびその変数に対するデータ設定/取 得用のメソッド(変数名と同じ名前)にマッピングされます。

次に、属性宣言の定義例を示します。

[ oneway ] 復帰値のデータ型 メソッド名 ( // メソッド名定義 [ パラメタタイプ データ型 パラメタ名[, ..] ] // パラメタ )

[ raises ( 例外構造体名[, ..] ) ] [ context ( コンテキスト名[, ..] ) ];

[readonly] attribute データ型 変数名;

interface calcsv {

void addop(inout S1 param1);

void subop(inout S1 param1);

void mltop(inout S1 param1) raises (CDException);

void divop(inout S1 param1) raises (CDException);

};

attribute string Name;

readonly attribute long Id;

(9)

2.2 IDL構文構文構文構文

21

2.2.5 定数宣言 定数宣言 定数宣言 定数宣言

次に、定数宣言の書式を示します。

IDL言語で定数(const)をinterface宣言の中で指定した場合、Java言語ではインタフェース名と同じ名前 のpublic interface内で、定数名と同じ名前のpublic static finalメンバ(定数メンバ)としてマッピングされま す。また、interface宣言の外で指定した場合、定数名と同じ名前のpublic interfaceとその内部に、valueとい う名前でpublic static finalメンバが定義されます。

次に、定数宣言の定義例を示します。

2.2.6 型宣言 型宣言 型宣言 型宣言

型宣言は、型によって指定方法が異なります。

次に、それぞれの型宣言の書式を示します。

基本データ型(文字列型、列挙型以外)の場合

基本データ型(文字列型)の場合

基本データ型(列挙型)の場合

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

typedef long データ型名;

typedef short データ型名;

typedef unsigned long データ型名;

typedef unsigned short データ型名;

typedef long long データ型名;

typedef float データ型名;

typedef double データ型名;

typedef long double データ型名;

typedef char データ型名;

typedef wchar データ型名;

typedef octet データ型名;

typedef boolean データ型名;

typedef any データ型名;

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

typedef string データ型名;

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

typedef wstring データ型名;

enum データ型名 { 要素, .. };

// 定数宣言

const string MSG1 = "item1 is zero" ; const string MSG2 = "item2 is zero" ;

(10)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

22

シーケンス型の場合

構造体の場合

共用体の場合

オブジェクトリファレンス

タイプコード

配列

typedef sequence<データ型,サイズ> データ型名;

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

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

};

基本データ型 メンバ名; シーケンス型 メンバ名;

構造体 メンバ名;

共用体 メンバ名;

固定小数点型 メンバ名;

union データ型名 switch (データ型) { case 定数式 ;

要素 [, ..]

: default;

要素 [, ..]

: };

基本データ型 メンバ名; シーケンス型 メンバ名;

構造体 メンバ名;

共用体 メンバ名;

スコープ名 メンバ名;

typedef Object データ型名;

typedef TypeCode データ型名;

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

(11)

2.2 IDL構文構文構文構文

23 IDLで定義されている基本データ型をJavaプログラムで使用する場合、対応するデータ型は次のように定 義されます。

CORBAデータ型 Java

long int unsigned long int

short short unsigned short short

整数型

long long long

float float 浮動小数点型

double double char

文字型

wchar

char

オクテッド型 octet byte ブーリアン型 boolean boolean

string 文字列型

wstring

java.lang.String

列挙型 enum <enum名>クラス

any型 any org.omg.CORBA.Any

オブジェクトリファレンス Object org.omg.CORBA.Object タイプコード TypeCode org.omg.CORBA.TypeCode

(12)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

24

2.2.7 例外宣言 例外宣言 例外宣言 例外宣言

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

次に、例外宣言の書式を示します。

ここで指定した例外宣言は、アプリケーションではユーザ例外として使用します。

次に、例外宣言の定義例を示します。

exception 例外識別子(例外構造体名) {

データ型 メンバ名; // 構造体メンバを宣言 :

};

// 例外宣言

exception CDException{

string CDExceptionMsg;

long CDExceptionCode;

};

(13)

2.3 コンパイルコンパイルコンパイルコンパイル

25

2.3 コンパイル コンパイル コンパイル コンパイル

IDLの翻訳方法には、以下の2種類があります。

IDLcコマンドで翻訳する。

APWORKS上で翻訳する。

APWORKS上で翻訳する方法については、第4章 Javaプログラミング(サーバ) および 第5章 Javaプロ グラミング(クライアント)で説明します。

以下に、IDLcコマンドのリファレンス(Java関連のみ)を示します。

- Java:Java言語にマッピングされたスタブ・スケルトンを生成します。Java言語では必須です。

-a:スタブ・スケルトンを生成し、インタフェース情報をインタフェースリポジトリに登録します。

-create,-update,-deleteのいずれかと組み合わせて指定します。

-R:インタフェース情報のインタフェースリポジトリへの登録だけを行い、スタブ・スケルトンの 生成は行いません。

-create,-update,-deleteのいずれかと組み合わせて指定します。

-create:インタフェース情報をインタフェースリポジトリに登録します。すでに同じ識別子が登録 されているとエラーとなり、現在の作業を無効にします。

-update:インタフェース情報をインタフェースリポジトリに登録します。すでに同じ識別子が登録

されていると、インタフェース情報を更新します。IDLファイルを変更した場合には、

このオプションを指定する必要があります。

-delete:インタフェース情報をインタフェースリポジトリから削除します。登録されていない 識別子があるとエラーとなります。

-Tdir:コンパイラの作業用ファイルの作成位置を指定します。

(省略時:環境変数TEMPまたはTMPの設定値)

-f:インタフェース情報とスタブの不一致検出機能を有効とします。

-nolog:CORBAサービスのトレース採取機能を無効とします。

IDLfile:IDLファイルを記述したファイル名を指定します。

IDLc – java [-a [-create|-update|-delete] |-R [-create|-update|-delete]]

[-Tdir] [-f] [-nolog] [IDLfile]

(14)

第第

第第2章章章章 インタフェース定義言語インタフェース定義言語インタフェース定義言語インタフェース定義言語(IDL)

26

次のようなIDL定義を作成し、IDLcコマンドを実行します。IDLファイルのファイル名や、格納ディレク トリについては、講師の指示にしたがってください。

IDLcコマンドの実行例を以下に示します。IDLcコマンドは、[スタート]-[プログラム]-[アクセサリ]-[コマ ンドプロンプト]より行います。

// モジュール宣言

module modCalcRateSv {

// 定数宣言

const string MSG1 = "balance is zero" ; const string MSG2 = "rate is zero" ; const string MSG3 = "span is zero" ; const string MSG4 = "You can not payout" ; // 型宣言

// 構造体宣言 struct Structure1 {

long pay;

long balance;

double rate;

long span;

long expectation;

};

// 例外宣言

exception CDException{

string CDExceptionMsg;

long CDExceptionCode;

};

// ユーザインタフェース宣言 interface CalcRateSv {

void initbal(inout Structure1 param1);

void addbal(inout Structure1 param1);

void subbal(inout Structure1 param1) raises (CDException);

void calcbal(inout Structure1 param1) raises (CDException);

};

};

IDLc -java -a -update IDLfile.idl

参照

関連したドキュメント

この 文書 はコンピューターによって 英語 から 自動的 に 翻訳 されているため、 言語 が 不明瞭 になる 可能性 があります。.. このドキュメントは、 元 のドキュメントに 比 べて

 この論文の構成は次のようになっている。第2章では銅酸化物超伝導体に対する今までの研

 第一の方法は、不安の原因を特定した上で、それを制御しようとするもので

に関して言 えば, は つのリー群の組 によって等質空間として表すこと はできないが, つのリー群の組 を用いればクリフォード・クラ イン形

スライド5頁では

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

事業セグメントごとの資本コスト(WACC)を算定するためには、BS を作成後、まず株

次に、第 2 部は、スキーマ療法による認知の修正を目指したプログラムとな