相互通信

本章では、リモートのOSCアプリケーション・サーバーにあるファイル、TDQ、TSQリソースへのアクセス、プログラム・リンク機能について説明します。

1. 概要

OSCアプリケーション・サーバーは、OSCアプリケーション・プログラムがリモートOSCアプリケーション・サーバーが管理するリソースにアクセスできるように、サーバー間の相互通信(Intercommunication)機能を提供します。

以下は、OSCが提供する3つの相互通信機能です。

  • 関数シッピング(Function Shipping)

    OSCアプリケーション・プログラムが、リモートのOSCアプリケーション・サーバーが管理するファイル、TDQ、TSQなどのリソースにアクセスする機能です。

  • 非同期処理(Asynchronous Processing)

    OSCアプリケーション・プログラムが、リモートのOSCアプリケーション・サーバーが管理するトランザクションと非同期通信が可能な機能です。

  • 分散プログラム・リンク(Distributed Program Link、以下DPL)

    OSCアプリケーション・プログラムがリモートのOSCアプリケーション・サーバーのプログラムをリンクする機能です。

2. 基本概念

OSCアプリケーション・サーバーは、SYSIDという識別子で自分と異なるOSCアプリケーション・サーバーを区別します。SYSID識別子は、CONNECTIONリソース定義からSYSIDが指定するリモート・システムとの接続情報を取得し、その情報に基づいてリモート・システムと接続します。

SYSIDは、OSCアプリケーション・サーバーの識別子です。これは、全体OpenFrameシステム内で各サーバーを区別するためにOSCアプリケーション・サーバーごとに割り当てられるシステム・レベルの固有の識別子ではなく、あるOSCアプリケーション・サーバーが別のOSCアプリケーション・サーバーを区別するための識別子です。たとえば、OSC00001という名前のサーバーでOSC00002を識別するSYSIDとOSC00002サーバーでOSC00003を識別するSYSIDを同じ値で設定しても、それぞれのサーバーで実際に指す物理的なサーバーは異なります。

相互通信のために、まずOSCアプリケーション・サーバー自身のSYSID識別子を、OpenFrame環境設定のosc.{servername}サブジェクト、GENERALセクションのSYSIDキー値として4バイトの文字列で指定します。この値は、OSCアプリケーション・サーバーがリモート・システムを区別するために使われます。

osc.{servername}サブジェクトの設定方法については、OpenFrame OSC『環境設定ガイド』を参照してください。

OSCアプリケーション・プログラムでSYSID識別子を利用してリモートのOSCアプリケーション・サーバーにアクセスする方法は、以下のとおりです。

  • 関数シッピング、非同期処理またはDPL要求をしようとするEXEC CICSコマンド・インターフェースのSYSIDオプションにリモート・アプリケーション・サーバーのSYSIDを設定します。

  • 関数シッピングしようとするファイル、TDQのリソース定義やTSMODELリソース定義、またはDPLしようとするプログラム・リソース定義のREMOTESYSTEM項目にリモート・アプリケーション・サーバーのSYSIDを指定します。

上述したSYSIDは、リモート・アプリケーション・サーバーの接続情報が含まれているCONNECTIONリソース定義に記述された名前です。CONNECTIONリソース定義のNETNAME項目に記述されたこのリモート・アプリケーション・サーバーの名前に基づいて相互通信要求が実行されます。

CONNECTIONリソース定義の詳細については、OpenFrame OSC『リソース定義ガイド』を参照してください。

3. 関数シッピング

関数シッピングは、OSCアプリケーション・プログラムがリモート・アプリケーション・サーバーに設定されているリソース(ファイル、TDQ、TSQ)にアクセスして、READ、WRITE、DELETEまたは順次検索できる機能です。

関数シッピングを利用してアクセスしようとするリモート・アプリケーション・サーバーを指定する方法は以下のとおりです。

  • EXEC CICSコマンド・インターフェースのSYSIDオプションでリソースが存在するリモート・アプリケーション・サーバーのSYSIDを指定します。

  • 該当するリソース定義のREMOTESYSTEM項目に当該リモート・アプリケーション・サーバーのSYSIDを指定します。

リモート・リソースにアクセスする方法はリソースの種類によって異なるので、詳細については各リソースの説明を参照してください。

3.1. 関数シッピングの動作方式

