Micro Focus External Call Interface

ECI のクライアント プログラムは、Enterprise Server と同じマシン上または物理的に異なるハードウェア上で実行できます。要求が、通信レイヤーを通して対象リージョンに送信されます。リモート サーバーにアクセスする場合、プログラムは Web サービスおよび J2EE リスナーを介して接続します。次の図は、TCP/IP 経由のクライアントからリモート サーバーへの要求のパスを示しています。

共有メモリを介してローカル サーバーにアクセスする場合もあります。次の図は、クライアントからローカル サーバーへの要求のパスを示しています。

Micro Focus External Call Interface のプログラミング

クライアント プログラムで ECI 呼び出しを使用して、Enterprise Server で実行する CICS アプリケーションと直接通信し、サード パーティ製ソフトウェアを完全に不要にすることができます。

クライアント側サポート

CICSEXTERNALCALL などの ECI エントリ ポイントは、Windows ではダイナミック ロード ライブラリとして、UNIX および Linux プラットフォームでは呼び出し可能共有オブジェクトとして提供される casbnccl モジュールによって公開されます。

クライアント プログラムがこのモジュールを呼び出すには、CALL 文をコーディングするか、または INITCALL(casbnccl) コンパイル指令を使用する必要があります。現在、casbnccl モジュールをクライアント アプリケーションにリンクする機能はありません。

Java クライアント サポート
Micro Focus から、Java クライアント用 ECI API も提供されています。この API を使用することで、CTG を使用せずに Enterprise Server で実行する CICS プログラムを呼び出すことができます。拡張モード (トランザクション) または非拡張モード (トランザクション以外) を使用して、CICS プログラムを呼び出すことができます。
注: Java クライアント ECI API は、Enterprise Server への同期呼び出しのみをサポートします。

この API を使用するには、通常はホスト、ポート、接続タイプ、トレース フラグを使用して接続を設定します。CommArea オブジェクトおよび CCLParams オブジェクトを適切な CICS プログラム名、ユーザー ID、パスワードを使用して入力すると、API によってエンタープライズ サーバーに要求が送信され、さらにサーバーから戻る ECIResponse オブジェクトを受信します。例外が発生すると、エンタープライズ サーバーから CICSException または AbendException のいずれかが返されます。

Java コードを変更して Micro Focus ECI 呼び出しを処理する方法については、Micro Focus ECI Java API で説明します。

構成

ECI を使用するように Enterprise Server リージョンを構成するには、ES_LEGACY_ECI 環境変数を Y に設定します。たとえば、ES_LEGACY_ECI=Y のように指定します。

実行する CICS プログラムから返されるデータの量が入力データのサイズの約 2 倍を超える場合、ES_ECI_MAX_RESP 環境変数を最大予想応答サイズ (バイト単位) に設定します。たとえば、ES_ECI_MAX_RESP=70000 のように指定します。

サーバーの検索
COBOL プログラムでサーバーと通信する最も単純な方法は、Micro Focus ECI 拡張機能を使用することです。この機能は、以下の環境変数によって有効になります。
ES_REGION 8 文字のリージョン/サーバー ID。
例:
ES_REGION=myserver
共有メモリの使用量をローカル サーバーに示します。
ES_ECI_SOCKET コロンで区切られた、8 文字のリージョン/サーバー ID および Web サービス リスナー ポート (<server>:<port>)。
例:
ES_ECI_SOCKET=myserver:9001

TCP/IP の使用量をローカルまたはリモート サーバーに示します。

これらの 2 つの環境変数は相互排他的です。ただし、両方を使用した場合、ES_ECI_SOCKETES_REGION に優先します。

これらの環境変数のどちらも使用しなかった場合、動作モードは IBM CTG のものと同じになります。この例では、要求が送信されるサーバーは、ECI パラメーター ブロックの ECI-SYSTEM-NAME 変数を通して識別され、null または空白で埋められた値を取ります。その値は、MFDS リポジトリのサーバー定義に一致する必要があります。

このリポジトリの位置は、mf-client.dat ファイルを編集するか、環境変数 ES_ECI_CCITCP2 を設定することで指定できます (この環境変数の形式:<host>:<mfds-port>)。次に例を示します。
ES_ECI_CCITCP2=localhost:86
mf-client.dat ファイルは、Windows では Micro Focus COBOL 製品インストールの \bin および \bin64 ディレクトリに、UNIX および Linux では /etc に置かれています。
長いパスワード/パス フレーズのサポート
Micro Focus ECI サポートでは、長さが 8 文字を超えるユーザー ID およびパスワードを使用できます。これは、IBM ECI v2 フィールドを v1 の構造に追加することで実現されます。たとえば、C では次のようになります。
#pragma pack(1)
#define ECI_VERSION_2A 6

	struct
	{
		ECI_PARMS	eci_base_parms;
		short		eci_v2_ext_filler1;
		short		eci_v2_ext_filler2;
		void*		eci_v2_ext_filler3;
		char*		eci_userid_ptr;
		char*		eci_password_ptr;
	} eci_ext_parms;

#pragma pack()

CICS_ExternalCall() を呼び出す前に、次を実行します。

eci_ext_parms.eci_base_parms.eci_version = ECI_VERSION_2A;
eci_ext_parms.eci_userid_ptr = uid;
eci_ext_parms.eci_password_ptr = pwd;

uid および pwd は、null で終了する文字列です。

COBOL で同じことを行うには、ECI-TPN 宣言の直後に挿入される IBM cicseci.cbl ファイルに次の ECI-PARMS 定義を追加します。

           03                          pic x(2)    comp-5.
           03                          pic x(2)    comp-5.
           03                          pointer.
           03  ws-eci-user-id-ptr      pointer.
           03  ws-eci-passwd-ptr       pointer.
注: cicseci.cbl ファイルを変更できない場合は、代わりに次のコードをプログラムに追加します。

データ定義:

       78  78-eci-parm-length              value length of ECI-PARMS.
       01  ws-eci-extended-parms.
           03  ws-eci-base-parms       pic x(78-eci-parm-length).
           03                          pic x(2)    comp-5.
           03                          pic x(2)    comp-5.
           03                          pointer.
           03  ws-eci-user-id-ptr      pointer.
           03  ws-eci-passwd-ptr       pointer.

手続きコード:

           move 6                      to eci-version
           move eci-parms              to ws-eci-base-parms

           call eci-entry-pptr using
             by reference              ws-eci-extended-parms
           returning eci-error-id
           end-call
           move ws-eci-base-parms      to eci-parms