ヘッダーをスキップ
TxRPC を使用した Oracle Tuxedo アプリケーションのプログラミング
  目次へ
目次

戻る
戻る
 
次へ
次へ
 

2 インタフェース定義言語 (IDL) の使用

ここでは、次の内容について説明します。

参考資料

Oracle 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

FAX : +44 (0) 494 814989

X/OPEN ドキュメントは、Oracle Tuxedo 製品が準拠し、その言語および規則の原典とするものです。X/OPEN TxRPC IDL-only インタフェースがサポートされていることに注意してください。DCE バインドとランタイムに関するドキュメントの一部は適用されません。X/OPEN ドキュメントは OSF DCE 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 入力ファイルを作成します。

Oracle Tuxedo と DCE の両方の uuidgen(1) コマンドを利用できる場合は、DCE コマンドでテンプレートを生成する必要があります。DCE バージョンでは通常、以下で説明するとおり、ノード アドレスを取得するためにマシン固有の手法を採用しています。

Oracle Tuxedo システムの uuidgen コマンドは、-s オプション (初期化された C 構造体として UUID 文字列を生成する) と、-t オプション (以前の形式の UUID 文字列を新規形式に変換する) をサポートしていない点を除いて、DCE コマンドと同じです。インタフェースの詳細については uuidgen(1) のリファレンス ページを参照してください。

uuidgen コマンドは、ISO/IEC 8802-3 (ANSI/IEEE 802.3) に記載されているように 48 ビット ノード アドレスを要求します。プラットフォームに依存せずにこの値を求める方法は存在しません。また一部のマシン (ワークステーションなど) ではまったく利用できないこともあります。Oracle Tuxedo システムの uuidgen コマンドでは、次の手法が使用されています。

言語の変更点

IDL コンパイラは IDL 文法を認識して、入力に基づいてスタブ関数を生成します。文法とそのセマンティクスは、本章前半に記載した X/OPEN リファレンスと OSF/DCE リファレンスの両方に詳しく説明されています。次の項目で説明するいくつかの変更を加えることで文法はそのまま認識されます。

TxRPC 仕様に基づく変更

次に X/OPEN TxRPC 仕様に定義されている基本 X/OPEN RPC 仕様に対する変更点を示します。

言語の拡張

次に X/OPEN RPC 仕様に対する強化を示します。多くの場合、言語は C 言語により密接に従うように拡張されており、ANSI C から IDL プロトタイプに変換することにより、既存インタフェースの移植を簡素化しています。

移植性に制限を加える可能性がある拡張

X/OPEN RPC 仕様に対して Oracle Tuxedo の 4 つの拡張機能が追加されており、これらは仕様をより C 言語に近づける一方で、OSF DCE IDL コンパイラではサポートされないために IDL ファイルの移植性に制限を加えることになります。

  • ANSI C と同様に、文字列連結がサポートされます。つまり、

    const char *str = "abc" "def";
    

    は、次と同じように扱われます。

    const char *str = "abcdef";
    
  • エスケープ文字を使用した改行を文字列定数内で用いることができます。つまり、

    const char *str = "abc\
     def";
    

    は、次と同じように扱われます。

    const char *str = "abcdef";
    
  • 列挙値はユニオン ケースでも使用でき、整数として扱われます。C と同様に自動的に変換されます。

  • <union_case_label> の型を <switch_type_spec> によって指定する必要があるという制約は設けていません。代わりに、C の switch ステートメントの case ステートメントで行われるような型の強制変換が行われます。

サポートされていない機能

以下の 7 つの機能は tidl コンパイラではサポートされていません。

IDL コンパイラ tidl の使用

IDL コンパイラ用のインタフェースは、X/OPEN 仕様では指定されていません。

DCE アプリケーションの移植性を考慮し、Oracle Tuxedo システムの IDL コンパイラのインタフェースは DCE IDL コンパイラと同様ですが、次のような例外があります。

デフォルトでは、IDL コンパイラは入力 IDL ファイルを受け取り、クライアントとサーバ スタブのオブジェクト ファイルを生成します。-keep c_source オプションは C ソース ファイルだけを生成し、-keep all オプションは C ソース ファイルとオブジェクト ファイルの両方を保持します。「アプリケーション例」で示したサンプル RPC アプリケーションでは、-keep object オプションを使用してオブジェクト ファイルを生成しています。

デフォルトでは、tidl は最大 50 個までのエラーを表示します。エラー数が 50 個を超えている場合に、すべてのエラーを表示するときは、-error all オプションを指定します。エラー出力は stderr に送られます。

その他使用可能なオプションの詳細については、『Tuxedo コマンド リファレンス』の tidl(1) を参照してください。