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