システム間の透過性を高いレベルに維持する上で、Tuxedo Mainframe Adapter for TCP Gateway(以後TMA TCP Gatewayと呼ぶ)の構成が重要になります。データ・フォーマットなどの環境の違いは、このメカニズムによってプログラマやプログラムからは遮蔽されます。
このドキュメントでは、VIEW
定義の作成についても説明します。VIEW
定義は、Oracle Tuxedo環境の入出力に使用されるデータ構造を記述したものです。TMA TCP Gateway製品はVIEW
定義に基づいて、ターゲット・システムで受付け可能なフォーマットに入出力データを変換する方法を判断します。
TMA TCP Gatewayの構成ファイル(GWICONFIG
とDMCONFIG
)の更新に関する詳細は、「Oracle TMA TCP Gatewayの構成」の項を参照してください。
注意: | データ・マッピングを構成する手順は、Oracle Tuxedoのプログラミング環境に対する知識が必要になるという点で、プログラミングという行為と考えて差し支えありません。しかし、構成パラメータの影響を受けるアプリケーション・プログラムは多数に及ぶため、通常は管理者が構成を担当します。 |
この項では、TMA TCP Gatewayが入出力データの処理や変換を行う際に従う手順について説明します。
このガイドでは、入出力データを説明する上で次の用語を使用しています。
これらの用語を知っておけば、TMA TCP Gatewayがどのように入出力データを扱うのかを理解しやすくなります。
TMA TCP Gatewayはローカル・プログラムからのバッファを次のように処理します。
TMA TCP Gateway製品は、ローカルのクライアント・プログラムからリモート・サービスに送信される入力バッファのタイプを自動的に判定します。
TMA TCP Gateway製品は、ローカル・サービスからリモートのクライアント・プログラムに戻される出力バッファのタイプを自動的に判定します。
GWICONFIG
)を参照して、そのバッファを別のフォーマットに変換する必要があるかどうかを確認します。リモート・サービスに送信されたクライアント・リクエストは、これらのサービスで意味のあるレコード形式に変換する必要があります。
リモート・クライアント・プログラムに戻されたサーバー・レスポンスは、これらのプログラムで意味のあるレコード形式に変換する必要があります。
TMA TCP Gatewayはリモート・プログラムのバッファを次のように処理します。
GWICONFIG
)の定義を参照してレコードのタイプを判断します。 DMCONFIG
)の定義を参照して、そのレコードを別のフォーマットに変換する必要があるかどうかを確認します。リモート・クライアント・プログラムからのクライアント・リクエストは、ローカル・サービス・ルーチンで受入れ可能なバッファ形式に変換する必要があります。
リモート・サービスから戻されたサーバー・レスポンスは、ローカル・クライアント・プログラムで受入れ可能なバッファ形式に変換する必要があります。
TMA TCP Gateway製品には、バッファとレコードのマップに使用できる構成パラメータが用意されています。バッファとレコードの詳細は、「バッファおよびレコード」の項を参照してください。
ドメイン構成ファイル(DMCONFIG
)に次のバッファ構成パラメータを指定します。
INBUFTYPE
OUTBUFTYPE
ゲートウェイ構成ファイル(GWICONFIG
)に次のレコード構成パラメータを指定します。
INRECTYPE
OUTRECTYPE
これらの4つのパラメータには、それぞれ想定される意味合い(解釈)が2つあり、1つはサービス・リクエストがローカルから発行されるときの意味合いであり、もう1つはリモート・システムから発行されるときの意味合いです。
これからの項で説明する「ローカルからの呼出しの場合のパラメータ」と「リモートからの呼出しの場合のパラメータ」で、これらの意味合いのそれぞれについて詳細に説明します。
この項では、TMA TCP Gatewayがどのようにローカル(こちら側のOracle Tuxedoリージョンの中)からのサービス呼出しを処理しているのかについて詳しく説明します。また、ローカルのクライアント・プログラムとリモート・サービスの間でやり取りされるバッファやレコードの変換を管理するために、どのようにINBUFTYPE
、INRECTYPE
、OUTRECTYPE
およびOUTBUFTYPE
の各パラメータを使用するのかについても説明します。
次の図は、ローカルのOracle Tuxedoクライアント・プログラムから発行されたサービス呼出しが、ローカルのTMA TCP GatewayからTMA TCP Gatewayを経由してリモート・サーバーに届くまでを示しています。
このような状況では、図に示す4つのパラメータは次のような意味を持ちます。
次の項では、ローカルによるサービス呼出し(ローカル・クライアント・プログラムからのリモート・サービスの呼出し)におけるINBUFTYPE
およびINRECTYPE
パラメータの使用方法について詳しく説明します。
INBUFTYPE
INBUFTYPE
パラメータの用途は、ローカルのクライアント・プログラムがサービス・リクエストを発行するときに、ローカルのTMA TCP Gatewayに渡されるリクエストがどのバッファ・タイプなのかを指定することです。
INRECTYPE
INRECTYPE
パラメータは、特定のリモート・サービスから要求されるリクエスト・レコードのタイプ(さらに場合によってはフォーマット)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、リモート・サービスによる処理が可能なレコードにOracle Tuxedoのリクエスト・バッファを変換します。
INRECTYPE
パラメータを指定する必要があります。
INRECTYPE
パラメータは省略してもかまいません。
次の項では、ローカルによるサービス呼出し(ローカル・クライアント・プログラムからのリモート・サービスの呼出しおよびサービスからの出力の受信)におけるOUTRECTYPE
およびOUTBUFTYPE
パラメータの使用方法について詳しく説明します。
OUTBUFTYPE
OUTBUFTYPE
パラメータは、ローカルのクライアント・プログラム側で前提にしている応答バッファのタイプ(さらに場合によっては構造)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、リモート・サービスからの応答レコードを適切なタイプの応答バッファにマップします。
OUTRECTYPE
OUTRECTYPE
パラメータを指定する必要があります。
OUTRECTYPE
パラメータは省略してもかまいません。
この項では、TMA TCP Gatewayがどのようにリモート・コンピュータ(ローカルのOracle Tuxedoリージョンの外側)からのサービス呼出しを処理しているのかについて詳しく説明します。また、リモートのクライアント・プログラムとローカル・サービスの間でやり取りされるバッファやレコードの変換を管理するために、どのようにINRECTYPE
、INBUFTYPE
、OUTBUFTYPE
およびOUTRECTYPE
の各パラメータを使用するのかについても説明します。
次の図では、リモートのクライアント・プログラムがサービス・リクエストを発行し、そのリクエストはリモートのTMA TCP GatewayからローカルのTMA TCP Gatewayに送信されます。ゲートウェイはネットワークからリクエストを受信すると、ローカルのOracle Tuxedoサーバーにそのリクエストを渡します。
このような状況では、図に示す4つのパラメータは次のような意味を持ちます。
これより、リモート・システム(リモートのクライアント・プログラムからのローカル・サービス呼出しを行うシステム)からサービスを呼び出す際に、INRECTYPE
パラメータとINBUFTYPE
パラメータをどのように使用するのかについて詳しく説明します。
INBUFTYPE
INBUFTYPE
パラメータは、TMA TCP Gatewayがローカル・サーバーから受け取るときの前提にしている、応答バッファのタイプ(さらに場合によっては構造)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、ローカル・サーバーのプログラムからの応答バッファを適切なタイプの応答レコードにマップします。
INRECTYPE
INRECTYPE
パラメータを指定する必要があります。
INRECTYPE
パラメータは省略してもかまいません。
これより、リモート・コンピュータ(リモートのクライアント・プログラムからのローカル・サービス呼出しと、そのサービスからの出力の受取りを行うコンピュータ)からサービスを呼び出す際に、OUTRECTYPE
パラメータとOUTBUFTYPE
パラメータをどのように使用するのかについて詳しく説明します。
OUTBUFTYPE
OUTRECTYPE
OUTRECTYPE
パラメータは、特定のリモートのクライアント・プログラムからTMA TCP Gatewayに送信されるリクエスト・レコードのタイプ(さらに場合によってはフォーマット)の指定に使用します。TMA TCP Gatewayは、この情報を使用して、ローカル・サーバーのプログラムによる処理が可能なバッファに、リモート・クライアントからのリクエスト・レコードを変換します。
OUTRECTYPE
パラメータを指定する必要があります。
OUTRECTYPE
パラメータは省略してもかまいません。
バッファをレコードにマップするパターンとして想定し得るものをすべて表すと、次の図のようになります。TMA TCP Gatewayの役割は、TMA TCP Gateway構成の中で確認した情報に基づいて、バッファをレコードにマップすることです。このマッピングの対象になるものは、TuxedoクライアントのリクエストとTuxedoサーバーのレスポンスです。
前述の図に示した想定し得るマッピングのパターンの一部と、INBUFTYPE
パラメータとINRECTYPE
パラメータの設定に関する説明を次の表にまとめています。
レコードをバッファにマップするパターンとして想定し得るものをすべて表すと、次の図のようになります。TMA TCP Gatewayの役割は、TMA TCP Gateway構成の中で確認した情報に基づいて、レコードをバッファにマップすることです。このマッピングの対象になるものは、リモートのクライアント・リクエストとリモートのサーバー・レスポンスです。
前述の図に示した想定し得るマッピングのパターンの一部と、OUTRECTYPE
パラメータとOUTBUFTYPE
パラメータ(ローカルからのサービス呼出しに使用するパラメータ)の設定に関する説明を次の表にまとめています。
|
VIEW
定義は、リモート・システムとの間で送受信する入出力レコードの記述に使用します。これは、データ要素を記述し、データ要素の型と並びがどのようになっているかを示します。これらの記述に基づいて、TMA TCP Gatewayは必要に応じて、フィールドのデータ型を変換して、異なるタイプのシステム間の透過性を維持します。
TMA TCP Gatewayを構成する前に、VIEW
定義を作成する必要があります。VIEW
定義と関連項目の詳細は、Oracle Tuxedoプログラマーズ・ガイドを参照してください。
TMA TCP Gatewayのバッファ変換とレコード変換の特性は、性能と柔軟性が非常に高いことです。このような特性を最大限活かす上で、Oracle TuxedoのVIEW
定義の仕組みを十分に理解することが重要です。
VIEW
定義を使用すると、複合的なデータ構造の指定が可能になるため、次のようなケースのデータのやり取りに応用が利きます。
処理の対象にするリモートのアプリケーション・プログラムの入出力レコードのレイアウトが決まったら、VIEW
定義を用意し、その定義を構成ファイルに指定する必要があります。
注意: | TMA TCP Gatewayが変換するVIEW には、必ずFMLフィールドを指定するようにしてください。つまり、INRECTYPE 、OUTRECTYPE 、INBUFTYPE またはOUTBUFTYPE として指定したVIEW の定義には、常に適切なFMLフィールド(VIEW 定義のFNAME 列にダッシュ記号なし)を指定する必要があります。FMLフィールド同士が一致する場合は、これらのVIEW を-n オプションの指定なしでコンパイルする必要があります。 |
VIEW
定義をファイル内に作成します。viewc
またはviewc32
VIEW
コンパイラを実行します。ENVFILE
を使用して、VIEWFILES
、VIEWDIR
、FIELDTBLS
およびFLDTBLDIR
環境変数を設定します(TMA TCP Gatewayサーバーが実行時にバイナリのVIEW
ファイルとフィールド表ファイルを検出できるようになります)。GWICONFIG
ファイルやDMCONFIG
ファイルにVIEW
定義を指定できます(必要に応じて、INRECTYPE
、OUTRECTYPE
、INBUFTYPE
およびOUTBUFTYPE
パラメータにVIEW
定義の名前を関連付けることで指定が可能)。TMA TCP Gatewayの構成の詳細は、「Oracle TMA TCP Gatewayの構成」の項を参照してください。
ローカルのクライアント・プログラムが別タイプのコンピュータのサービス・ルーチンとの間でデータを送受信するときに、データは必要に応じてTMA TCP Gatewayによって自動的に変換されます。変換の処理内容は、ワード長やバイト・オーダーのような属性を変更することで、そのデータ型本来の表現をそのまま移し替えることです。
次の項で説明するルールに従って、入出力データは必要に応じてTMA TCP Gatewayによって自動的に変換されます。VIEW
定義を作成する前に、情報をよく読んでから(バッファの変換処理を円滑に実行できるように)、TMA TCP Gatewayを構成します。
TMA TCP Gatewayがどのようにデータを変換するかの基本的なルールは次の項で説明しています。TMA TCP Gatewayが文字列データや数値データをどのように扱うかの詳細は、「文字列の長さの計算におけるNULL文字の扱い(Cプログラム)」の項を参照してください。
TMA TCP Gatewayが従うデータ変換のルールをまとめると次のようになります。
警告: | dec_t をVIEW 変換の対象にすることはできません。 |
注意: | Oracle Tuxedoには、VIEW 内に、10進数値をサポートするdec_t という名前のフィールド・タイプがあります。TMA TCP Gatewayは、これらのフィールドをマシンに依存しない表現形態であるパック10進数に変換します。たとえば、dec_t(m,n) とすると、S9(2*m-(n+1))V9(n) COMP-3 という結果になります。したがって、8,5というサイズの10進数のフィールドはS9(10)V9(5) COMP-3 になります。 |
C言語アプリケーションによって使用される入出力バッファのVIEW
定義を作成する場合は、文字列フィールドで使用されるNULL終端文字の分までを余分に指定する必要があります。
たとえば、ローカルのアプリケーション・プログラム側では出力バッファ内の文字列が10バイトであることを前提にしている場合は、文字列の長さである10にNULL終端文字分の1を足した11を、そのフィールドの長さとして指定します。
COBOL言語アプリケーションによって使用される入出力バッファのVIEW
定義を作成する場合は、文字列フィールドで使用されるNULL終端文字を含む余分な部分まで指定しないでください。
たとえば、リモートのCOBOLアプリケーション・プログラム側では入力レコードが10文字であることを前提にしている場合は、そのフィールドの長さとして10+1(NULL終端文字も含む長さ)ではなく、10と指定してください。
注意: | TMA TCP Gatewayの環境では文字列にNULL終端文字は不要ですが、NULL終端文字があれば文字列の終了と見なされます。したがって、TMA TCP Gatewayは、文字列内にNULL(ゼロ)文字を検出すると、その以降の文字を処理しません。NULL値が埋め込まれた8ビットのデータ全体を渡すには、CARRAY タイプのフィールドまたはバッファを使用します。 |
TMA TCP Gateway製品は、ASCIIとEBCDICとの間を相互に変換する標準的な文字変換機能を備えています。STRING
データ型の場合、TMA TCP Gateway製品は自動的にこの変換を実行します。
中間データの型と変換先の型で表現可能な範囲な中に、表現する必要がある最大値が収まるのであれば、数値データを別のデータ型に簡単に変換できます。
たとえば、数値と文字列との間でも変換が可能です。たとえば、FMLバッファをdec_t型
に直接変換することはできませんが、10進数値をSTRING
フィールドに格納し、そのフィールドをVIEW
定義のdec_t
フィールドにマップすることができます。
COBOLデータ型を使用するTuxedoクライアント用に、ConvMVSC
というエンコーディング用ライブラリも用意されています。このライブラリ(ConvMVSC
)は、デフォルトのライブラリであるConvMVS
と基本的に同じですが、次の点に違いがあります。
COBOLデータのエンコーディング用ライブラリを有効にする方法は2つあります。
ゲートウェイの全サービスを対象にCOBOLデータのエンコーディングを有効にするには、GWICONFIG
ファイルのGLOBAL
セクションにパラメータDFLTTYPE="MVSC"
を設定します。
*GLOBAL
DFLTTYPE=”MVSC”
特定ホストとの間でやり取りするメッセージを対象にCOBOLデータのエンコーディングを有効にするには、GWICONFIG
ファイルのFOREIGN
エントリに、そのホスト用のパラメータTYPE="MVSC"
を設定します。
*FOREIGN
HOST_NAME
TYPE=”MVSC”
1バイト文字セット(SBCS
)をASCIIとEBCDICとの間で変換できるように、TMA TCPソフトウェアには変換表が付属しています。これらの表は、IBM社が規定しているコード・セットに準拠しており、デフォルトのTuxedoコード・ページ(以前のリリースのTMA TCPで使用されていたデフォルトのコード・ページ変換表)を含んでいます。
それぞれの変換表は、発信時の変換(Tuxedoからメインフレームへの変換)の表と、着信時の変換(メインフレームからTuxedoへの変換)の表という、2つのマッピング表から構成されます。変換元と変換先が何かを指定する必要はありませんが、ホスト・アプリケーションがどの国の言語で記述されているかを確認しておく必要があります。次の図にコード・ページ変換を示します。
図は、Latin-1版のASCIIコード・ページCP-00819文字セットを使用しているTuxedoアプリケーションと、ドイツ語版のEBCDICコード・ページCP-00273を使用しているホスト・アプリケーションとの間の処理がどのようになるかを示しています。TMA TCPの変換表00819x00273が、着信時にも発信時にも変換に使用されます。
アプリケーション用の変換表を指定するには、リモート・ドメインごとにDMCONFIG
ファイルの定義を作成します。DMCONFIG
ファイルのDM_REMOTE_DOMAINS
セクションでCODEPAGE
パラメータを使用します。使用する変換表を指定します。
リモート・ホストが使用するデフォルトのコード・ページ変換を指定するには、DMCONFIG
ファイルのDM_LOCAL_DOMAINS
セクションにあるローカル・ゲートウェイ・エントリ用のCODEPAGE
パラメータに変換表のファイル名を指定します。
次の表に、TMA TCPソフトウェアに付属の変換表を示します。
注意: | TuxedoのデフォルトのASCIIとEBCDICのコード・ページはCP-00819とCP-00037とは若干違っています。 |
TMA TCP Gatewayは、起動時にリモート・ドメインごとの変換表をロードします。
アプリケーションに必要とされる変換に合わせて、どの表を変更してもかまいませんが、Tuxedoのデフォルトの表はハードコード化されているため変更できません。変換表の定義になんらかの変更を加えたら、ゲートウェイを再起動する必要があります。TMA TCPの変換表は、$TUXDIR/udataobj/codepage
という場所にあります。表の内容は、「コード・ページ変換表」の項を参照してください。
リモート・ドメイン用のCODEPAGE
の指定がない場合、TMA TCP GatewayソフトウェアはTuxedoのデフォルトの変換表を使用します。
注意: | 製品ソフトウェアにはTuxedoのデフォルトの変換表のコピー版が付属しており、$TUXDIR/udataobj/codepage の中に入っています。アプリケーションの要件に応じて、これらのコピーを変更できるようになっています。これらのコピーは、ゲートウェイによって使用される実際のデフォルトの表ではありません。Tuxedoのデフォルトの表はハードコード化されているため、変更できません。 |
これより、ゲートウェイのエラーの原因となる、変換表関連のエラーを解決する方法について説明します。指定の変換表に関連するエラーが発生したときに、ゲートウェイは次のメッセージを発行します。
1072:ERROR Cannot read CODEPAGE <filename
> for <LOCAL | REMOTE> DOMAIN <domainname
>
エラー・メッセージの説明は、「エラー・メッセージと情報メッセージ」の項を参照してください。ゲートウェイが前述のエラーを発行した場合は、次の原因が考えられます。
、DMCONFIG
ファイルのDM_REMOTE_DOMAIN
セクションのCODEPAGE
パラメータに正しいコード・ページ名を指定していること、そのファイルが$TUXDIR/udataobj/codepage
に存在していることを確認します。
CODEPAGE
パラメータに指定したファイル名が正しいことを確認します。また、指定したファイルが破損していないことも確認します。
$TUXDIR/udataobj/codepage
ディレクトリの中にある指定の変換表ファイルに対する読取り権限があることを確認します。
次のコード・リストに、1つのローカル・ドメイン(CIXA
)を定義するエントリと、2つのリモート・ドメイン(CISA
とIMSA
)を定義するエントリを示します。次の例は、ローカル・ドメインがASCIIコード・ページCP-00819を使用し、2つのリモート・ドメインがドイツ語版EBCDICコード・ページCP-00273とフランス語版EBCDICコード・ページCP-00297を使用する場合の例です。
# DMCONFIG
*DM_LOCAL_DOMAINS
CIXA
TYPE=IDOMAIN
*DM_REMOTE_DOMAINS
CISA
TYPE=IDOMAIN
CODEPAGE=00819X00273
IMSA
TYPE=IDOMAIN
CODEPAGE=“00819X00297”