bea ホーム | 製品 | dev2dev | support | askBEA |
|
e-docs > Tuxedo > TxRPC を使用した Tuxedo アプリケーションのプログラミング > インターフェイス定義言語 (IDL) の使用 |
TxRPC を使用した Tuxedo アプリケーションのプログラミング |
インターフェイス定義言語 (IDL) の使用
ここでは、次の内容について説明します。
参考資料
BEA Tuxedo TxRPC は、『DCE: REMOTE PROCEDURE CALL』(Doc Code:P312 ISBN 1-872630-95-2) の「第 3 章 Interface Definition Language」で説明されている IDL 文法と関連機能をサポートしています。この本は以下から入手できます。
X/OPEN Company Ltd (Publications)
P O Box 109
Penn
High Wycombe
Bucks HP10 8NP
United Kingdom
電話: +44 (0) 494 813844
ファクシミリ: +44 (0) 494 814989
X/OPENドキュメントは、BEA Tuxedo 製品が準拠し、その言語および規則の原典とするものです。X/OPEN TxRPC IDL-only インターフェイスがサポートされていることに注意してください。DCE バインディングとランタイムに関するドキュメントの一部は適用されません。X/OPEN ドキュメントは OSF AES/RPC ドキュメントを基本としています。チュートリアル、プログラマーズ・ガイドとして入手可能な文献は多数ありますが、ほとんどのものには最新の機能は記載されていません。OSF から入手できるプログラマーズ・ガイドとして、Prentice-Hall の『OSF DCE Application Development Guide』(Englewood Cliffs, New Jersey, 07632) があります。
『X/OPEN Preliminary Specification for TxRPC Communication Application Programming Interface』(TxRPC 通信アプリケーション・プログラミング・インターフェイスのための X/OPEN 予備仕様) もまた X/OPEN から入手できます (上記を参照)。TxRPC は、RPC 用のトランザクション・サポートをオリジナルの X/OPEN RPC インターフェイスに追加しています。
uuidgen による IDL テンプレートの作成
汎用一意識別子 (UUID) はインターフェイスを一意に識別するために使用します。uuidgen コマンドを実行して UUID を生成します。出力は次のようになります。
$ uuidgen -i > simp.idl
$ cat simp.idl
[uuid(816A4780-A76B-110F-9B3F-930269220000)]
interface INTERFACE
{
}
次にこのテンプレートを使用して、型定義、定数、およびオペレーションを追加するアプリケーション用の IDL 入力ファイルを作成します。
BEA Tuxedo と DCE の両方の uuidgen(1) コマンドを利用できる場合は、DCE コマンドでテンプレートを生成する必要があります。DCE バージョンでは通常、以下で説明するとおり、ノード・アドレスを取得するためにマシン固有の手法を採用しています。
BEA Tuxedo システムの uuidgen コマンドは、-s オプション (初期化された C 構造体として UUID 文字列を生成する) と、-t オプション (以前の形式の UUID 文字列を新規形式に変換する) をサポートしていない点を除いて、DCE コマンドと同じです。インターフェイスの詳細については uuidgen(1) のリファレンス・ページを参照してください。
uuidgen コマンドは、ISO/IEC 8802-3 (ANSI/IEEE 802.3) に記載されているように 48 ビット・ノード・アドレスを要求します。プラットフォームに依存せずにこの値を求める方法は存在しません。また一部のマシン (ワークステーションなど) ではまったく利用できないこともあります。BEA Tuxedo システムの uuidgen コマンドでは、次の手法が使用されています。
言語の変更点
IDL コンパイラは IDL 文法を認識して、入力に基づいてスタブ関数を生成します。文法とその指定方法は、本章前半に記載した X/OPEN リファレンスと OSF/DCE リファレンスの両方に詳しく説明されています。次の項目で説明するいくつかの変更を加えることで文法はそのまま認識されます。
TxRPC 仕様に基づく変更
次に X/OPEN TxRPC 仕様に定義されている基本 X/OPEN RPC 仕様に対する変更点を示します。
言語の拡張
次に X/OPEN RPC 仕様に対する強化を示します。多くの場合、言語は C 言語により密接に従うように拡張されており、ANSI C から IDL プロトタイプに変換することにより、既存インターフェイスの移植を簡素化しています。
|| && ? | & _ == != = << >> <= >= < > + - % ! ~
つまり、これらのトークンの 1 つが先行するまたは後続する場合は、識別子または数字の前または後に空白を入れる必要はないということです。IDL 仕様では 'a=b+3' は認められず、'a = b + 3' のように空白を入れる必要があります。これは OSF DCE IDL コンパイラの動作によるものと思われます。
long *op(void);
また、構造体または共用体を返すことも認めていません。すべてを定義済みの型に隠ぺいできるという点で正しいと考えられますが、DCE IDL コンパイラと、もちろん C コンパイラはより豊富なオペレーションを返すことを認めています。サポートされている文法は以下のようになります。
[operation_attributes] <type_spec> <declarator>
この場合の <declarator> は、<function_declarator> を含む必要があります。<function_declarator> が存在しない場合、変数は宣言されますが、結果としてエラーになります。オペレーションの配列または配列を返すオペレーションを宣言することは共にこの文法で認められていて、宣言としては認識されますが、エラーが通知されます。
移植性に制限を加える可能性がある拡張
X/OPEN RPC 仕様に対して BEA Tuxedo の 4 つの拡張機能が追加されており、これらは仕様をより C 言語に近づける一方で、OSF DCE IDL コンパイラではサポートされないために IDL ファイルの移植性に制限を加えることになります。
const char *str = “abc” “def”;
は、次と同じように扱われます。
const char *str = “abcdef”;
const char *str = “abc¥
def”;
は、次と同じように扱われます。
const char *str = “abcdef”;
サポートされていない機能
以下の 7 つの機能は tidl コンパイラではサポートされていません。
IDL コンパイラ tidl の使用
IDL コンパイラ用のインターフェイスは、X/OPEN 仕様では指定されていません。
DCE アプリケーションの移植性を考慮し、BEA Tuxedo システムの IDL コンパイラのインターフェイスは DCE IDL コンパイラと同様ですが、次のような例外があります。
デフォルトでは、IDL コンパイラは入力 IDL ファイルを受け取り、クライアントとサーバ・スタブのオブジェクト・ファイルを生成します。-keep c_source オプションは C ソース・ファイルだけを生成し、-keep all オプションは C ソース・ファイルとオブジェクト・ファイルの両方を保持します。アプリケーション例で示したサンプル RPC アプリケーションでは、-keep object オプションを使用してオブジェクト・ファイルを生成しています。
デフォルトでは、tidl は最大 50 個までのエラーを表示します。エラー数が 50 個を超えている場合に、すべてのエラーを表示するときは、-error all オプションを指定します。エラー出力は stderr に送られます。
その他使用可能なオプションの詳細については、『BEA Tuxedo コマンド・リファレンス』の tidl(1) を参照してください。