プラットフォーム、オペレーティング・システムおよびプログラミング言語の違いにより、ATMIドメインのアプリケーションで使用されるデータ形式はリモート・ドメインのアプリケーションに必要とされるデータ形式と大幅に異なります。ATMIドメインのアプリケーションは通常C言語でVIEWおよびFMLなどのCの構造体およびATMIの型付きバッファを使用して作成されます。リモート・ドメインでは、一般にCおよびCOBOLプログラミング言語が、Cの構造体およびCOBOL copybook定義を使用して使用されます。Oracle Tuxedo Mainframe Adapter for SNA Gatewayでは、インバウンド・メッセージとアウトバウンド・メッセージの両方に関するこれらのデータ型間の変換が行われます。このゲートウェイには、ドメイン・タイプ間のデータ変換を処理する複数の構成オプションが用意されています。
この項では、データ変換に関する次のトピックについて説明します。
注意: | ATMIファイル、機能およびドキュメントに関する記述はすべて、Tuxedoファイル、機能およびドキュメントに適用されます。 |
Oracle Tuxedo Mainframe Adapter for SNA Gatewayは他のドメイン・ゲートウェイと同様にATMI型付きバッファを使用してデータを送受信します。リモート・ホストのアプリケーションは型付きバッファを認識しないため、ATMIアプリケーションはレコードと呼ばれる集計データ型を使用してホスト・アプリケーションと通信する必要があります。レコードは、フラットなデータ領域であり、レコード内の各フィールドのデータ型および長さを記述したテンプレートによって定義されます。
アプリケーション開発者はゲートウェイを構成する前に、リモート・ホストで使用されるレコード構造の形式および内容とともに、使用するATMI型付きバッファを決定しておく必要があります。
通常、ATMI型付きバッファとレコード形式間の変換はOracle Tuxedo Mainframe Adapter for SNA Gatewayによって処理されます。DMCONFIG
ファイルのDM_LOCAL_SERVICES
およびDM_REMOTE_SERVICES
セクションのサービス定義で、アプリケーション間通信を成功させるために必要な型付きバッファとレコードの組合せを記述するパラメータを指定します。
注意: | リモート・ホスト・メッセージのサイズは現行では約32Kバイトに制限されています。32756バイトを超えるレコードを生成する変換はサポートされていません。 |
ATMIアプリケーションが型付きバッファをリモート・ホスト・アプリケーションに送信した場合、このバッファはリモート・ホスト・アプリケーションに渡される前にOracle Tuxedo Mainframe Adapter for SNA Gatewayによってレコードに変換されます。このゲートウェイでは、変換が必要な場合、サービス定義を使用してどのような変換をバッファに適用するかを決定します。サービス定義では、DMCONFIG
ファイルのDM_LOCAL_SERVICES
およびDM_REMOTE_SERVICES
セクションの各INBUFTYPE
を使用して、必要な変換を記述しています。
INBUFTYPE = type:subtype
このパラメータ定義において、type
は、次の項に説明されている指定のATMI型付きバッファのいずれかである必要があります。
subtype
の値はビューを指定するもので、特定のATMI型付きバッファでは必須です。
INBUFTYPE
パラメータには1つのtype:subtype
のみ入力可能です。
次の項では、各ATMI型付きバッファに対して実行される変換について説明します。
デフォルトでは、nullで終了する文字列はEBCDIC
に変換されます。null文字も変換後のレコードに含まれます。ViewおよびFMLデータ型の文字列の使用方法は、「文字列の変換ルール」の項を参照してください。
XML型付きバッファは、バッファ長の分だけEBCDICに変換されます。
これらの型付きバッファにはデータ変換は実行されません。ATMIアプリケーションまたはリモート・ホスト・アプリケーションは、すべての数値およびEBCDICの変換を含む、レコード内のデータ・フィールドのあらゆる変換を実行します。
これらの型付きバッファが使用されるのは、他のstrong型付きバッファのいずれを使用してもデータ・レコードを記述または変換できない場合です。strongは、Oracle Tuxedo Mainframe Adapter for SNA Gatewayがあらゆるデータ・フィールドを認識して必要なデータ変換を実行できることを意味しています。
これらの型付きバッファが使用される他の場合として、リモート・サービスで様々なスタイルのデータ集計(複数のレコード・タイプ)が必要とされる場合があります(INBUFTYPE
パラメータが1つのtype:subtype
に制限されているため)。
これらの型付きバッファではサブタイプが必要です。サブタイプはリモート・ホスト・レコードを記述するビューの名前です。ATMIバッファは、コンパイル済VIEWファイルを使用してC構造体からEBCDICでのレコードに変換されます。デフォルトでは、レコードはCOBOL構造体で、COBOL copybookを使用してリモート・ホスト・アプリケーションによってマップされます。その他の変換オプションについては、「VIEWデータ型の変換ルール」を参照してください。
これらの型付きバッファではサブタイプが必要です。サブタイプはリモート・ホスト・レコードを記述するビューの名前です。型付きバッファのデータはフィールド操作言語(FML)のデータです。バッファは、Oracle Tuxedo Mainframe Adapter for SNA Gatewayにより、ビューで記述されたレコードにEBCDICとして変換されます。
ATMIバッファはサブタイプのコンパイル済VIEWファイルを使用してFML型付きバッファからC構造体に変換されます。次に、C構造体は、同じサブタイプのコンパイル済VIEWファイルを使用してレコードに変換されます。デフォルトでは、レコードはCOBOL構造体で、COBOL copybookを使用してリモート・ホスト・アプリケーションによってマップされます。
リモート・アプリケーションがレコードをATMIアプリケーションに送信した場合、このレコードはATMIアプリケーションに渡される前にOracle Tuxedo Mainframe Adapter for SNA GatewayによってATMI型付きバッファに変換されます。このゲートウェイでは、変換が必要な場合、サービス定義を使用してどのような変換をホスト・レコードに適用するかを決定します。サービス定義では、DMCONFIG
ファイルのDM_LOCAL_SERVICES
およびDM_REMOTE_SERVICES
セクションの各OUTBUFTYPE
を使用して、必要な変換を記述しています。
OUTBUFTYPE=type:subtype
このパラメータ定義において、type
は、次の項に説明されている指定のATMI型付きバッファのいずれかである必要があります。type
は型付きバッファの設定だけでなくホスト・レコードの記述にもなります。
subtype
の値はビューを指定するもので、特定のATMI型付きバッファでは必須です。
OUTBUFTYPE
パラメータには1つのtype:subtype
のみ入力可能です。
次の項では、各ATMI型付きバッファに対して実行される変換について説明します。
nullで終了する文字列はASCIIに変換されます。変換された文字列はATMIのSTRING型付きバッファに移動されます。ViewおよびFMLデータ型の文字列の使用方法は、「文字列の変換ルール」の項を参照してください。
XML型付きバッファは、バッファ長の分だけASCIIに変換されます。DPLサービスについては、「DPLサービスのデータ変換」を参照してください。
これらの型付きバッファにはデータ変換は実行されません。リモート・ホスト・アプリケーションまたはATMIアプリケーションは、すべての数値およびASCIIの変換を含む、レコード内のデータ・フィールドの変換を実行します。
これらの型付きバッファが使用されるのは、他のstrong型バッファのいずれを使用してもデータ・レコードを記述または変換できない場合です。strongは、Oracle Tuxedo Mainframe Adapter for SNAがあらゆるデータ・フィールドを認識して必要なデータ変換を実行できることを意味しています。
これらの型付きバッファが使用される他の場合として、リモート・サービスで様々なスタイルのデータ集計(複数のレコード・タイプ)が必要とされる場合があります(OUTBUFTYPE
パラメータが1つのtype:subtype
に制限されているため)。
これらの型付きバッファではサブタイプが必要です。サブタイプはリモート・ホスト・レコードを記述するビューの名前です。リモート・ホスト・レコードは、ATMI型付きバッファに変換されます。ホスト・レコードのデータおよびASCII変換の実行にはコンパイル済VIEWファイルが使用されます。デフォルトでは、ホスト・レコードはCOBOLデータ集合体で、変換された型付きバッファはC構造体を使用してATMIアプリケーションによってマップされます。その他の変換オプションについては、「VIEWデータ型の変換ルール」の項を参照してください。
これらの型付きバッファではサブタイプが必要です。サブタイプはリモート・ホスト・レコードを記述するビューの名前です。ホスト・レコードはFMLバッファに変換されてATMIアプリケーションに渡されます。
デフォルトでは、ホスト・レコードはCOBOLのレコード集合体データ型です。データはコンパイル済VIEWファイルを使用してASCIIのC構造体に変換されます。次に、このデータはVIEWに関連付けられたフィールド定義を使用してFMLバッファに変換されます。
Oracle Tuxedo Mainframe Adapter for SNAシステムは、リモートCICSサービスを分散プログラム・リンク(DPL)プログラムとしてサポートします。DPLのサポートは、ATMIサービスをピアのCICS/ESAサービスであるものとみなして実行されます。
DPLプログラムでは、アプリケーションをすべての分散トランザクション処理(DTP)から保護します。DPLのアプリケーションはリクエスト/レスポンス・サービスであり、すべてのデータ通信がCOMMAREA
の受渡しによって実行されます。
EXEC CICS LINK
PROGRAM()
DATALENGTH()
LENGTH()
COMMAREA()
前の例で、リクエスト元がDATALENGTH
サイズのCOMMAREA
を送信し、受信側アプリケーションがLENGTH
のサイズのCOMMAREA
データ・コンテンツをバッファに受信します。DATALENGTH
のサイズはLENGTH
サイズより小さくてもかまいませんが、リクエスト元は元のCOMMAREA
バッファへの受信対象としてLENGTH
サイズのレスポンスを想定しています。
DPLプログラムとATMIサービスの違いは、受信側のATMIサービスが応答バッファをサイズ変更できるのに対してDPLプログラムでは指定したサイズの応答バッファが必要な点です。また、ATMIリクエスト元では、サイズ変更されたバッファを元の応答バッファとは異なるバッファに受信することも可能です。
Oracle Tuxedo Mainframe Adapter for SNAソフトウェアは、次の項に記載されている操作を実行して、両タイプのアプリケーションの要件にあうようスムーズに調整できます。
Oracle Tuxedo Mainframe Adapter for SNAソフトウェアでは、ATMIリクエスト側に対応するLENGTH
パラメータがないためにどのようなサイズのCOMMAREA
をリモートのDPLサービスで想定するかを決定する必要があります。
DPLリクエストのLENGTH
値を決定する際、INBUFTYPE
またはOUTBUFTYPE
パラメータの定義のうち、大きい方のサイズが使用されます(表5-1を参照)。
リモートのDPLアプリケーションでは、LENGTH
サイズのバッファを受け取り、LENGTH
サイズのバッファを戻します。
LENGTH
を決定できない場合、CICSアプリケーションで許可される最も大きな値が割り当てられます。
Oracle Tuxedo Mainframe Adapter for SNAソフトウェアはリクエスト元のCICS DPLからLENGTH
値とDATALENGTH
サイズのCOMMAREA
データを受け取ります。このソフトウェアはLENGTH
サイズのバッファを割り当て、COMMAREA
データをこのバッファに移動してから、変換を実行します。
デフォルトのデータ変換ルールに関する次の項では、次の作業を支援するヒントを提供します。
表5-2は、VIEWデータ変換ルールを示します。
ASCIIからEBCDICに変換されます(必要な場合。「文字列の変換ルール」を参照)。
|
|
注意: | ATMIプラットフォームには、VIEW内の10進値をサポートするdec_t というフィールド・タイプが用意されています。ゲートウェイはこれらのフィールドをマシン非依存のパック10進数表現に変換します。たとえば、dec_t(m,n) はS9(2*m-(n+1))V9(n) COMP-3 になります。したがって、サイズ8,5 の10進フィールドはS9(10)V9(5) COMP-3 になります。 |
表5-3は、CとIBM/370のデータ型間の変換ルールを示します。
CICS/ESAアプリケーションによって使用される入力および出力レコードのVIEW定義を作成する場合、文字列フィールドで使用される追加の終了null文字の位置を指定しないでください。たとえば、CICS/ESAアプリケーション・プログラムが入力レコードで10文字を想定している場合、そのフィールドには11でなく10を指定してください。
注意: | Oracle Tuxedo Mainframe Adapter for SNAソフトウェアでは、文字列をnullで終了する必要はありませんが、null終了は考慮されます。そのゲートウェイのソフトウェアでは、文字列内にnull(0(ゼロ))文字を検出すると、後続の文字をすべて処理しません。埋め込みのnull値を含む8ビット・データの全体を渡す場合は、CARRAYタイプのフィールドまたはバッファを使用してください。 |
Oracle Tuxedo Mainframe Adapter for SNAが実行する文字セット変換は、X/Open XPGポータビリティ・ガイドに従えば完全にローカライズ可能です。ASCIIおよびEBCDIC変換はメッセージ・ファイルからロードされます。詳細は、「文字列の変換ルール」の項を参照してください。
Oracle Tuxedo Mainframe Adapter for SNAソフトウェアのデフォルト動作は、大半の英語アプリケーションの要件を満たしています。ただし、変換のカスタマイズが必要な場合もあります。詳細は、「文字列の変換ルール」の項を参照してください。
中間のデータ型と変換先のデータ型に、必要な最大値を処理するための十分な範囲を指定すれば、数値データを様々なデータ型に簡単に変換できます。
たとえば、適切なdec_t type
VIEW要素を指定することで、リモート・ターゲット・システムで倍精度のフィールド操作言語(FML)フィールドをパック10進数フィールドに変換できます。
数値を文字列に変換することもできます。たとえば、FMLバッファでdec_t型
が直接サポートされない場合、10進値を文字列フィールドに入れてVIEW定義内のdec_t
フィールドにマップすることができます。
ATMIプラットフォームとホスト・アプリケーション間の相互作用を計画する場合、アプリケーションの作成に使用するプログラミング言語を考慮する必要があります。COBOL言語では、文字列はC言語および関連するATMIプラットフォームVIEWバッファとは異なる方法で表現されます。リスト5-1は、同じ2つの文字列(string1
とstring2
)をコーディングする3つの方法を示しています。
C Structure:
struct text
{
char rbufsize[5];
char testnum[2];
char sendnum;
char sysid[4];
char textfld[10];
char string1[10];
char string2[16];
};
VIEW text
#type cname fbname count flag size null
char rbufsize - 5 - - -
char testnum - 2 - - -
char sendnum - 1 - - -
char sysid - 4 - - -
char textfld - 10 - - -
string string1 - 1 - 10 -
string string2 - 1 - 16 -
END
COBOL Record
01 TEXT.
05 RBUFSIZE PIC X(5).
05 TEXTNUM PIC X(2).
05 SENDNUM PIC X.
05 SYSID PIC X(4).
05 STRING1 PIC X(9).
05 STRING2 PIC X(15).
リストにおいて、C構造体とVIEWバッファではstring1
とstring2
のサイズがそれぞれ10および16文字として表現されています。これに対して、COBOLレコードでは、これらのサイズはそれぞれ9および15文字です。ソース・コードでこの非互換性に対応しておかないと、CとCOBOLプログラム間でコードのミスアラインメントが発生する可能性があります。
この非互換性を回避するため、ゲートウェイではCとCOBOLアプリケーションの文字列データ間のマッピングを制御するソフトウェア・オプションを用意しています。このオプションを使用すると、2つの言語のnull終了特性および埋め込み特性の違いを自動的に補正することができます。
注意: | このオプションはATMIプラットフォームのVIEWバッファの文字列フィールドにのみ効果があります。このスイッチはSTRINGバッファには効果がありません。 |
文字列変換オプションを設定するには、UBBCONFIG
ファイルのゲートウェイ・サーバー(GWSNAX)定義を構成する際にCLOPT
パラメータを使用します。CLOPT
パラメータの-t
オプションを表5-4にリストされたいずれかの値に設定すると、ゲートウェイにより該当する文字列変換が実行されます。次の構文形式を使用します。
このパラメータでは、引数およびオプションは次のように定義されています。
CLOPT
--
は、サーバー内でシステムに認識される引数の終了とサブルーチンに渡される引数の開始をマークします。-t
オプションなどのアプリケーション固有の引数をサーバーに渡す場合に、このオプションは必須です。 -t
はCとCOBOL間での文字列変換を設定するOracle Tuxedo Mainframe Adapter for SNAオプションです。 {number}
は、ゲートウェイが実行する文字列変換のタイプを指定します(表5-4を参照)。
注意: | サーバー定義にCLOPT パラメータの-t オプションを設定しない場合は、デフォルトでゲートウェイは文字列変換を実行しません。 |
次のサーバー定義の例では、このスイッチを使用して、Cで作成されたATMIアプリケーションとCOBOLで作成されたホスト・アプリケーション間での文字列変換を設定しています。
*SERVERS
GWSNAX SRVGRP=GROUP1 SRVID=5 CLOPT=”-A -- -t 1”
Oracle Tuxedo Mainframe Adapter for SNAソフトウェアには、ASCII文字セットとEBCDIC文字セット間の変換を可能にする変換表が含まれています。コードページには、Latin-1 ASCIIコード・セット(CP-00819)を使用するATMIアプリケーションと各国語コード・セットを使用するホスト・アプリケーション間の操作を可能にする12の標準化された表が記載されています。
各変換表はアウトバウンド変換(ATMIプラットフォームからホストへ)用のマッピング表とインバウンド変換(ホストからATMIプラットフォームへ)用のマッピング表の2つのマッピング表から構成されます。変換の方向を指定する必要はありません。ホスト・アプリケーションの作成に使用された各国語のみ決定する必要があります。 図5-1は、コードページ変換を示しています。
この図は、Latin-1 ASCIIのコードページCP-00819の文字セットを使用するATMIアプリケーションがドイツ語EBCDICのコードページCP-00273を使用するホスト・アプリケーションとともにどのように動作するかを示しています。Oracle Tuxedo Mainframe Adapter for SNAの変換表00819x00273は、インバウンド変換とアウトバウンド変換の両方に対応しています。
アプリケーションの変換表を指定するには、各リモート・ドメインのATMIプラットフォームのDMCONFIG
ファイル定義にエントリを作成します。CODEPAGE
パラメータを次の形式で使用します。
*DM_REMOTE_DOMAINS
BEAS
TYPE=SNAX CODEPAGE=“cpname”
このパラメータにおいて、cpname
には表5-5からリモート・ドメインの変換表を指定します。二重引用符で囲む必要があります。
表5-5は、Oracle Tuxedo Mainframe Adapter for SNAソフトウェアに付属している変換表を示します。
ATMIプラットフォームのデフォルト値1
|
|||
CP-00819 2
|
|||
1デフォルトのATMIのASCIIおよびEBCDICコードページはCP-00819やCP-00037とは少し異なります。 2CP-00819は、ISO-8859-1(Latin-1 ASCIIとも呼ばれる)と完全に等価で、この表に示されたすべての国でASCIIコードページとして使用されています。 |
Oracle Tuxedo Mainframe Adapter for SNAの変換表はIBMによって定義されたコード・セットをベースにしています。ゲートウェイは起動時に各リモート・ドメインの変換表をロードします。
ハードコードされているデフォルトのATMI表を除くすべての表は、アプリケーションの変換ニーズにあうよう修正できます。表の詳細は、付録D「コードページ変換表」を参照してください。変換表の定義を変更するには、ゲートウェイを再起動する必要があります。
注意: | ご使用の製品ソフトウェアにはデフォルトのATMI変換表のレプリカが付属しています。これらの表は必要に応じて変更できます。これらはデフォルトの表自体ではありません。デフォルトのATMI表は変更できません。 |
Oracle Tuxedo Mainframe Adapter for SNAの変換表は次のサブディレクトリにあります。
$TUXDIR/udataobj/codepage
リモート・ドメインのCODEPAGE
指定が行われていない場合は、Oracle Tuxedo Mainframe Adapter for SNAソフトウェアではATMIのデフォルト変換表が使用されます。変換表ファイルが見つからない場合、「2241: エラー コードページ表にアクセスできません」
というメッセージと理由コードが生成され、ゲートウェイを起動できません。理由コードの詳細は、付録B「エラー・メッセージ」内でこのメッセージを参照してください。
リスト5-2は、1つのローカル・ドメイン(CIXA)と2つのリモート・ドメイン(CISAおよびIMSA)を定義するエントリを示しています。常にローカル・ドメインではASCIIコードページCP-00819を使用するものと想定されています。この例では、2つのリモート・ドメインはそれぞれドイツ語とフランス語のEBCDICコードページ、CP-00273とCP-00297を使用します。
# DMCONFIG
*DM_LOCAL_DOMAINS
CIXA TYPE=SNAX
*DM_REMOTE_DOMAINS
CISA TYPE=SNAX CODEPAGE=”00819X00273”
IMSA TYPE=SNAX CODEPAGE=”00819X00297”