bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo CORBA プログラミング・リファレンス

 Previous Next Contents View as PDF  

OMG IDL 構文と C++ IDL コンパイラ

Object Management Group (OMG) インターフェイス定義言語 (IDL) は、クライアント・オブジェクトから呼び出し、オブジェクトのインプリメンテーションで提供するインターフェイスを記述します。OMG IDL インターフェイス定義では、各オペレーションのパラメータをすべて指定して、インターフェイスのオペレーションを使用するクライアント・アプリケーションの開発に必要な情報を提供します。

クライアント・アプリケーションは、OMG IDL 文のマッピング先として定義されている言語で作成されます。OMG IDL 文とクライアント言語の構造体とのマッピング方法は、クライアント言語で利用可能な機能によって異なります。たとえば、OMG IDL の例外を、例外の概念を持たない言語の構造体、または概念を持つ言語の例外にマップすることができます。

OMG IDL 文は、C++ 文と同じ文法規則に従います。ただし、分散概念をサポートするための new キーワードが導入されています。また、OMG IDL 文は、標準的な C++ プリプロセッサ機能および OMG IDL 固有のプラグマをフル・サポートしています。

注記 pragma version 文を使用する場合は、対応するインターフェイス定義の後に配置する必要があります。次の例で正しい使い方を示します。

module A
{
interface B
{
#pragma version B "3.5"
void op1();
};
};

OMG IDL の文法は、オペレーション呼び出しメカニズムをサポートするための構造体が追加された ANSI C++ のサブセットです。OMG IDL は宣言型言語であり、定数、型、およびオペレーションの宣言に関して C++ の構文をサポートしています。ただし、アルゴリズミックな構造体または変数は含まれません。

OMG IDL の文法の詳細については、「Common Object Request Broker: Architecture and Specification Revision 2.4」の第 3 章「OMG IDL Syntax and Semantics」を参照してください。

OMG IDL の文法はサポートされていますが、次の型宣言および関連リテラルを除きます。

注記 CORBA 2.4 では native 型宣言がオブジェクト・アダプタ用として記述されているので、この型は、コールバックをサポートしているクライアントの PortableServer モジュール、つまり共同クライアント/サーバでのみ利用可能です。

これらのデータ型を IDL 定義で使用しないでください。

注記 BEA Tuxedo CORBA のリリース 8.0 では、long longunsigned long longwchar、および wstring データ型のサポートが追加されました。

また、OMG IDL ファイルをコンパイルまたはロードする場合にも独自のマクロを定義できます。

表 1-1 では、各プラットフォーム用の定義済みマクロについて説明します。

表 1-1 定義済みのマクロ

マクロ識別子

マクロが定義されているプラットフォーム

__unix__

Sun Solaris、HP-UX、Tru64 UNIX、および IBM AIX

__osf1__

Tru64 UNIX

__sun__

Sun Solaris

__hpux__

HP-UX

__aix__

IBM AIX

__win_nt__

Microsoft Windows 2000 および NT


 

表 1-2 は、BEA Tuxedo 8.0 の C++ IDL コンパイラの制約について説明し、推奨される対策を示しています。

表 1-2 C++ IDL コンパイラ

制約

OMG IDL コンテキスト文字列でワイルドカードを使用すると、警告メッセージが表示されます。


説明

警告メッセージは、ワイルドカード文字を含むコンテキスト文字列をオペレーションの定義で使用した場合に、C++ IDL コンパイラによって表示されます。コンテキスト文字列を OMG IDL オペレーション定義で指定すると、次の警告メッセージが表示されます。

void op5() context("*");
^
LIBORBCMD_CAT:131: INFO: ‘*’ is a non-standard
context property.


対策

OMG CORBA 仕様では、コンテキスト文字列の先頭に英数字を使用しなければならないかどうかについて明確に指定されていません。

この警告メッセージは、解釈によっては OMG CORBA 仕様に準拠していないことを通知するためのものです。上記のように、すべての文字列をコンテキスト文字列として指定する場合、OMG CORBA 仕様では、先頭に英文字を使用した文字列からなるカンマ区切りのリストが必要です。

注記 上記の例は OMG CORBA に準拠していませんが、BEA Tuxedo ソフトウェアによってユーザの意図したとおりに処理されます。

制約

OMG IDL コンテキスト文字列でワイルドカードを使用すると、警告メッセージが表示されます。


説明

警告メッセージは、ワイルドカード文字を含むコンテキスト文字列をオペレーションの定義で使用した場合に、C++ IDL コンパイラによって表示されます。コンテキスト文字列を OMG IDL オペレーション定義で指定すると、次の警告メッセージが表示されます。

void op5() context("*");
^
LIBORBCMD_CAT:131: INFO: ‘*’ is a non-standard
context property.


対策

OMG CORBA 仕様では、コンテキスト文字列の先頭に英数字を使用しなければならないかどうかについて明確に指定されていません。

この警告メッセージは、解釈によっては OMG CORBA 仕様に準拠していないことを通知するためのものです。上記のように、すべての文字列をコンテキスト文字列として指定する場合、OMG CORBA 仕様では、先頭に英文字を使用した文字列からなるカンマ区切りのリストが必要です。

注記 上記の例は OMG CORBA に準拠していませんが、BEA Tuxedo ソフトウェアによってユーザの意図したとおりに処理されます。

制約

C++ IDL コンパイラが一部のデータ型をサポートしていません。


説明

現在、C++ IDL コンパイラは、CORBA 仕様バージョン 2.4 で定義されている以下のデータ型をサポートしていません。


対策

これらのデータ型を IDL 定義で使用しないようにします。

制約

識別子で特定の文字列を使用すると、C++ IDL コンパイラが不正なコードを生成することがあります。


説明

識別子に以下の文字列を使用すると、コードが正しく生成されず、コードのコンパイル時にエラーが発生します。

get_
set_
Impl_
_ptr
_slice


対策

これらの文字列を識別子に使用しないようにします。

制約

大文字と小文字の区別に関して、IDL コンパイラの動作に一貫性がありません。


説明

CORBA 標準によると、大文字と小文字の区別だけが異なる IDL 識別子は競合と見なされ、コンパイル・エラーが発生します。現在、BEA Tuxedo IDL コンパイラには、C++ バインディングに関して、名前の競合を検出して報告しない場合があるという制限があります。


対策

大文字と小文字の区別だけが異なる IDL 識別子を使用しないようにします。

制約

C++ IDL typedef の問題があります。


説明

C++ IDL コンパイラは、次の場合にコンパイルできないコードを生成します。

たとえば、次の IDL コードから生成された C++ コードはコンパイルできません。

module X

{

typedef boolean a;

typedef a b;

interface Y

{

attribute b Z;

};

};

C++ コンパイラは、「operator <<」が不明確であり、char 型の「operator>>」がないことを示すエラーを報告します。これらのエラーは、typedef のレベルが複数になっているために発生します。つまり、X::a という中間の型定義があるため、C++ コンパイラは、型 X::bCORBA::Boolean を関連付けることができません。


対策

char または boolean 型を定義する場合は、間接レベルを 1 つにします。上記の IDL の例では、属性「X::Z」は、ユーザ型「X::b」ではなく、標準型「boolean」またはユーザ型「X::a」を使用して定義されます。


 

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy