CICSユーザー・ガイド

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

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社から購入する必要があります。

注意: TMA TCP for CICSを使用できるようにするには、製品に付属のマニュアルの手順に従って、IBM TCP/IPとSockets for CICS製品の両方をインストールし構成する必要があります。

リスナーの役割は、ユーザーが選択した特定のネットワーク・アドレスとポートで、接続リクエストを待機することです。リスナーは接続リクエストを受信すると、リスナーの接続プロトコルのバッファ内に格納された名前に基づいて、該当するCICSプログラムを自動的に実行します。たとえば、リモートのOracle Tuxedoノードで実行されているTMA TCP Gatewayからリスナーが接続リクエストを受信した場合、リスナーは接続を処理し、TMA TCPハンドラを呼び出します。

 


Oracle TMA TCP for CICSの実行

TMA TCPハンドラはリスナー・プロセスから自動的に呼び出されます。ハンドラは呼び出されると、ソケット接続を制御し、ハンドラが停止するか、ネットワークの問題が発生してソケット接続が影響を受けるまで、制御を継続します。ハンドラが処理可能なサービス・リクエストの最大数は、同時処理数として構成されている数です。構成されている同時処理数よりも多いサービス・リクエストを処理する場合は、TMA TCP Gatewayが複数のハンドラを起動します。IBM Sockets for CICSリスナーの制限事項については、該当するIBM社の製品のドキュメントを参照してください。

ハンドラの初期化

リモートのOracle Tuxedoノードで実行されているTMA TCP Gatewayゲートウェイから最初にサービス・リクエストが送信されときに、次の処理が実行されます。

  1. CICSのソケット・リスナーがTMA TCP for CICSハンドラを起動
  2. リスナーがgivesocket()関数呼出しを発行
  3. ハンドラがtakesocket()関数呼出しを発行
  4. リスナーが新しい接続リクエストのリスニングを再開
  5. ハンドラがTCP/IPを使用して直接、リモートのTMA TCP Gatewayゲートウェイと通信

リモートのサービス・リクエストの処理

  1. TMA TCPハンドラは、TCP/IPを介して、リモートのTMA TCP Gatewayゲートウェイ(Oracle Tuxedoリージョン内)からリクエストを受信します。データは、必要に応じて、適切なデータ・フォーマットまたはレイアウトに変換されます。
  2. 同時処理数が1でセキュリティが無効な場合、またはサービス・リクエストの送信元がバージョン3.0よりも前のTMA TCP Gatewayである場合は、次の処理が行われます。
    1. ハンドラがCICS LINKコマンドを発行して、TMA TCPプロトコル・ヘッダーに指定されているプログラムを実行します。Oracle Tuxedoサービス・リクエストの送信元のクライアント・アプリケーションからリクエスト・データが渡されている場合は、そのリクエスト・データがLINKコマンドから渡されます。
    2. ハンドラは、CICSプログラムが終了し、CICSプログラムからデータが戻されるまで待機します。
    3. ハンドラがレスポンスをリモートのTMA TCP Gatewayゲートウェイに送信します。
    4. ハンドラはリモート・ゲートウェイとの接続を維持し、別のサービス・リクエストを待機します。
  3. 同時処理数が1よりも大きくセキュリティが有効な場合は、次の処理が行われます。
    1. ハンドラからEXEC CICS START TRANS呼出しが発行されますが、この呼出しでは、TMA TCPプロトコル・ヘッダーに指定されるサービスに応じて着信サービス・ファイルに指定したトランザクションが使用されます。このトランザクションは、アプリケーション・ハンドラ・プログラムと同じにする必要があります。
    2. 注意: セキュリティが有効な場合、EXEC CICS START TRANSID呼出しは、TMA TCPプロトコル・ヘッダーに指定されているユーザーIDを使用します。
    3. 完了したサービス・リクエストがある場合、ハンドラはアプリケーション・ハンドラからレスポンス・データを受信します。
    4. ハンドラがレスポンスをリモートのTMA TCP Gatewayゲートウェイに送信します。
    5. ハンドラとゲートウェイ間の接続は維持され、ハンドラは別のサービス・リクエストを待機します。

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. リクエスタがリモートのOracle Tuxedoドメインにリクエスト情報を送信します。
  5. リクエストがレスポンスを必要とするタイプである場合、リクエスタはOracle Tuxedoからレスポンスを受け取り、前処理リクエスタにデータを渡します。
  6. 前処理リクエスタがEXEC CICS RETURNコマンドをクライアント・プログラム(ユーザーのプログラム)に発行します。クライアントはCOMMAREAに格納されたレスポンスを受け取ります。

リクエスタの停止

リクエスタを停止する方法は2つあります。

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の用語のうち、バッファのタイプに関するものです。

表2-1 Oracle Tuxedoの用語
用語
説明
STRING
文字データのバッファであり、バッファ内の最初のNULL文字で終了します。送信元と送信先のシステムのタイプが異なる場合は、通常、文字列のバッファは変換の対象になります。
mbstring
CARRAYは、終端文字を含まない純粋なデータのみのバッファであり、変換と解釈の対象にはなりません。したがって、システム間で送信されるデータは変更されません。グラフィック関連のファイルの場合に、CARRAYがよく使用されるバッファのタイプになります。
VIEW
VIEWバッファは1つのエントリとして扱うことが可能なフィールド定義の集まりです。これは、COBOLのレコード型とCの構造体に相当します。
FML
FML(フィールド操作言語)バッファは、可変長で動的な自己記述型のバッファです。バッファ内のフィールドごとにその属性を表す専用のヘッダーが関連付けられます。Oracle Tuxedoでは、FMLバッファとVIEWバッファは密接な関係にあり、相互に直接変更できます。

データ変換のルール

次の表に、TMA TCP Gatewayが従うデータ変換のルールを示します。

表2-2 データ変換のルール
フィールド・タイプ
変換のルール
mbstring
バイトの並びはそのままで変換なし
STRINGCHAR
必要に応じてASCIIからEBCDICに変換
SHORT
S9(4) COMPに変換
LONG
S9(9) COMPに変換
FLOAT
COMP-1に変換
DOUBLE
COMP-2に変換

注意: 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のデータ型との間の変換ルールをまとめています。

表2-3 Cのデータ型とIBM/370のデータ型との間の変換ルール
リモートのデータ型
説明
VIEWのフィールド・タイプ/長さ
PIC X(n)
英数字
string / n
PIC X
英数字1文字
char
PIC X(n)
バイト配列
carray / n
PIC X
1バイト数値
carray / 1
PIC S9(4) COMP
16ビットの整数
short
PIC S9(9) COMP
32ビットの整数
long
COMP-1
単精度浮動小数点
float
COMP-2
倍精度浮動小数点
float
PIC
S9((m+(n+1))/2)V9(n)
COMP-3
パック10進数
dec_t / m,n

文字列データと数値データの詳細

この項には、入出力バッファおよびレコードのVIEW定義の開発に役立つ情報を記載しています。また、TMA TCP Gateway環境で文字列データと数値データがどのように扱われるのかについても記載してします。

NULL文字を含む文字列長の計算

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フィールドにマップすることができます。


  先頭に戻る       前  次