• このドキュメントでは、VIEW定義の作成についても説明します。VIEW定義とは、Oracle Tuxedo環境の入出力に使用するデータ構造を記述したものです。TMA TCP Gateway製品はVIEW定義に基づいて、ターゲット・システムで受付け可能なフォーマットに入出力データを変換する方法を判断します。
2. TMA TCP Gatewayはバッファのタイプを判定した後に、構成ファイル(GWICONFIG)を参照して、そのバッファを別のフォーマットに変換する必要があるかどうかを確認します。
1. TMA TCP Gatewayはリモート・システムからレコードを受信するときに、構成ファイル(GWICONFIG)の定義を参照してレコードのタイプを判断します。
2. TMA TCP Gatewayはレコードのタイプを判断した後に、ドメイン構成(DMCONFIG)の定義を参照して、そのレコードを別のフォーマットに変換する必要があるかどうかを確認します。ドメイン構成ファイル(DMCONFIG)に次のバッファ構成パラメータを指定します。ゲートウェイ構成ファイル(GWICONFIG)に次のレコード構成パラメータを指定します。この項では、TMA TCP Gatewayがどのようにローカル(こちら側のOracle Tuxedoリージョンの中)からのサービス呼出しを処理しているのかについて詳しく説明します。また、ローカルのクライアント・プログラムとリモート・サービスの間でやり取りされるバッファやレコードの変換を管理するために、INBUFTYPE、INRECTYPE、OUTRECTYPEおよびOUTBUFTYPEの各パラメータをどのように使用するのかについても説明します。
• 次の項では、ローカルによるサービス呼出し(ローカル・クライアント・プログラムからのリモート・サービスの呼出し)におけるINBUFTYPEおよびINRECTYPEパラメータの使用方法について詳しく説明します。INBUFTYPEパラメータの用途は、ローカルのクライアント・プログラムがサービス・リクエストを発行するときに、ローカルのTMA TCP Gatewayに渡されるリクエストがどのバッファ・タイプなのかを指定することです。INRECTYPEパラメータは、特定のリモート・サービスから要求されるリクエスト・レコードのタイプ(さらに場合によってはフォーマット)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、リモート・サービスによる処理が可能なレコードにOracle Tuxedoのリクエスト・バッファを変換します。次の表に記述されている状況のいずかに該当する場合は、INRECTYPEパラメータを指定する必要があります。
この場合、リモート・サービスはクライアント・プログラムのVIEW、X_C_TYPE、X_COMMONのどのバッファとも異なる構造のレコードを使用します。たとえば、リモート・サービスが、並び順の異なる構造体メンバーを受け取ることを前提にしているケースもあります。 次の項では、ローカルによるサービス呼出し(ローカル・クライアント・プログラムからのリモート・サービスの呼出しおよびサービスからの出力の受信)におけるOUTRECTYPEおよびOUTBUFTYPEパラメータの使用方法について詳しく説明します。OUTBUFTYPEパラメータは、ローカルのクライアント・プログラム側で前提にしている応答バッファのタイプ(さらに場合によっては構造)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、リモート・サービスからの応答レコードを適切なタイプの応答バッファにマップします。次の表に記述されている状況のいずかに該当する場合は、OUTRECTYPEパラメータを指定する必要があります。
この場合、リモート・サービスは、クライアント・プログラムのVIEW、X_C_TYPE、X_COMMONのいずれのバッファとも異なる構造のレコードを戻します。たとえば、出力レコードの構造体メンバーが、出力バッファの構造体メンバーと異なる並び順になっていることがあります。 この項では、TMA TCP Gatewayがどのようにリモート・コンピュータ(ローカルのOracle Tuxedoリージョンの外側)からのサービス呼出しを処理しているのかについて詳しく説明します。また、リモートのクライアント・プログラムとローカル・サービスの間でやり取りされるバッファやレコードの変換を管理するために、INRECTYPE、INBUFTYPE、OUTBUFTYPEおよびOUTRECTYPEの各パラメータをどのように使用するのかについても説明します。これより、リモート・システム(リモートのクライアント・プログラムからのローカル・サービス呼出しを行うシステム)からサービスを呼び出す際に、INRECTYPEパラメータとINBUFTYPEパラメータをどのように使用するのかについて詳しく説明します。INBUFTYPEパラメータは、TMA TCP Gatewayがローカル・サーバーから受け取るときの前提にしている、応答バッファのタイプ(さらに場合によっては構造)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、ローカル・サーバーのプログラムからの応答バッファを適切なタイプの応答レコードにマップします。次の表に記述されている状況のいずかに該当する場合は、INRECTYPEパラメータを指定する必要があります。
この場合、リモートのクライアント・プログラムは、ローカル・サービスのVIEW、X_C_TYPE、X_COMMONのいずれのバッファとも異なる構造のレコードを戻します。たとえば、入力レコードの構造体メンバーが、入力バッファの構造体メンバーと異なる並び順になっていることがあります。 ローカル・サーバーのプログラムが送信する応答バッファが、タイプ面でも構造面でも、リモート・クライアント側で前提としている応答レコードと一致するのであれば、INRECTYPEパラメータは省略してもかまいません。これより、リモート・コンピュータ(リモートのクライアント・プログラムからのローカル・サービス呼出しと、そのサービスからの出力の受取りを行うコンピュータ)からサービスを呼び出す際に、OUTBUFTYPEパラメータとOUTRECTYPEパラメータをどのように使用するのかについて詳しく説明します。OUTRECTYPEパラメータは、特定のリモートのクライアント・プログラムからTMA TCP Gatewayに送信されるリクエスト・レコードのタイプ(さらに場合によってはフォーマット)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、ローカル・サーバーのプログラムによる処理が可能なバッファに、リモート・クライアントからのリクエスト・レコードを変換します。次の表に記述されている状況のいずかに該当する場合は、OUTRECTYPEパラメータを指定する必要があります。
この場合、リモートのクライアント・プログラムは、ローカル・サービスのVIEW、X_C_TYPE、X_COMMONのいずれのバッファとも異なる構造のレコードを示します。たとえば、ローカル・サーバーのプログラムが、並び順が異なる構造体メンバーを受け取ることを前提にしているケースもあります。 図3-3 バッファからレコードへのマッピング
Oracle TuxedoのCARRAY型の入力バッファをCARRAY型の入力レコードにコピーできます。CARRAY型のバッファには、レイアウトもデータ型も変換されない、そのままの状態のデータが格納されます。INBUFTYPEパラメータをCARRAYに設定し、INRECTYPEパラメータは指定しません。CARRAY型の入力バッファはSTRING型の入力レコードにもコピーできます。この場合は、レイアウトもデータ型も変換されずに文字列が作成されます。処理結果のバッファは、元のCARRAY型バッファの長さです。文字がすべてコピーされるため、CARRAY型バッファにNULL文字が含まれている場合は、後でそのバッファがSTRING型として扱われるときに影響を与えます。INBUFTYPEパラメータをCARRAYに設定し、INRECTYPEパラメータをSTRINGに設定する必要があります。 Oracle TuxedoのSTRING型の入力バッファをCARRAY型の入力レコードにマップできます。データのレイアウトも型も変更されません。左端にNULL文字が格納されている場合にのみ、STRING型バッファはコピーされます。INBUFTYPEパラメータをSTRINGに設定し、INRECTYPEパラメータをCARRAYに設定します。 Oracle TuxedoのSTRING型の入力バッファをSTRING型の入力レコードにマップできます。バッファはデータ型の変換(ASCIIからEBCDICへの変換など)の対象になります。INBUFTYPEパラメータSTRINGに設定し、INRECTYPEパラメータは指定しません。 Oracle TuxedoのVIEW型の入力バッファを、それに相当するOracle TuxedoのVIEW型の入力レコードにマップできます。この場合は、リモート・サービス側で前提にしているデータ構造が、クライアント・プログラムが使用するデータ構造と一致します。新しくVIEW定義を作成する必要はありません。かわりに、入力レコードのタイプ(VIEW)と既存のVIEW定義(クライアント・プログラムが現在使用している定義)の名前の両方をINBUFTYPEパラメータに指定し、INRECTYPEパラメータは指定しません。 Oracle TuxedoのVIEW型の入力バッファを、任意に組み合せたVIEW型の入力レコードにマップできます。しかし、この場合は、リモート・サービス側で前提にしているデータ構造(図3-3のマッピングのパターンのVIEW 'B')と、クライアント・プログラムが使用するデータ構造(図3-3ではVIEW 'A')は異なります。したがって、次の操作が必要です。 Oracle TuxedoのFML型の入力バッファを、FMLをサポートしていないリモート・サービスに送信できるように、VIEW、X_C_TYPEまたはX_COMMONのいずれかの入力レコード・タイプにマップする必要があります。また、リモート・サービス側で前提にしている入力データ構造に合わせてVIEW定義を作成する必要もあります。INBUFTYPEをFMLに設定し、INRECTYPEをVIEW:viewnameに設定します。図3-4 レコードからバッファへのマッピング前述の図に示した想定しうるマッピングのパターンの一部と、OUTRECTYPEパラメータとOUTBUFTYPEパラメータ(ローカルからのサービス呼出しに使用するパラメータ)の設定に関する説明を次の表にまとめています。
Oracle TuxedoのCARRAY型の出力レコードをCARRAY型の出力バッファにコピーできます。CARRAY型のバッファには、レイアウトもデータ型も変換されない、そのままの状態のデータが格納されます。OUTBUFTYPEパラメータをCARRAYに設定します。OUTRECTYPEパラメータを設定する必要はありません。Oracle TuxedoのCARRAY型の出力レコードはSTRING型の出力バッファにもコピーできます。この場合は、レイアウトもデータ型も変換されずに文字列が作成されます。処理結果のバッファは、元のCARRAY型バッファの長さです。文字がすべてコピーされるため、CARRAY型バッファにNULL文字が含まれている場合は、後でそのバッファがSTRING型として扱われるときに影響を与えます。OUTRECTYPEパラメータをCARRAYに設定し、OUTBUFTYPEパラメータをSTRINGに設定する必要があります。 Oracle TuxedoのSTRING型の出力レコードをCARRAY型の出力バッファにマップできます。データのレイアウトも型も変更されません。左端にNULL文字が格納されている場合にのみ、STRING型のバッファはコピーされます。OUTRECTYPEパラメータをSTRINGに設定し、OUTBUFTYPEパラメータをCARRAYに設定します。 Oracle TuxedoのSTRING型の出力レコードをSTRING型の出力バッファにマップできます。バッファはデータ型の変換(ASCIIからEBCDICへの変換など)の対象になります。OUTBUFTYPEパラメータとOUTRECTYPEパラメータをSTRINGに設定します。 Oracle TuxedoのVIEW型の出力レコードを、それに相当するOracle TuxedoのVIEW型の出力バッファにマップできます。この場合は、リモート・サービスから戻されるデータ構造が、ローカルのクライアント・プログラム側で前提にしているデータ構造と一致します。新しくVIEW定義を作成する必要はありません。かわりに、OUTBUFTYPEパラメータを使用して、VIEWバッファ・タイプと既存のVIEW定義の名前を指定します。OUTRECTYPEパラメータをVIEW:viewnameに設定してもかまいませんが、必須ではありません。 Oracle TuxedoのVIEW型の出力レコードを、任意に組み合せたVIEW型の出力バッファにマップできます。しかし、この場合は、リモート・サービスから戻されるデータ構造(図3-4のVIEW 'B')と、クライアント・プログラム側で前提にしているデータ構造(図3-4のVIEW 'A')は異なります。変換処理を円滑に行うために、次の操作を行います。
2.
3. OUTBUFTYPEパラメータで指定されている既存ビュー(図のVIEW ‘A')の出力バッファ・タイプと名前を指定します。 Oracle TuxedoのVIEW型の出力レコードをFML型の出力バッファにマップできます。変換処理が円滑に行われるように、次の操作を行う必要があります。
2. VIEW定義は、リモート・システムとの間で送受信する入出力レコードの記述に使用します。これは、データ要素を記述し、データ要素の型と並びがどのようになっているかを示します。これらの記述に基づいて、TMA TCP Gatewayは必要に応じて、フィールドのデータ型を変換して、異なるタイプのシステム間の透過性を維持します。TMA TCP Gatewayのバッファ変換とレコード変換の特性は、性能と柔軟性が非常に高いことです。このような特性を最大限活かすには、Oracle TuxedoのVIEW定義の仕組みを十分に理解することが重要です。VIEW定義を使用すると、複合的なデータ構造の指定が可能になるため、次のようなケースのデータのやり取りに応用が利きます。処理の対象にするリモートのアプリケーション・プログラムの入出力レコードのレイアウトが決まったら、VIEW定義を用意し、その定義を構成ファイルに指定する必要があります。
注意: TMA TCP Gatewayが変換するVIEWには、必ずFMLフィールドを指定するようにしてください。つまり、INRECTYPE、OUTRECTYPE、INBUFTYPEまたはOUTBUFTYPEとして指定したVIEWの定義には、常に適切なFMLフィールド(VIEW定義のFNAME列にダッシュ記号なし)を指定する必要があります。FMLフィールド同士が一致する場合は、これらのVIEWを-nオプションの指定なしでコンパイルする必要があります。
1. 標準的なOracle TuxedoのVIEW定義をファイル内に作成します。
3. 必要に応じて、Oracle TuxedoのENVFILEを使用して、VIEWFILES、VIEWDIR、FIELDTBLSおよびFLDTBLDIR環境変数を設定します(TMA TCP Gatewayサーバーが実行時にバイナリのVIEWファイルとフィールド表ファイルを検出できるようになります)。
4. これらの手順が完了すると、GWICONFIGファイルやDMCONFIGファイルにVIEW定義を指定できます(必要に応じて、INRECTYPE、OUTRECTYPE、INBUFTYPEおよびOUTBUFTYPEパラメータにVIEW定義の名前を関連付けることで指定が可能)。次の項で説明するルールに従って、入出力データは必要に応じてTMA TCP Gatewayによって自動的に変換されます。VIEW定義を作成する前に、情報をよく読んでから(バッファの変換処理を円滑に実行できるように)、TMA TCP Gatewayを構成します。TMA TCP Gatewayがどのようにデータを変換するかの基本的なルールは次の項で説明しています。TMA TCP Gatewayが文字列データや数値データをどのように扱うかの詳細は、「文字列の長さの計算におけるNULL文字の扱い(Cプログラム)」の項を参照してください。
• CARRAYフィールドは、そのままのバイトの並びで変換されずに渡されます。
• STRINGおよびCHARフィールドは、必要に応じてSBCS (ASCIIからEBCDICに)変換またはMBCS変換されます。
•
•
警告: dec_tをVIEW変換の対象にすることはできません。
注意:
表3-1 データ変換の関係 C言語アプリケーションによって使用される入出力バッファのVIEW定義を作成する場合は、文字列フィールドで使用されるNULL終端文字の分までを余分に指定する必要があります。COBOL言語アプリケーションによって使用される入出力バッファのVIEW定義を作成する場合は、文字列フィールドで使用されるNULL終端文字を含む余分な部分まで指定しないでください。
注意: TMA TCP Gateway製品は、ASCIIとEBCDICとの間を相互に変換する標準的な文字変換機能を備えています。STRINGデータ型の場合、TMA TCP Gateway製品は自動的にこの変換を実行します。たとえば、数値と文字列との間でも変換が可能です。たとえば、FMLバッファをdec_t型に直接変換することはできませんが、10進数値をSTRINGフィールドに格納し、そのフィールドをVIEW定義のdec_tフィールドにマップすることができます。COBOLデータ型を使用するTuxedoクライアント用に、ConvMVSCというエンコーディング用ライブラリも用意されています。このライブラリ(ConvMVSC)は、デフォルトのライブラリであるConvMVSと基本的に同じですが、次の点に違いがあります。
• リモート・ゲートウェイから受信する文字列の場合、ConvMVSライブラリはEBCDICからASCIIへの変換を実行し、末尾に空白文字があれば切り詰め、NULL終端文字を付加します。ConvMVSCライブラリは変換を実行しますが、空白文字の切り詰めも終端文字の追加も行いません。
• リモート・ゲートウェイに送信するビューのSTRINGフィールドの場合、ConvMVSはASCIIからEBCDICへの変換を行い、フィールドのサイズまで空白文字列で埋まるように空白文字を付加します。ConvMVSCは文字を変換しますが、埋込みはしません。
• リモート・ゲートウェイから受信するビューのSTRINGフィールドの場合、ConvMVSはEBCDICからASCIIへの変換を行い、末尾に空白文字があれば切り詰め、NULL終端文字を付加します。ConvMVSCライブラリは文字変換を行いますが、空白文字の切り詰めも終端文字の付加も行いません。ゲートウェイの全サービスを対象にCOBOLデータのエンコーディングを有効にするには、GWICONFIGファイルのGLOBALセクションにパラメータDFLTTYPE="MVSC"を設定します。リスト3-1 すべてのサービスを対象にしたエンコーディング特定ホストとの間でやり取りするメッセージを対象にCOBOLデータのエンコーディングを有効にするには、GWICONFIGファイルのFOREIGNエントリに、そのホスト用のパラメータTYPE="MVSC"を設定します。1バイト文字セット(SBCS)をASCIIとEBCDICとの間で変換できるように、TMA TCPソフトウェアには変換表が付属しています。これらの表は、IBM社が規定しているコード・セットに準拠しており、デフォルトのTuxedoコード・ページ(以前のリリースのTMA TCPで使用されていたデフォルトのコード・ページ変換表)を含んでいます。図3-5 TMA TCPのコード・ページ変換アプリケーション用の変換表を指定するには、リモート・ドメインごとにDMCONFIGファイルの定義を作成します。DMCONFIGファイルのDM_REMOTE_DOMAINSセクションでCODEPAGEパラメータを使用します。使用する変換表を指定します。リモート・ホストが使用するデフォルトのコード・ページ変換を指定するには、DMCONFIGファイルのDM_LOCAL_DOMAINSセクションにあるローカル・ゲートウェイ・エントリ用のCODEPAGEパラメータに変換表のファイル名を指定します。
表3-2 TMA TCPのコード・ページ変換表 アプリケーションに必要とされる変換に合わせて、どの表を変更してもかまいませんが、Tuxedoのデフォルトの表はハードコード化されているため変更できません。変換表の定義になんらかの変更を加えたら、ゲートウェイを再起動する必要があります。TMA TCPの変換表は、$TUXDIR/udataobj/codepageにあります。表の内容は、「コード・ページ変換表」の項を参照してください。リモート・ドメイン用のCODEPAGEの指定がない場合、TMA TCP GatewayソフトウェアはTuxedoのデフォルトの変換表を使用します。
注意: 製品ソフトウェアにはTuxedoのデフォルトの変換表のコピー版が付属しており、$TUXDIR/udataobj/codepageの中に入っています。アプリケーションの要件に応じて、これらのコピーを変更できるようになっています。これらのコピーは、ゲートウェイによって使用される実際のデフォルトの表ではありません。Tuxedoのデフォルトの表はハードコード化されているため、変更できません。エラー・メッセージの説明は、「エラー・メッセージと情報メッセージ」の項を参照してください。ゲートウェイが前述のエラーを発行した場合は、次の原因が考えられます。、DMCONFIGファイルのDM_REMOTE_DOMAINセクションのCODEPAGEパラメータに正しいコード・ページ名を指定していること、そのファイルが$TUXDIR/udataobj/codepageに存在していることを確認します。次のリストに、1つのローカル・ドメイン(CIXA)を定義するエントリと、2つのリモート・ドメイン(CISAとIMSA)を定義するエントリを示します。次の例は、ローカル・ドメインがASCIIコード・ページCP-00819を使用し、2つのリモート・ドメインがドイツ語版EBCDICコード・ページCP-00273とフランス語版EBCDICコード・ページCP-00297を使用する場合の例です。リスト3-3 コード・ページ定義の例SBCS文字セットの変換に加えて、TCP GWIDOMAINでは、アジア圏の顧客の要件を満たすためにマルチバイト文字セット(MBCS)変換がサポートされています。この変換は、ディレクトリ$TUXDIR/udataobj/codepageにある変換表に依存せず、かわりにICUライブラリを利用します。これは、200種類以上のSBCSおよびMBCS文字セットを含むライブラリです。ASCII_CHAR_SETがローカル・ドメイン用で、EBCDIC_CHAR_SETがリモート・ドメイン用です。コロン(:)で区切ります。ASCII_CHAR_SETとEBCDIC_CHAR_SETのどちらも、ICUとして知られる、使用可能の文字セットである必要があります。uconvというユーティリティを使用すると、これらの文字セットに関連する情報を取得できます。たとえば、 MBCSをリモート・ドメインに変換する場合は、CODEPAGE="utf-8:ibm-1388"と定義します。したがって、発信呼出しの場合、GWIDOMAINはクライアントの入力をUTF-8からibm-1388に変換し、逆に着信呼び出しはibm-1388からUTF-8に変換されます。リスト3-4 MBCS変換のDMCONFIG定義の例