目次 前 次 PDF


Oracle TMA TCP for CICSの処理の仕組みの理解

Oracle TMA TCP for CICSの処理の仕組みの理解
Oracle Tuxedo Mainframe Adapter for TCP (CICS)(以後TMA TCP for CICSと呼ぶ)製品の処理の仕組みを理解するには、製品が次の機能をどのように実行しているかについて理解する必要があります。
次の項から、これらの操作のそれぞれについて説明します。あわせて、TMA TCP for CICSと相互運用するプログラムの開発や変更を行うときに役に立つ、プログラミングの注意事項についても何点か説明します。
リスナー・プログラムの起動
リスナー・プログラムはIBM社が提供しており、Sockets for CICSソフトウェア製品の一部ですが、IBM社から購入する必要があります。
注意:
リスナーの役割は、ユーザーが選択した特定のネットワーク・アドレスとポートで、接続リクエストを待機することです。接続リクエストを受信すると、リスナーはその接続プロトコルのバッファ内に格納された名前に基づいて、該当するCICSプログラムを自動的に実行します。たとえば、リモートのOracle Tuxedoノードで実行されているTMA TCP Gatewayから接続リクエストを受信した場合、リスナーは接続を処理し、TMA TCPハンドラを呼び出します。
CICSソケットの起動と停止の構成
IP CICSソケット・インタフェースを自動的に起動するには、PLTPIでDFHDELIMエントリの後に次のように入力します。
DFHPLT TYPE=INITIAL,SUFFIX=SI
DFHPLT TYPE=ENTRY,PROGRAM=DFHDELIM
DFHPLT TYPE=ENTRY,PROGRAM=EZACIC20
DFHPLT TYPE=FINAL
END
IP CICSソケット・インタフェースを自動的に停止するには(IP CICSソケットに対応している他のプログラムも含む)、PLTSDでDFHDELIMエントリの後に次のエントリを入力します。
DFHPLT TYPE=INITIAL,SUFFIX=SD
DFHPLT TYPE=ENTRY,PROGRAM=EZACIC20
DFHPLT TYPE=ENTRY,PROGRAM=DFHDELIM
DFHPLT TYPE=FINAL
END
Oracle TMA TCP for CICSの実行
TMA TCPハンドラはリスナー・プロセスによって自動的に呼び出されます。呼び出されたハンドラはソケット接続を制御し、ハンドラが停止するか、ネットワークの問題が発生してソケット接続が影響を受けるまで、制御を継続します。ハンドラが処理可能なサービス・リクエストの最大数は、同時処理数として構成されている数です。構成されている同時処理数よりも多いサービス・リクエストを処理する場合は、TMA TCP Gatewayが複数のハンドラを起動します。IBM Sockets for CICSリスナーの制限事項については、該当するIBM社の製品のドキュメントを参照してください。
ハンドラの初期化
リモートのOracle Tuxedoノードで実行されているTMA TCP Gatewayゲートウェイから最初にサービス・リクエストが送信されときに、次の処理が実行されます。
1.
2.
リスナーがgivesocket()関数呼出しを発行
3.
ハンドラがtakesocket()関数呼出しを発行
4.
5.
リモートのサービス・リクエストの処理
1.
2.
a.
ハンドラがCICS LINKコマンドを発行して、TMA TCPプロトコル・ヘッダーに指定されているプログラムを実行します。Oracle Tuxedoサービス・リクエストの送信元のクライアント・アプリケーションからリクエスト・データが渡されている場合は、そのリクエスト・データがLINKコマンドから渡されます。
b.
c.
d.
3.
a.
ハンドラからEXEC CICS START TRANS呼出しが発行されますが、この呼出しでは、TMA TCPプロトコル・ヘッダーに指定されるサービスに応じて着信サービス・ファイルに指定したトランザクションが使用されます。このトランザクションは、アプリケーション・ハンドラ・プログラムと同じにする必要があります。
注意:
セキュリティが有効な場合、EXEC CICS START TRANSID呼出しは、TMA TCPプロトコル・ヘッダーに指定されているユーザーIDを使用します。
b.
c.
d.
tpacall/TPNOREPLYリクエストの場合は、リモート・プログラムがCICS START TRANSIDコマンドで呼び出された後に、呼出し元にデータが戻されません。この場合は、サービスに対して一意のトランザクションを定義する必要があります。着信サービス情報画面を使用して、この一意のトランザクション名を入力するようにし、アプリケーション・ハンドラ起動用のトランザクション名は使用しないようにします。
ハンドラの停止
ネットワーク接続が切断されたとき、ハンドラ・プロセスは自動的に停止します。次のサービス・リクエストが送信されると、必要に応じてリスナーが自動的に新しいハンドラを起動します。
アクティブなTMA TCP for CICSプログラムを強制終了するには、付属の停止用トランザクションBDWNを使用します。オプションの指定内容によっては、リクエストの処理がすべて完了してから、すべてのハンドラを停止することもできます。導入先によっては、インストール時にBDWNトランザクションの名前が変更されることがあるため、名前を確認するようにしてください。
BDWNを使用したハンドラの停止
CICSリージョンでBDWNトランザクションを使用する際に、次のパラメータを指定して、様々な方法でハンドラを停止できます。BDWNのコマンド行の構文は次のリストに示すとおりです。
リスト2-1 ハンドラの場合のBDWNコマンド行構文
BDWN [ALL | CLEANUP | HANDLER I | HANDLER]
 
