ヘッダーをスキップ
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』もまた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入力ファイルを作成します。

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

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

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

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