関数シッピングは基本的に以下のように動作します。

  1. OSCアプリケーション・プログラムがEXEC CICSインターフェースを介して関数シッピングを要求します。

  2. SYSIDオプションまたはREMOTESYSTEM項目に設定されている値が、ローカル・アプリケーション・サーバー設定のosc.{servername}サブジェクト、GENERALセクションのSYSIDキー値と同じであるか確認します。詳細については『OpenFrame 環境設定ガイド』を参照してください。

    同じであればローカル・リソースを使用し、同じでなければリモートOSCアプリケーション・サーバーのCONNECTIONリソース定義を取得します(CONNECTIONリソース定義のPROTOCOL項目が指定されている場合にのみサポートします)。

  3. 関連リソース・マネージャーは要求内容をメッセージングします。

  4. CONNECTIONリソース定義のNETNAMEに記述されている名前に該当するリモート・アプリケーション・サーバーの会話型サーバーに指定されているミラー・サービスをメッセージングしたデータと一緒に呼び出します。

  5. リモート・サーバーのミラー・サービスは、CSM*というミラー・トランザクションで当該リソースにアクセスして要求を処理し、その結果を関数シッピングを要求したアプリケーション・サーバーに返します。

    復旧可能なリソースにアクセスしたり、順次検索またはREAD UPDATE機能を使用した場合、当該ミラー・サービスは終了します。その他の場合、ミラー・トランザクションはアプリケーション・プログラムがRETURNSYNCPOINTまたはSYNCPOINT ROLLBACKコマンドを実行するまで待機してから、要求に従ってコミットまたはロールバック処理を実行して終了します。

上記のような関数シッピング機能は、リモート・サーバーに対するミラー・サーバーとミラー・サービスに基づいているため、会話型サーバーとミラー・サービスが事前に登録されている必要があります。設定方法の詳細については、OpenFrame OSC『管理者ガイド』を参照してください。

3.2. リソース・タイプによる関数シッピング

以下は、リソース・タイプ別関数シッピングについての説明です。

  • ファイルの関数シッピング

    DELETEREADREWRITEUNLOCKWRITEENDBRREADNEXTREADPREVRESETBRSTARTBRなど、ファイルにアクセスするEXEC CICSインターフェースのコマンドで関数シッピング機能を使用できます。

    • コマンドのSYSIDオプションにリモート・アプリケーション・サーバーのSYSID識別子を指定します。

    • FILEリソース定義のREMOTESYSTEMにSYSID識別子を指定します。REMOTENAMEも指定した場合、リモート・システムでREMOTENAMEと同じ名前を持つファイルにコマンド要求が出されます。

  • TDQの関数シッピング

    TDQアクセス・コマンドのうちDELETEQ TDREADQ TDWRITEQ TDコマンドで関数シッピング機能を使用できます。

    • コマンドのSYSIDオプションにリモート・アプリケーション・サーバーのSYSID識別子を指定します。

    • TDQUEUEリソース定義のREMOTESYSTEMにSYSID識別子を指定します。REMOTENAMEも指定した場合、リモート・システムでREMOTENAMEと同じ名前を持つファイルにコマンド要求が出されます。

    • TYPEに何も指定しないままTDQリソース定義のREMOTESYSTEMにリモート・サーバーのSYSID識別子を指定します。REMOTENAMEにアクセスするTDQの名前を指定します。

  • TSQの関数シッピング

    TSQアクセス・コマンドのうちDELETEQ TSREADQ TS, WRITEQ TSコマンドで関数シッピング機能を使用できます。

    • コマンドのSYSIDオプションにリモート・アプリケーション・サーバーのSYSID識別子を指定します。

    • TSMODELリソース定義のREMOTESYSTEMにSYSID識別子を指定します。

4. 非同期処理

非同期処理は、OSCアプリケーション・プログラムがリモートOSCアプリケーション・サーバーに新規タスクの起動を要求し、タスクが要求したプログラムとは非同期で動作する機能です。

新規タスクの要求は、インターバル制御(Interval Control)機能のSTARTコマンドによって実行されます。SYSIDでアプリケーション・サーバーを指定すること以外は、同じアプリケーション・サーバーに要求する方式と同じです。起動するタスクのプログラムは、RETRIEVEコマンドを使ってSTARTに送られたデータを受信します。