BDWN
すべてのハンドラ、すべてのリクエスタ、またはその両方を停止します。共有メモリーを割り当てた後にハンドラが異常終了したため解放されなかった共有メモリーの解放も行います。BDWNトランザクションのオプション・パラメータの指定内容に応じて、ハンドラをすぐに停止することも、すべてのリクエストの処理完了後に停止することもできます。デフォルトは、ALLです。
ALL
すべてのハンドラとリクエスタを停止しますが、受信したすべてのリクエストの処理が完了してから、BDWNトランザクションを実行します。ALLを指定した場合は、共有メモリーも解放されます。
 
これはBDWNのデフォルトです。
CLEANUP
異常終了したハンドラの共有メモリーを解放します。CLEANUPを指定した場合、ハンドラとリクエスタは停止しません
HANDLER I
すべてのハンドラをすぐに終了し、異常終了したハンドラの共有メモリーを解放します。このパラメータを指定した場合、リクエスタは停止しません
HANDLER
すべてのハンドラを停止しますが、受信したすべてのリクエストの処理が完了してから、BDWNトランザクションを実行します。このパラメータを指定した場合は、異常終了したハンドラの共有メモリーを解放します。どのリクエスタも停止しません
リクエスタ・プログラムの起動
CICSクライアント・プログラムからリクエスタに最初のサービス・リクエストが送信されたときに、リクエスタは自動的に起動します。その時点で、リクエスタはリモート・エンドポイントとの通信を確立し、実行時の情報でその制御表を更新して、後続のリクエストでも使用できるようにします。リモート・エンドポイントとの接続がなんらかの原因で切断された場合、リクエスタは自動的に接続を再確立しようとします。構成されている接続の試行回数を超えた場合、そのリクエスタは自身を無効とマークします。
ゲートウェイが新しくサービス・リクエストを受信した場合、現行の同時接続数の上限を超えないかぎり、そのサービス・リクエストは受け付けられます。また、構成されている最大接続数に達するか、またはすべてのリクエストが受け付けられるまで、必要に応じて新しく接続が開かれます。
TMA TCP for CICSから送信されるサービス・リクエストの処理
1.
CICSクライアント・プログラム(ユーザーのプログラム)が、EXEC CICS LINK コマンドをTMA TCP for CICSの前処理リクエスタに発行します。
2.
3.
4.
5.
6.
前処理リクエスタがEXEC CICS RETURNコマンドをクライアント・プログラム(ユーザーのプログラム)に発行します。クライアントはCOMMAREAに格納されたレスポンスを受け取ります。
リクエスタの停止
リクエスタを停止する方法は2つあります。
管理ツール(「Oracle TMA TCP for CICSの構成および管理」に記載)を使用して、リクエスタを無効にする方法。この方法の場合、選択されたリクエスタは、自身の表を空にし、すべてのリクエスタの処理が完了してから停止します。また、サービス・リクエストからそれを呼び出すことができなくなります。リクエスタを有効にできる状態になったら、管理ツールを使用してリクエスタを有効にします。
付属の停止トランザクションBDWNを使用する方法。この方法の場合は、リクエストの処理がすべて完了してから、すべてのリクエスタが停止されます。導入先によっては、BDWNトランザクションの名前がインストール時に変更されていることがあります。TMA TCP for CICSのインストール担当者に確認してください。
BDWNを使用したリクエスタの停止
CICSリージョンでBDWNトランザクションを使用する際に、次のパラメータを指定して、様々な方法でリクエスタを停止できます。BDWNのコマンド行の構文は次のリストに示すとおりです。
リスト2-2 リクエスタの場合のBDWNコマンド行構文
BDWN [ALL | REQUESTER I | REQUESTER]
 
BDWN
すべてのハンドラ、リクエスタ、またはその両方を停止します。その他に、論理マシン識別子(LMID)ごとに関連付けられている、リクエスタの共有メモリーを解放します。BDWNトランザクションのオプション・パラメータの指定内容に応じて、ハンドラまたはリクエスタをすぐに停止することも、すべてのリクエストの処理が完了してから停止することもできます。デフォルトは、ALLです。
ALL
すべてのハンドラとリクエスタを停止しますが、受信したすべてのリクエストの処理が完了してから、BDWNトランザクションを実行します。ALLを指定した場合は、共有メモリーも解放されます。
 
