2.1 型付きバッファの概要
あるプロセスから別のプロセスにメッセージを送信する場合、メッセージ・データ用のバッファを割り当てておく必要があります。Oracle Tuxedo ATMIクライアントは、型付きバッファを使用してATMIサーバーにメッセージを送ります。型付きバッファとは、カテゴリ(タイプ)と、サブカテゴリ(サブタイプ)が定義されたメモリー領域です。型付きバッファは、Oracle Tuxedoシステムでサポートされる分散プログラミング環境の基本要素の1つです。
なぜ型付きを使用するのでしょうか。分散環境では、アプリケーションが異機種システムにインストールされ、異なるプロトコルを使用して複数のネットワーク間で通信が行われます。バッファ・タイプが異なると、初期化、メッセージの送受信、およびデータのエンコード/デコードにそれぞれ別のルーチンが必要になります。各バッファに特定のタイプが割り当てられていると、プログラマが介在しなくても、そのタイプに対応するルーチンを自動的に呼び出すことができます。
次の表は、Oracle Tuxedoシステムでサポートされる型付きバッファと、そのバッファが次の条件を満たしているかどうかを示しています:
- 自己記述型であるかどうか。つまり、バッファのデータ型と長さが、タイプとサブタイプ、およびそのデータからわかるかどうか。
- サブタイプが必要かどうか。
- 型付きバッファのデータ依存型ルーティングがシステムでサポートされているかどうか。
- 型付きバッファのエンコード/デコードがシステムでサポートされているかどうか。
ルーティング関数が必要な場合は、アプリケーション・プログラマが用意します。
表2-1 型付きバッファ
型付きバッファ | 説明 | 自己記述型 | サブタイプ | データ依存型ルーティング | エンコード/デコード |
---|---|---|---|---|---|
CARRAY | 未定義の文字配列。NULL文字を含むことができます。Oracle Tuxedoシステムでは配列のセマンティクスは解釈されないので、この型付きバッファは曖昧なデータを処理する場合に使用します。CARRAYは自己記述型ではないので、転送時には長さを指定する必要があります。システムではバイトは解釈されないので、マシン間のメッセージ送信ではエンコード/デコードはサポートされません。 | いいえ | いいえ | いいえ | いいえ |
FML (フィールド操作言語) | Oracle Tuxedoシステム固有の自己記述型バッファ・タイプ。このバッファでは、各データ・フィールドに対応する識別子、オカレンス番号、場合によっては長さを示す値が格納されています。データ操作はすべて、ネイティブなC言語の文ではなくFML関数を使用して行われます。このため、処理に多少のオーバーヘッドが生じてでも、FMLバッファを通じて、データの独立性と動作の柔軟性が確保されるようになっています。
FMLバッファでは、フィールド識別子とフィールド長に16ビットが使用されます。 FMLバッファの詳細は、「FML型バッファ」を参照してください |
はい | いいえ | はい | はい |
FML32 | FMLと同じ。ただし、フィールド識別子とフィールド長に32ビットが使用されます。より長いフィールドを多数使用できるので、バッファ全体が大きくなります。
FML32バッファの詳細は、「FML型バッファ」を参照してください |
はい | いいえ | はい | はい |
STRING | 最後がNULL文字で終了する文字配列。STRINGバッファは、自己記述型です。そのため、異なる文字セットを使用するマシン間でデータを交換する場合は、Oracle Tuxedoシステムによってデータが自動的に変換されます。 | はい | いいえ | いいえ | いいえ |
VIEW | アプリケーションで定義されるC構造体。VIEW型には、個々のデータ構造体を示すサブタイプが必要です。VIEW記述ファイル(データ構造体のフィールドとタイプが定義されたファイル)は、VIEW型バッファに定義されたデータ構造体を使用するクライアント・プロセスとサーバー・プロセスがアクセスできなければなりません。異なるタイプのマシン間でバッファがやり取りされる場合は、エンコード/デコードが自動的に行われます。
VIEWは、mbstring型バッファをサポートしていません。 VIEWバッファの詳細は、「VIEW型バッファの使用」を参照してください |
いいえ | はい | はい | はい |
VIEW32 | VIEWと同じ。ただし、長さとカウントのフィールド長に32ビットが使用されます。より長いフィールドを多数使用できるので、バッファ全体が大きくなります。
VIEW32は、mbstring型バッファをサポートしており、carrayと同じ方法でmbstringデータを処理します。 VIEWバッファの詳細は、「VIEW型バッファの使用」を参照してください |
いいえ | はい | はい | はい |
X_C_TYPE | VIEWと同じです。 | いいえ | はい | はい | はい |
X_COMMON | VIEWと同じ。ただし、このバッファ型はCOBOLとCプログラム間の互換性を取るために使用されます。フィールド・タイプとして使用できるのは、short、long、およびstringだけです。 | いいえ | はい | はい | はい |
XML | XMLドキュメントは、次の要素から構成されます。
UBBCONFIG(5) とDMCONFIG(5) )で使用されているネイティブな文字セット(US-ASCIIまたはEBCDIC)と異なる場合、要素と属性名はUS-ASCIIまたはEBCDICに変換されます。
XMLバッファおよびXerces C++パーサーの詳細は、「XML型バッファとApache Xerces C++パーサーの使用」を参照してください |
いいえ | いいえ | はい | いいえ |
X_OCTET | CARRAYと同じです。 | いいえ | いいえ | いいえ | いいえ |
MBSTRING | Oracle Tuxedo 8.1で使用可能になったマルチバイト文字の文字配列。MBSTRINGバッファの詳細は、「MBSTRING型バッファの使用」を参照してください | いいえ | いいえ | いいえ | いいえ |
RECORD | アプリケーションで定義されるCOBOLコピーブック・レコード。RECORD型には、レコード構造体を示すサブタイプが必要です。レコード構造体のフィールドと型が定義されたRECORD記述ファイルは、RECORD型バッファに記述されたレコード構造体を使用するクライアント・プロセスとサーバー・プロセスで使用できる必要があります。RECORDバッファの詳細は、「RECORD型バッファの使用」を参照してください。 | いいえ | はい | いいえ | はい |
すべてのバッファ・タイプは、$TUXDIR/lib
ディレクトリのtmtypesw.c
ファイルに定義されています。クライアント・プログラムとサーバー・プログラムで認識されるバッファ・タイプは、tmtypesw.c
に定義されているものだけです。tmtypesw.c
ファイルを編集して、バッファ・タイプを追加したり削除できます。また、UBBCONFIG
のBUFTYPE
パラメータを使用して、特定のサービスで処理できるタイプとサブタイプを制限できます。
tmtypesw.c
ファイルは、共有オブジェクトや動的リンク・ライブラリのビルドに使用されます。このオブジェクトは、Oracle Tuxedo管理サーバー、およびアプリケーション・クライアントとアプリケーション・サーバーによって動的にロードされます。
関連項目:
- 『Oracle Tuxedoファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』の
tuxtypes(5)
およびUBBCONFIG(5)
に関する項
親トピック: 型付きバッファの管理