ローカル・アプリケーション・サーバーへの要求をCANCELコマンドで取り消すことができるのと同様に、CANCELコマンドを使ってリモート・アプリケーション・サーバーへの要求も取り消すことができます。

5. DPL

DPL(Distributed Program Link)は、OSCアプリケーション・プログラムからリモートOSCアプリケーション・サーバーに存在するプログラムをリンク付ける機能です。ユーザー・アプリケーションのエンド・ユーザー・インターフェース(例:マッピング・サポートによる端末画面)をビジネス・ロジックから分離し、アプリケーションを多様なユーザー・インターフェースから呼び出せる構造にしたい場合や、多数の反復的な関数シッピングによる性能上の問題を最小化するためにDPLを使います。

アプリケーション・プログラムでDPLを使用する方法には以下の2つがあります。

  • EXEC CICS LINKコマンドのSYSIDオプションにリモート・アプリケーション・サーバーのCONNECTIONリソース定義の名前を指定します。

  • PROGRAMリソース定義のREMOTESYSTEM項目にリモート・アプリケーション・サーバーのCONNECTIONリソース定義の名前を指定します。この場合、REMOTENAME項目にリモート・アプリケーション・サーバーからリンクされるプログラム名をEXEC CICS LINK PROGRAMオプションで指定されたプログラム名ではなく、他の名前で指定できます。

DPLは以下のようなプロセスで動作します。

  1. LINKコマンドを処理するプログラム・マネージャーは、SYSIDオプションで受信した識別子がサーバー設定ファイルに指定されているSYSIDと同じであるかを比較します。同じであればサーバー内部でプログラムをリンクし、そうでなければCONNECTIONリソース定義を検索します。

  2. CONNECTIONリソース定義のPROTOCOL値が指定されているかを確認します。現在、PROTOCOL値をAPPCに指定していない場合のみサポートします。

  3. 他のサーバーで要求を処理できるようにメッセージングします。

  4. メッセージングしたデータをCONNECTIONリソース定義のNETNAMEに記述されているリモート・サーバーの名前によってリモート・サーバーのミラー・サービスを要求します。

  5. 要求を受けたリモート・サーバーのミラー・サービスは、メッセージングされたデータを分析した後、要求に従って内部でDFHMIRSプログラムを経てDPL要求されたプログラムをリンクします。EXEC CICS LINKコマンドのTRANSIDオプションに指定されているトランザクション名またはPROGRAMリソース定義のTRANSID項目に指定されている名前でDFHMIRSおよびリンク・プログラムが動作します。TRANSIDオプションが指定されていない場合、CSMIという名前でトランザクションが動作します。

  6. リンクされているプログラムが返される際、COMMAREAと一緒に再度メッセージングしてDPL要求したサーバーに返します。

  7. 要求したサーバーはメッセージを分析し、DPL要求したプログラムによって修正されたCOMMAREAと一緒にコントロールを渡します。

以下は、CSMIトランザクションを利用して、OSCAというSYSIDを持つアプリケーション・サーバーOSC00001のプログラムからOSC00002サーバーにDPL要求をする簡単なフローです。

figure 8 1
DPLの例

DPL要求をするEXEC CICS LINKコマンドは基本的にローカル・プログラムをリンクするときと同じですが、上で説明したSYSID、TRANSIDの他にSYNCONRETURNオプションを使って別途機能を設定できます。

SYSNCONRETURNオプションは、リモート・アプリケーション・サーバーが指定したプログラムをリンクした後、SYNCPOINT処理をどうするかを決めます。このオプションを指定した場合、ミラー・サービスは要求されたプログラムを実行した後、即刻SYNCPOINT処理をし、COMMAREAを返して終了します。

一方、SYSNCONRETURNオプションを指定していない場合、ミラー・サービスは要求されたプログラムを実行した後もSYNCPOINTを実行せずに、SYNCPOINT処理要求が来るまで待機します。DPL要求したアプリケーション・プログラムでSYNCPOINTまたはRETURNコマンドを実行してタスクが終了する場合、ミラー・サービスも一緒にSYNCPOINT処理して終了します。SYNCPOINT ROLLBACKコマンド、またはABENDコマンドの使用によってタスクが異常終了すると、ミラー・トランザクションはロールバックした後に終了します。