これはBDWNのデフォルトです。
REQUESTER I
リクエスタをすぐに停止し、各LMIDに関連付けられているメモリーを解放します。このパラメータを指定する場合、ハンドラは停止しません
REQUESTER
すべてのリクエスタを停止しますが、すべてのリクエストの処理が完了してから、BDWNトランザクションを実行します。また、各LMIDに関連付けられているメモリーを解放します。このパラメータを指定する場合、ハンドラは停止しません
TMA TCP Gatewayによるデータの変換
TMA TCP GatewayがリモートのOracle Tuxedoシステム環境に合わせてデータのレイアウトと型を変換するため、CICSプログラマがリモートのOracle Tuxedoシステムを意識したデータを用意る必要はありません。
このような高度な透過性を実現する際に大きな意味をもつのが、TMA TCP Gatewayの構成です。このメカニズムによって、ネーミング・ルールやデータ・フォーマットのような環境の違いがプログラマやプログラムから遮蔽されます。
すべてのデータはリモートのTMA TCP Gatewayゲートウェイによって自動的に変換およびトランスレートされますが、データがどのように操作されているのかCICSプログラマが理解できるように、採用されているルールについて次の項から説明します。ここで記載している情報は、Oracle Tuxedo環境の観点から記載されています。
リモートのOracle Tuxedoシステム上のクライアント・プログラムが、異なるモデルのコンピュータ上のサービス・ルーチンとの間でデータを送受信する際に、データは必要に応じてTMA TCP Gatewayによって自動的に変換されます。変換の処理内容は、ワード長やバイト・オーダーのような属性を変更することで、そのデータ型本来の表現をそのまま移し替えることです。
次の項から、TMA TCP Gatewayがデータを変換する際の基本的なルールについて説明し、TMA TCP Gatewayが文字列データと数値データをどのように処理しているのかの詳細についても説明します。
Oracle Tuxedoの用語
次の用語は、よく使用されるOracle Tuxedoの用語のうち、バッファのタイプに関するものです。
 
CARRAYは、終端文字を含まない純粋なデータのみのバッファであり、変換と解釈の対象にはなりません。したがって、システム間で送信されるデータは変更されません。CARRAYは、グラフィック関連ファイルの場合によく使用されるバッファのタイプです。
VIEWバッファは1つのエントリとして扱うことが可能なフィールド定義の集まりです。これは、COBOLのレコード型とCの構造体に相当します。
FML(フィールド操作言語)バッファは、可変長で動的な自己記述型のバッファです。バッファ内のフィールドごとにその属性を表す専用のヘッダーが関連付けられます。Oracle Tuxedoでは、FMLバッファとVIEWバッファは密接な関係にあり、相互に直接変更できます。
データ変換のルール
次の表に、TMA TCP Gatewayが従うデータ変換のルールを示します。
 
STRING CHAR
注意:
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のデータ型とIBM/370のデータ型との間の変換ルールをまとめています。
 
文字列データと数値データの詳細
この項には、入出力バッファおよびレコードのVIEW定義の開発に役立つ情報を記載しています。また、TMA TCP Gateway環境で文字列データと数値データがどのように扱われるのかについても記載してします。
NULL文字を含む文字列長の計算
CICSアプリケーションによって使用される入出力レコードのVIEW定義を作成する際に、文字列フィールドで使用されるNULL終端文字を含む余分な位置まで指定しないでください。
たとえば、CICSアプリケーション・プログラム側では入力レコードの文字数が10文字であることを前提にしている場合は、そのフィールドには、10+1ではなく、10と指定してください。
注意:
TMA TCP Gatewayによって実行される文字セット変換は全面的に、XPG(X/Openポータビリティ・ガイド)に従って完全にローカライズできます。ASCIIとEBCDICとの間の変換は、メッセージ・ファイルから読み込むことができます。TMA TCP Gatewayソフトウェアのデフォルトの動作で、ほとんどの英語版のアプリケーションの要件を満たすはずですが、表のカスタマイズが必要になることもあります。詳細な手順は、Oracle TMA TCP Gatewayユーザーズ・ガイドを参照してください。
数値データの変換
中間データの型と変換先の型で表現可能な範囲な中に、表現する必要がある最大値が収まるのであれば、数値データを別のデータ型に簡単に変換できます。
たとえば、double型のFMLフィールドをリモートの送信先システム環境のパック10進数フィールドに変換するには、その処理に適したdec_t type VIEW要素を指定します。
また、数値と文字列との間でも変換が可能です。たとえば、FMLバッファをdec_t型に直接変換することはできませんが、10進数値を文字列フィールドに格納し、そのフィールドをVIEW定義のdec_tフィールドにマップすることができます。

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved