前ページへはじめに CCI次ページへ

第 2 章 クライアント/サーバ結合

この章ではクライアント/サーバ結合の原理を説明し、ユーザのプログラムを汎用クライアント/サーバモジュールに結合する方法を説明します。

64 ビット
64 ビットモードで実行しているアプリケーションはクライアント/サーバ結合を使用できません。

2.1 はじめに

クライアント/サーバ結合とは、ユーザが通信プログラムに煩わされずにクライアント/サーバアーキテクチャを実現できる、30 クライアントまでの簡便なリモートプロシージャコール (RPC) メカニズムです。

クライアント/サーバ結合は、Server Express の一部として提供されており、フォールトトレラントな大規模ミドルウェアソリューションを必要としないアプリケーションで使用します。

クライアント/サーバ結合が提供する諸機能とパフォーマンスが、自社のビジネスに適当であるかどうかを確認してください。 多くの場合、クライアント/サーバ結合により、導入しやすくコストパフォーマンスのよいソリューションが提供されます。

このクライアント/サーバ結合が提供する mfclient と mfserver という 2 つのモジュールにより、ユーザがアプリケーションに通信プログラムを組み込む必要がなくなります。 この 2 つのモジュールはあらゆるアプリケーションで利用できる汎用モジュールです。

この 2 つのモジュールは、構成ファイルの設定に従って通信リンクを管理し、データ転送を行います。 各通信リンクの最後には、ユーザ定義プログラムとデータを交換することもできます。 mfclient モジュールはユーザが作成したクライアントプログラム (たとえば、ユーザインターフェイスを処理するプログラム) から呼び出されますが、mfserver はユーザが作成したサーバプログラム (たとえば、データアクセスやアプリケーションロジックを処理するプログラム) を呼び出します。

ユーザが作成するクライアントプログラムとサーバプログラムは mfclisrv.cpy というコピーファイルを使用して、汎用のクライアント/サーバモジュールと相互通信します。 COBCPY 環境変数を設定してコピーファイルの場所を指定することができます。 COBCPY の詳細については、『Server Express ユーザガイド』の付録、『Micro Focus 環境変数』の項を参照してください。

Server Express では、 クライアントとサーバの間でデータを転送する Csbind というアプリケーション例を使用できます。このアプリケーションでは、クライアント/サーバ結合の使用方法を示します。 このデモプログラムは Infomgr を使用して検索します。

2.2 クライアント/サーバ結合の内容

クライアント/サーバ結合は、サーバ階層上で mfserver の非専用コピーを実行することによって可能になります。 mfserver は、取り決めたサーバ名を使用してすべてのクライアントと通信します。 mfserver モジュールの機能は、クライアントからの要求を受けて接続の確立や終了を行うのみであるため、最初のデフォルト値のまま使用できます。

情報の流れを次に示します。 (ここでは、デモ用のアプリケーション、Csbind のプログラムファイルをクライアントプログラム例およびサーバプログラム例として使用します。)

  1. ユーザが作成した クライアントプログラム (netxcli.cbl) がアプリケーション初期化コードを実行し、ファイル名を要求するプロンプトを表示し、指定されたファイルが存在することを確認した後に mfclient を呼び出します。
  2. 初めて呼び出された mfclient は構成ファイル、netxdem.cfg から構成情報を読み込みます。

  3. mfserver が接続要求を受け取ります。

  4. mfserver 各クライアントに対して、セカンダリサーバを生成します。 サーバ名は内部生成されますが、 元のサーバ名に数値 ID を付加したもの (たとえば、mfserver01) となります。 または、構成ファイルにサーバ名を指定しておくこともできます。

  5. mfserver がセカンダリサーバ名 (mfserver01) を mfclient に送り返し、この対話は終了します。

  6. mfclient は、セカンダリサーバ (mfserver01) に接続し、LNK-PARAM-BLOCK (『クライアント/サーバ結合のコピーファイル』の項を参照) を通じて、構成ファイルから取得したパラメータを引き渡します。

  7. mfserver01 は ユーザが作成したサーバプログラム (netxserv.cbl) を呼び出し、LINKAGE SECTION を通して mfclient から受け取ったパラメータを渡します。

  8. ユーザが作成したサーバプログラム (netxserv.cbl) が初めて呼び出されたため、アプリケーション初期化コードを実行して、プログラムを終了します。 制御は mfserver01 に戻ります。

  9. mfserver01 は mfclient に制御を返します。
  10. mfclient は接続が確立したことを確認し、ユーザが作成したクライアントプログラム (netxcli.cbl) に制御を渡します。

  11. クライアントプログラム (netxcli.cbl) はエンドユーザに指定されたファイルを開き、レコードを読み込み、mfclient を呼び出して LINKAGE SECTION を通じてそのレコードを渡します。

  12. mfclient は、渡されたデータを内部バッファを使用して mfserver01 に渡します。

  13. mfserver01 がそのデータをユーザのサーバプログラム (netxserv.cbl) に渡すと、サーバプログラムがファイルを作成してレコードを書き込みます。

    ユーザのクライアントプログラム (netxcli.cbl) がファイルの終わりを検出するまで、このようなレコード単位の読み込み/書き込みループが繰り返されます。 ファイルの終わりに来ると、クライアントプログラムはファイルをクローズし、プログラムの終了をサーバに知らせます。 これに対してサーバはファイルをコピーしたディレクトリ名を返します。

  14. クライアントプログラム (netxcli.cbl) は、サーバ上に作成されたファイル名を表示し、LNK-CNTRL-FLAG を client-ending に設定して、mfclient を呼び出して終了します。

  15. mfclient が client-ending パラメータを mfserver01 に渡すと、mfserver01 はこのパラメータをユーザが作成したサーバプログラム (netxserv.cbl) に渡し、その結果ユーザサーバプログラムが終了します。
  16. mfclient は、セカンダリサーバ (mfserver01) が終了したことをベースサーバ (mfserver) に知らせます。

2.3 クライアント/サーバ結合の使用方法

アプリケーションでクライアント/サーバ結合を使用するには、次の作業が必要です。

上記の各手順について、以下の各項で詳しく説明します。

2.4 クライアント/サーバ結合のコピーファイル

mfclient と mfserver の 2 つのモジュールは mfclisrv.cpy というコピーファイルに定義されたパラメータブロック (LNK-PARAM-BLOCK) を通して情報の受け渡しを行います。 このパラメータブロックは、ユーザプログラムを呼び出すときの情報の引き渡しでも使用します。 mfclisrv.cpy コピーファイルは、mfclient と mfserver の 2 つのモジュールを使用するすべての COBOL プログラムにインクルードされなければなりません。

この mfclisrv.cpy コピーファイルは Infomgr を使用して検索します。

2.5 クライアント/サーバ結合の構成ファイル

クライアント/サーバ結合では、構成ファイルを使用して mfclient と mfserver の 2 つのモジュールの動作と通信リンクを制御します。

クライアント/サーバ結合の構成ファイルは、拡張子が .cfg の ASCII テキストファイルです。 構成ファイル名を特に指定しなければ、デフォルトの構成ファイル名、mfclisrv.cfg が使用されます。

アプリケーションごとに別の構成ファイルを作成することができ、また 1 つの構成ファイルに複数のエントリを入れることもできます。 複数のエントリを入れる場合は、ファイル内で各アプリケーション固有のタグを指定し、その後にそのアプリケーションのパラメータリストを続けます。 クライアントプログラムでは、LNK-PARAM-BLOCK ブロックの LNK-TAGNAME フィールドを使用してこのタグ名を指定しなければなりません。 この方法を使うと、デフォルトの構成ファイル mfclisrv.cfg 内に複数エントリを指定することにより、コマンドラインを短くすることができます。

クライアント/サーバアプリケーションの設定や構成ファイルのエントリに誤りがあれば、プログラムはエラー内容を詳しく示すメッセージを画面に表示して終了します。

このようなエラーは、画面に表示されるだけでなく、mfclisrv.log ファイルにも記録されます。 このファイルはカレントディレクトリに作成されるか、MFLOGDIR 環境変数で指定されたディレクトリに作成されます。 このため、端末が直接接続されていないサーバでもメッセージを記録できます。

2.5.1 構成ファイルのパラメータ

次に mfclisrv.cfg 構成ファイルのエントリ一覧をアルファベット順に示します。 構成ファイルに指定されていないパラメータについてはデフォルト値が使用されます。

cblksize=nnnn PIC X(4) COMP-X [デフォルト: 0]

ダイアログシステム の制御ブロック。 ダイアログシステム を使用する場合にのみ必要です。

clierrprog=name PIC X(128) [デフォルト: なし]

mfclientm に代わって通信エラーを処理するプログラム名。 mfclient エラーを呼び出し側プログラムで処理する場合は、SAME を指定します。

commsapi=api PIC X(4) [デフォルト: CCI]

通信 API。 有効な値は、CCI または NONE。 2 階層アプリケーションを作成して、通信プログラムをまったく使わずに 1 台の PC でテストを行えるようにするには、特殊エントリの NONE を指定します。 mfserver と通信要求がバイパスされ、データは mfclient とユーザ定義のサーバプログラムの間で直接送受信されます。

注: ユーザ定義のサーバプログラムとして既存アプリケーションを使用している場合は、このオプションを指定できません。

compress=nnn PIC 9(3) [デフォルト: 000]

たとえば、001 の場合は、CBLDC001 というルーチンが使用されます。 0 を指定すると、データ圧縮は行われません。

dblksize=nnnn PIC X(4) COMP-X [デフォルト: 0]

ユーザ定義のクライアントプログラムとサーバプログラム間の、データの送受信で使用するユーザデータ領域のサイズ。 ダイアログシステムアプリケーションの場合は、この値が ダイアログシステムデータブロックのサイズになります。

警告: この値が、実際に使用しているデータ領域のサイズより小さければ、予期できないエラーが発生する可能性があります。

eblksize=nnnn PIC X(4) COMP-X [デフォルト: 0]

オプションの ダイアログシステムイベントブロックのサイズ。

machinename=name PIC X(34)

servername エントリで指定したサーバが存在するマシン名。 これを指定することで、システムがサーバを探す手間や同名のサーバとの混乱が避けられます。

maxtrans=nn PIC 99 [デフォルト: 0]

転送パッケージの最大サイズをキロバイトで指定します。 有効な値は 1 〜 62. です。 バッファ全体の大きさがこの値を超えると、システムはバッファを maxtrans サイズずつ分割して転送します。

midconfig=filename PIC X(128) [デフォルト: なし]

複数の階層にわたる問題のソリューションの一つとして mfclient が mfserver に呼び出されたときに使用する構成ファイル名。 このエントリを指定すると、mfserver がルータのように機能し、ローカルの mfclient モジュールにデータを渡します。 その場合の mfclient モジュールはこの構成ファイルを使用して、別のサーバを探して通信します。 この方法を使用すると、マシンごとに異なるプロトコルと通信 API を使用することができます。

protocol=protocol PIC X(8) [デフォルト: CCITC32]

使用する CCI プロトコル。 このエントリは、commsapi が CCI に設定されている場合にのみ有効です。 サポートしている CCI プロトコルは、Novell IPX (CCIIX32 と指定)、NetBEUI (CCINB32 と指定)、動的データ交換 (CCIDE32 と指定)、TCP/IP (CCITC32 と指定)です。 commsapi が CCI (デフォルト) に設定されている場合に protocol を指定しなければ、クライアント/サーバ結合で、デフォルトの TCP/IP (CCITC32) が使用されます。

scrntype=type PIC X(4) [デフォルト: なし]

たとえば、ユーザプログラムが GUI とキャラクタインターフェイスの両方をサポートしている場合は、このエントリを使用してクライアントプログラムがどちらのインターフェイスを使用するかを指定できます。 クライアント/サーバ結合モジュール自体は scrntype エントリを使用しません。

servername=server PIC X(14) [デフォルト: MFCLISRV]

通信で使用するサーバ名。

setenv=name value PIC X(148) [デフォルト: なし]

すべてのサーバプログラムの実行の前に環境変数を設定します。 形式は以下の通りです。

variable name PIC X(20)

variable value PIC X(128)

名前と値のフィールドは 1 つ以上の空白で区切ります。 setenv エントリは 9 個まで指定できます。

srvanim=x PIC X(16) [デフォルト: N]

Y または N。 このパラメータを Y にすると、サーバ上でユーザプログラムのアニメーション表示が可能になります。 すなわち、mfserver をいったん停止して、COBSW=+A として再起動しなくても動的に設定されます。

UNIX システムの場合は、x,filename を指定すると、ユーザプログラムのクロスセッションアニメーションが可能になります。 詳細については、『アプリケーションのデバッグ』の項を参照してください。

srverrprog=name PIC X(128) [デフォルト: なし]

mfserver に代わって通信エラーを処理するプログラム名。 mfserver エラーのために srvprog エントリで指定したものと同じにする場合は、SAME を指定します。

srvprog=name PIC X(128)

mfserver が呼び出すユーザ定義プログラムの名前。

srvtier=name PIC X(128) [デフォルト: mfserver]

サーバ階層プログラムの名前。 これが指定されると、mfserver はこのプログラムから呼び出されます。

subserver=base-name PIC X(14) [デフォルト: なし]

サブサーバプロセスとの通信で使用するベース名を指定します。 デフォルトのサーバ名は mfclisrv であるため、そのままでは、サブサーバ名が mfclisrv00001、mfclisrv00002、... となります。 このパラメータに newserv を指定すると、サブサーバ名は newserv00001、newserv00002、... となります。 このパラメータを使用すると、ベースサーバ名を変えずにアプリケーション固有のサブサーバ名を使用できます。

timeout=nnnn PIC X(4) COMP-5 [デフォルト: 120 秒)

このパラメータは、システムのデフォルトのタイムアウト値より優先されます。 タイムアウト値は 1/10 秒単位で指定します。 このとき、すでに呼び出されているものについては、呼び出された時点で有効だったタイムアウト値がそのまま使用されます。

ublksize=nnnn PIC X(4) COMP-X [デフォルト: 0]

オプションのユーザデータブロックのサイズ。

useraudit=x PIC X [デフォルト: N]

Y または N。 このパラメータを Y に設定すると、クライアントの接続と切断の詳細がログに記録されます。 設定すると、次のような詳細情報がクライアントとサーバの両方によって記録されます。 日付、時刻、接続 / 切断インジケータ、サーバ名、マシン名、およびプロトコル。 記録先はシステムログファイルですが、 詳細については、『システムログファイル』と『監査ログの作成』の項を参照してください。

2.5.2 構成ファイルで最低限必要なエントリ

構成ファイルで最低限必要なエントリは、次の要因によって異なります。

どんな場合にも必要なエントリを次に示します。

dblksize データ転送で使用するユーザデータ領域のサイズ。
srvprog サーバ側の処理を行うために mfserver が呼び出すプログラム名。 これは、サーバマシンで実行されるユーザプログラム (すなわち、データアクセスとアプリケーションロジックを処理するプログラム) です。

複数サーバを実行する場合は、servername エントリを使用してサーバ名を指定しなければなりません。

CCI を使用しない場合は commsapi エントリを設定しなければなりません。 また、CCI を使用しても TCP/IP 以外を使用する場合は protocol エントリを設定しなければなりません。

構成ファイルに設定されていないパラメータについては、それぞれ固有のデフォルト値が使用されます。

2.5.3 構成ファイルの場所

構成ファイルはユーザにもっとも便利な場所に置くことができます。 mfclient と mfserver の 2 つのプログラムは構成ファイルを次の方法で見つけ出します。

  1. MFCSCFG 環境変数にファイル名が設定されているか調べます。

  2. コマンドライン中でファイル名が指定されていれば、それが MFCSCFG 環境変数で指定されたものに優先します。

  3. 上のどちらの方法でもファイル名が指定されていなければ、デフォルトの構成ファイル、mfclisrv.cfg をカレントディレクトリから探します。

  4. mfclisrv.cfg が見つからなければ、構成ファイルの各エントリに対するデフォルト値が使用されます。

構成ファイル名をどの方法で指定する場合でも、場所と名前を合わせて 128 字までの完全パス名で指定できます。

2.6 ユーザ作成クライアントプログラムの mfclient 接続

mfclient と mfserver の 2 つのモジュールは mfclisrv.cpy というコピーファイルに定義されたパラメータブロック (LNK-PARAM-BLOCK) を通して情報の受け渡しを行います。 このパラメータブロックは、ユーザプログラムを呼び出すときの情報の引き渡しでも使用します。

ユーザのプログラムに次の例のようなコードを追加して、mfclient にパラメータを渡せるようにします。

$SET ANS85

 WORKING-STORAGE SECTION. ...... ......

*--- mfclisrv.cpy をクライアントプログラムの作業場所節と
 *--- サーバプログラムの連絡節にインクルード
*--- する必要があります。

 COPY "mfclisrv.cpy".

 LINKAGE SECTION. ...... ......

 *--- Input-Rec はユーザクライアントと
 *--- サーバプログラムの間でデータを転送する
*--- ために使用する領域です。このデータ領域の
*--- サイズは、mfclient モジュールによって読み込まれる
 *--- クライアント/サーバ結合構成ファイル内の
 *--- ユーザによって定義されます。mfclient は
*--- この領域に必要なメモリをセットアップし、
 *--- この領域のポインタをユーザクライアントプログラムに返します (下記参照)。

 01 INPUT-REC               PIC X(32767)

 PROCEDURE DIVISION.

 CLIENT-CONTROL SECTION.

     PERFORM UNTIL END-CONNECTION

*--- lnk-client は同じ "mfclient" を保持します。
 *--- 初回は、mfclient を初期化してサーバとの
*--- コンタクトを確立します。

        CALL LNK-CLIENT USING LNK-PARAM-BLOCK

        EVALUATE TRUE

*--- mfclient が返したアドレスを割り当てることによって
 *--- ユーザデータ領域 (Input-Rec) にユーザがアクセス可能になります。

           WHEN START-CONNECTION
              SET ADDRESS OF INPUT-REC TO LNK-DBLOCK-PTR

           WHEN END-CONNECTION
              EXIT PERFORM

           WHEN OTHER

*--- アプリケーションクライアントロジックを実行します。 たとえば、
 *--- ユーザインターフェイスデータを表示して承認します。

              ......

         END-EVALUATE

 *--- ユーザ定義フラグ (たとえば、EXIT-FLG-TRUE) を設定して、
*--- クライアント処理が終了したことを示します。 たとえば、
*--- アプリケーションインターフェイスの [終了] ボタンをクリックした
*--- 可能性があります。

         IF EXIT-FLG-TRUE
            SET CLIENT-ENDING TO TRUE
         END-IF

     END-PERFORM.

 CLIENT-CONTROL-END.
     STOP RUN.

1 つのプリケーションのクライアント数 を制御したり、 エラーメッセージの表示を自分のプログラムで行う場合は、ユーザプログラムの最初の EVALUATE 文に次のようなコードを追加する必要があります。

           WHEN TOO-MANY-CLIENTS
              PERFORM OVER-CLIENT-LIMIT

           WHEN COMMS-ERROR
              PERFORM SHOW-ERROR

           ......

 OVER-CLIENT-LIMIT SECTION.
     DISPLAY SPACES AT 0101 WITH BACKGROUND-COLOR 7
        "MAXIMUM NUMBER OF CLIENTS EXCEEDED - SESSION ENDED"
        AT 1012 WITH FOREGROUND-COLOR 4
     SET EXIT-FLG-TRUE
     SET CLIENT-ENDING TO TRUE
     EXIT.

 SHOW-ERROR SECTION.
     DISPLAY LNK-ERROR-LOC AT 2201
     DISPLAY LNK-ERROR-MSG AT 2301 WITH SIZE LNK-ERROR-MSG-LEN.
     EXIT.

非同期要求を 処理する場合は、EVALUATE 文に次のようなコードを追加しなければなりません。

WHEN START-CONNECTION
   PERFORM GET-USER-INPUT
    IF MAKE-ASYNC-REQUEST <* ユーザ非同期オプション
      SET ASYNC-REQUEST TO TRUE
   END-IF

WHEN ASYNC-OK
   SET TEST-ASYNC-RESULT TO TRUE
   PERFORM DELAY-LOOP

WHEN ASYNC-INCOMPLETE
   DISPLAY "REQUEST STILL BEING PROCESSED" AT 1010
   PERFORM DELAY-LOOP
   SET TEST-ASYNC-RESULT TO TRUE

WHEN RESULT-OK
   DISPLAY "REQUEST-COMPLETED " AT 1010
   PERFORM GET-USER-INPUT

WHEN ASYNC-NOT-STARTED
WHEN ASYNC-FAILED
   DISPLAY "ASYNCHRONOUS REQUEST FAILURE " AT 1010
   PERFORM SHOW-ERROR
   PERFORM GET-USER-INPUT

WHEN COMMS-ERROR
   PERFORM SHOW-ERROR

2.7 ユーザ作成サーバプログラムの mfserver 接続

mfclient と mfserver の 2 つのモジュールは mfclisrv.cpy というコピーファイルに記述されているパラメータブロックを通して情報の受け渡しを行います。 このパラメータブロックは、ユーザプログラムを呼び出すときの情報の引き渡しでも使用します。

ユーザのサーバプログラムでは mfclisrv.cpy コピーファイルを LINKAGE SECTION にインクルードします。 また、PROCEDURE DIVISION のヘッダに LNK-PARAM-BLOCK パラメータブロックを指定して mfserver からパラメータを受け取れるようにします。

次のサンプルサーバコードで説明します。

 LINKAGE SECTION.

 01 INPUT-REC               PIC X(32767)

 COPY "MFCLISRV.CPY".*--- lnk-param-block は mfclisrv.cpy 内のレコード定義です。

 PROCEDURE DIVISION USING LNK-PARAM-BLOCK.

 CONTROLLING SECTION.

*---------------------------------------------------------------*
 *  ユーザデータと lnk-parm-block 内のポインタを
*  関連付けます。
*---------------------------------------------------------------*

     SET ADDRESS OF INPUT-AREA TO LNK-DBLOCK-PTR.

        EVALUATE TRUE

           WHEN START-CONNECTION
              PERFORM PROGRAM-INITIALIZE

           WHEN OTHER
              PERFORM PROGRAM-BODY

        END-EVALUATE.
        EXIT PROGRAM.

 PROGRAM-INITIALIZE SECTION.

  *--- このコードは、ユーザサーバプログラムの初期化コード、 
*--- たとえばアプリケーションデータファイルを開く操作を
*--- インクルードします。

     ......

 PROGRAM-BODY SECTION.

*--- この節は、アプリケーション処理コード、
*--- たとえば、データファイルの読み書きを
*--- インクルードします。

     ......

エラーメッセージの表示を自分のプログラムで行う場合は、プログラムの最初の EVALUATE 文に次のようなコードを追加します。

           WHEN COMMS-ERROR
              PERFORM SHOW-ERROR

           ......

 SHOW-ERROR SECTION.
     DISPLAY LNK-ERROR-LOC AT 2201
     DISPLAY LNK-ERROR-MSG AT 2301 WITH SIZE LNK-ERROR-MSG-LEN.
     EXIT.

2.8 クライアント/サーバ結合アプリケーションの実行

mfserver モジュールは .int ファイルとして提供されており、そのまま実行するか、.gnt ファイルを生成します。

mfclient と mfserver の各モジュールは、クライアントとサーバの各コンポーネントを手動で実行して、標準の COBOL プログラムとして実行されます。

既存のスタンドアロンプログラムをサーバとして実行する場合は、ベースサーバが実行するプログラムとして、その名前を指定します (srvtier)。 通信は、名前を DSRUN に変更された mfserver モジュールのコピーによって処理されます。このコピーは、次のようにして作成されます。

既存のプログラムをサーバとして使用することの主な利点は、単一の PC または PC ネットワークでアプリケーションを実行することができ、クライアント/サーバ結合を使用し単一のユーザインターフェイスプログラムを提供するだけで、クライアント/サーバアプリケーションとして実装できることです。

クライアント/サーバ結合を実行する手順は、以下のとおりです。

  1. サーバプログラムを起動します。

  2. クライアントプログラムを起動します。

クライアントプログラムを起動するコマンドラインは次のとおりです。

cobrun mfserver [-b] [-p protocol] [-s server-name] [-v]

各パラメータの説明は以下のとおりです。

-b サーバをバックグラウンドプロセスとして実行します。 UNIX システムの場合は、コマンドラインの最後に '&' を付けるのと同じです。 サーバからのエラーメッセージはログファイル (mfclisrv.log) に書き込まれます。
-p protocol 通信プロトコルを指定します。
-s server-name デフォルト (mfclisrv) 以外のサーバ名を示します。
-v mfserver のバージョン番号を表示します。

クライアントプログラムを起動するコマンドラインは次のようになります。

run program-name [config-filename]

各パラメータの説明は以下のとおりです。

program-name ユーザインターフェイスプログラム名を指定します。
config-filename 使用する構成ファイル名を指定します。

2.9 アプリケーションのデバッグ

Server Express の標準デバッグ機能を使用して、クライアントプログラムをデバッグできます。

サーバプログラムをアニメートする場合は、構成ファイルで srvanim=y というパラメータ設定を行います (詳細については、 『構成ファイルのパラメータ』の項を参照してください)。

mfserver を起動した端末で Animator が実行されるため、mfserver がフォアグラウンドモードで実行されていなければなりません。 mfserver はバックグラウンドプロセスとして実行されることが望ましいため、これは問題です。 さらに、同時に mfserver からアニメーションを表示できるのは、一人のユーザのみであるという制約があります。 このような問題はクロスセッションデバッグを使用することによって避けられます。 詳細については、『デバッギングハンドブック』の『Animator の起動』の章の『クロスセッションデバッグ』の項を参照してください。

2.10 サーバの管理

CCI 通信 API を使用している場合は、mfcsmgr プログラムを実行して必要なパラメータと値を渡すことで、サーバの動作を一時的に変更できます。 指定できるパラメータはロケーションとアクションの 2 つのグループに分けられます。 ロケーショングループのパラメータで、ターゲットサーバを指定することができ、m、p、または s を設定できます。 アクティブグループのパラメータは、ターゲットサーバの動作に関するもので、a、c、o、r、または t を設定できます。 パラメータの中には o、r、t のように単独でのみ指定できるものがあります。

2.10.1 mfserver のシャットダウン

生成されたサーバは、クライアントが正常終了するときにクライアントプログラムによって終了されます。 CCI 通信 API を使用している場合は、最初のサーバプログラムがクライアントの終了時に終了されないため、手動でシャットダウンして、最初のサーバを終了させなければなりません。

2.10.2 権限パスワードの管理

CCI 通信 API を使用する場合は、アクティブなサーバを誤ってシャットダウンしてしまうことがないように各サーバにパスワードを割り当てることができます。 こうすると、サーバを終了したりサーバのパラメータを変更するときにパスワードが要求されます。

2.10.3 最大クライアント数の設定

CCI 通信 API を使用する場合にサーバがサポートできる最高クライアント数は、デフォルトでは 30 ですが、mfcsmgr を使用してより小さい値を設定できます。 そこで指定した値はパスワードファイルに保存され、サーバが起動するたびに読み込まれます。

2.10.4 サーバオーバーライドの実行

サーバがサポートしているオーバーライドオプションは、server-name、protocol、machine-name です。 サーバは構成ファイルを使用しないため、オーバーライドパラメータは mfcsmgr プログラムで指定します。 このプログラムを実行すると、指定されたオーバーライドを処理するためにクライアントとサーバ間で短いやり取りが起こります。

mfcsmgr のコマンドライン構文を次に示します。

UNIX

cobrun mfcsmgr [-a] [-c nnnnn] [-d] [-i filename] [- m machine-name]
               [-p protocol] [-s server-name] [-o m, machine-name]
               [-o p, protocol] [-o r] [-o s, server-name] [-t] [-v]

ここで、パラメータの内容は以下のとおりです。

-a ターゲットサーバの権限パスワードを変更します。
-c,nnnnn サーバがサポート可能なクライアント数を設定します。
-d クライアントの終了時に、ローカルのオーバーライドファイル (mfcsovrd.cfg) を削除します。
-i filename クライアントの終了時に、指定のファイルをクライアントのローカルディレクトリにインストールします。
-m machine-name ターゲットサーバを実行しているマシン名を指定します。 これは、複数のプラットフォームに同名のサーバが存在する場合に必要です。
-p protocol 使用する通信プロトコルとして、TCP/IP (CCITC32)、NetBEUI (CCINB32)、Novell IPX (CCIIX32)、動的データ交換 (CCIDE32) のいずれかを指定します。
-s server-name デフォルト (mfclisrv) 以外のサーバ名を指定します。
-o m,machine-name オーバーライドを実行するマシン名を指定します。
-o p,protocol オーバーライドサーバへのアクセスにはこのプロトコルを使用します。
-o r 現在アクティブなオーバーライドをリセットします。 元の設定に戻します。
-o s,server-name ターゲットサーバへの接続を、このサーバへの接続でオーバーライドします。
-t サーバを終了します。
-v mfserver のバージョン番号を表示します。

上記のフラグは - または / を付けて指定します。 大文字と小文字は区別されません。

2.11 高度なトピック

2.11.1 システムログファイル

mfclient と mfserver はエラーとメッセージのログを維持管理します。 ログエントリはすべて日付と時刻を付けて mfclisrv.log ファイルに保存されます。 このログファイルはプログラムを起動したディレクトリ、または MFLOGDIR 環境変数で指定したディレクトリにあります。 ログファイルをときどきチェックして、システムが正常に機能していることを確認してください。

2.11.2 監査ログの作成

クライアントがサーバに接続したときの日付と時刻を記録した監査ログを作成できます。 この機能を有効にするには、構成ファイルで useraudit=y を設定します。

監査ログの情報は前項で説明したシステムログファイルに記録されます。

2.11.3 構成ファイルの各エントリのオーバーライド

構成ファイルを読み込んだ後は、クライアント/サーバ結合が、各クライアントの起動処理中に、mfcsovrd.cfg というオーバーライドファイルを探します。 このファイルが見つかると、その内容を調べ、構成ファイルに従って設定されているパラメータをオーバーライドします。 オーバーライドファイルの形式は通常の構成ファイルとほぼ同じですが、override-cntrl というエントリが 1 つだけ追加されています。 このエントリにより、オーバーライドの対象を、サーバ名とタグ名のどちらで指定するかが指示されます。 ここにサーバ名を指定すると、そのサーバを使用するクライアントすべてのパラメータが、オーバーライドファイルの内容に従って変更されます。 タグ名を指定すると、そのタグ名を使用するクライアントのパラメータのみがオーバーライドされます。

このようなクライアントオーバーライド機能を使用するのは、たとえばサーバが使用不可能になったため、アプリケーションを別のマシン上で実行しなければならない場合です。 個々の構成ファイルを変更する方法もありますが、オーバーライドファイルを使用すれば、1 つのファイルを使用するだけですべてのアプリケーションの接続先を変更できます。

このオーバーライド機能はサーバでも使用できますが、そのためには、サーバマシンが起動され、稼動している必要があります。 この場合もサーバ名またはタグ名にオーバーライドできます。

オーバーライドファイルが見つかると、そのことがログファイルに記録されます。 同時にオーバーライドの対象となるパラメータもすべて記録されます。

オーバーライド機能を使用して、クライアントの接続先サーバを変更する例を次に示します。

[override-cntrl]
override=servername
[oldserver]
servername=newserver

上の例では、[override-cntrl] セクションでオーバーライドの対象とするサーバ名を指定 (override=servername) し、そのサーバ名 ([oldserver]) の下に新たな接続先サーバ名を指定 (servername=newserver) しています。 この場合は、ログファイルには次のように記録されます。

20/04/1998 11:01:02 Using Local File: mfcsovrd.cfg
Overriding Entries for Servername:OLDSERVER
servername=newserver
20/04/1998 11:01:02 Override Completed:

特定のタグを使用するすべてのクライアントのサーバをオーバーライドする例を次に示します。

[override-cntrl]
override=tagname
[mf-clisrv]
servername=newserv

上記の例では、[override-cntrl] セクションでオーバーライドの対象とするタグ名を指定 (override=tagname) し、そのタグ名 ([mf-clisrv]) の下にオーバーライドするパラメータ (この場合はサーバ名) を指定 (servername=newserv) しています。 この場合は、ログファイルに次のように記録されます。

20/04/1998 11:04:02 Using Local File: mfcsovrd.cfg
Overriding Entries for Tagname:MF-CLISRV
servername=newserv
20/04/1998 11:04:02 Override Completed:

2.11.4 ダイアログシステム「コールアウト」の使用

クライアント/サーバ結合でダイアログシステムのコールアウト機能を使用するときには、クライアントプログラムを多少変更し、接続の両端でコールアウト要求に応えるプログラムを作成する必要があります。 次のように、ユーザクライアントプログラムに 2 つの行と 1 つの指令を追加する必要があります。

プログラムの先頭に次の指令を追加します。

$set ans85 linkcount(128)

WORKING-STORAGE 節に次の行を追加します。:

 01  lnk-param-block-addr         POINTER EXTERNAL.

PROCEDURE DIVISION に次の行を追加します。

SET lnk-param-block-addr TO ADDRESS OF lnk-param-block

これは、ダイアログシステムがコールアウト要求を処理するために呼び出すプログラムが、ユーザクライアントプログラムと同じパラメータエントリにアクセスできるようにするためです。 これは、外部データポインタの使用によって実現されます。 コールアウトプログラムは次の例のコードのようなコードでなければなりません。

      $set ans85
       WORKING-STORAGE SECTION. ......

       01  lnk-param-block-addr         POINTER EXTERNAL.

       LINKAGE SECTION. ......

       COPY "mfclisrv.cpy".

       01  user-data-block              PIC X(30).

       PROCEDURE DIVISION.
       Controlling SECTION.
           SET ADDRESS OF lnk-param-block TO lnk-param-block-addr
           SET ADDRESS OF user-data-block TO lnk-ublock-ptr
           SET ds-callout TO TRUE
           MOVE "callosrv" TO user-data-block
           CALL lnk-client USING lnk-param-block
           EXIT PROGRAM.

サーバでコールアウト要求を受け取るプログラムの名前はユーザデータブロックに設定されます。 このプログラムの名前が、ダイアログシステムに使用されているコントロールブロックのいずれかのデータからのみ決定可能な場合は、次のプログラムのようなコーディングを使用して、このブロックをアクセス可能にする必要があります。

      $set ans85 linkcount(128)             
       WORKING-STORAGE SECTION. ......

       01  lnk-param-block-addr         POINTER EXTERNAL.

       LINKAGE SECTION. ......

       COPY "mfclisrv.cpy".

       01  user-data-block              PIC X(30).

           COPY "DS-CNTRL.MF".
           COPY "CUSTOMER.CPB".

       PROCEDURE DIVISION USING ds-control-block customer-data-block.
       Controlling SECTION.
           SET ADDRESS OF lnk-param-block TO lnk-param-block-addr
           SET ADDRESS OF user-data-block TO lnk-ublock-ptr
           SET ds-callout TO TRUE
           EVALUATE cust-callout-flg
              WHEN 1
                 MOVE "callprog1" TO user-data-block
              WHEN 2
                 MOVE "callprog2" TO user-data-block
           END-EVALUATE
           CALL lnk-client USING lnk-param-block
           EXIT PROGRAM.

サーバ側のコールアウトプログラムは次のようになります。

      $set ans85

       LINKAGE SECTION. ......

           COPY "DS-CNTRL.MF".
           COPY "CUSTOMER.CPB".

       PROCEDURE DIVISION USING ds-control-block customer-data-block.
       Controlling SECTION.
           ............ Code to
               ........... process callout
                  ............ request....
           EXIT PROGRAM.

2.11.5 既存の非ダイアログシステムプログラムのサーバモジュールとしての使用

クライアント/サーバ結合は、既存のダイアログシステムプログラムをユーザサーバモジュールとして使用することができ、srvtier=<your program> の場合に使用されます (詳細については、『構成ファイルのパラメータ』の項を参照してください)。

この場合は、mfserver が、ダイアログシステム API に準拠するパラメータのセットで呼び出されることが予想されます。 このように使用されると、ユーザプログラムは mfserver を呼び出してクライアントにデータを転送して、サーバ上の制御要素になります。 ダイアログシステムが使用する API に準拠している限り、その他のプログラムでも同じ機能を行うことができます。

クライアント/サーバ結合は通常、API の最初のパラメータ内で特定の項目を調べ、見つかった値に基いて特定の機能を実行します。 この動作が行われないようにするには、これらの項目を HIGH-VALUES に設定します。 次のパラメータで mfserver を呼び出してください。

これらの項目のサイズは両方とも、アプリケーションの実行に使用する構成ファイルで定義してください。 デモプログラムと必要な構成ファイルの例を次に示します。

      $set ans85
       WORKING-STORAGE SECTION. ......
       01  w-prog-id                pic x(30) value
           '"@(#) nodscli.cbl 1.1.1"'.

       copy "mfclisrv.cpy".

       01  ws-scrn-pos.
           03  ws-line              pic 99 value 07.
           03  ws-col               pic 99 value 1.

       LINKAGE SECTION. ......
       01  ds-control-block         pic x(6).

       01  NODS-DATA-BLOCK.
           03  NODS-PARAM           PIC 99.
           03  NODS-DATA            PIC X(120).

       procedure division.
       000-control section.
       * サーバとの最初のコンタクトを行います。
          call lnk-client using lnk-param-block
          if start-connection
             set address of ds-control-block to lnk-cblock-ptr
             set address of nods-data-block to lnk-dblock-ptr
          end-if

          display spaces at 0101
                "Starting Test Session" at 0510
          perform 010-run-test until nods-param = 10
      * 切断要求を送信します。
          set client-ending to true
          call lnk-client using lnk-param-block
          display "Test Session Completed" at 2010
          stop run.

       010-run-test section.
       * サーバからデータを取得します。
          call lnk-client using lnk-param-block
          add 1 to ws-line
          display nods-data(1:80) at ws-scrn-pos
          exit. 
      $set ans85
       working-storage section.
       01  w-prog-id                pic x(30) value
           '"@(#) nodssrv.cbl 1.1.1"'.

       01  dummy-cntrl-block         pic x(6) value high-values.

       01  NODS-DATA-BLOCK.
           03  NODS-PARAM           PIC 99.
           03  NODS-DATA            PIC X(120).

           copy "mfclisrv.cpy".

       01  ws-sub                    pic 99.
       01  ws-table.
          03  ws-letts               pic x occurs 10.

       procedure division.
       controlling section.

          move "ABCDEFGHIJ" to ws-table
          move 0 to nods-param
      *
      * クライアントとのコンタクトを確立します。
       * クライアントのタイムアウトとサーバ探索のための
      * ネットワークの「ポーリング」を中止するために、これは
      * できるだけ早く行う必要があります。
      *
          call "mfserver" using dummy-cntrl-block nods-data-block
      *
      * クライアントがシャットダウン要求を出した後で mfserver を
      * 呼び出さないことを保証する必要があります。 このシステムでは、
      * nods-param = 10 と指定すると、クライアントがシャットダウン
      * 要求を出して、このプログラムのくり返し実行を終了します。
      *
          perform varying nods-param from 1 by 1
             until nods-param > 10
                perform varying ws-sub from 1 by 1
                  until ws-sub > 80
                     move ws-letts(nods-param)
                       to nods-data(ws-sub:1)
                end-perform
                call "mfserver" using dummy-cntrl-block
                                      nods-data-block
          end-perform
          stop run.  
*********************************************************
 * Micro Focus - クライアント/サーバモジュール構成ファイル *
*********************************************************

[mf-clisrv]
srvtier=nodssrv
cblksize=6
dblksize=122
servername=nods

コンパイルされ、実行されると、サーバプログラムは、サーバでない場合もクライアントにデータを渡しつづけます。これは、プログラムが呼び出される側のプログラムであり、クライアントにデータを渡す必要が生じるたびに EXIT PROGRAM を実行しなければならない場合です。既存のプログラムが、必要なダイアログシステム API に従っていない場合は、以下のような小さな橋渡しのプログラムを作成すれば、前述の方法を用いることができます。

       WORKING-STORAGE SECTION.

       01  dummy-control-block          PIC X(6) VALUE HIGH-VALUES.
       01  grouped-data-block.
          03  ws-param-1                PIC X(50).
          03  ws-param-2                PIC X(120).
          03  ws-param-3                PIC X(18).
          03  ws-param-4                PIC X(48).

       LINKAGE SECTION. ......

       01  lnk-param-1                  PIC X(50).
       01  lnk-param-2                  PIC X(120).
       01  lnk-param-3                  PIC X(18).
       01  lnk-param-4                  PIC X(48).

       PROCEDURE DIVISION USING
               lnk-param-1 lnk-param-2
               lnk-param-3 lnk-param-4.

           MOVE lnk-param-1 TO ws-param-1
           MOVE lnk-param-2 TO ws-param-2
           MOVE lnk-param-3 TO ws-param-3
           MOVE lnk-param-4 TO ws-param-4

           CALL "mfserver" USING dummy-control-block
                                 grouped-data-block

           MOVE ws-param-1 TO lnk-param-1
           MOVE ws-param-2 TO lnk-param-2
           MOVE ws-param-3 TO lnk-param-3
           MOVE ws-param-4 TO lnk-param-4

           EXIT PROGRAM.

2.11.6 インライン構成機能の利用

クライアント/サーバ結合の強力な機能の 1 つとして、構成ファイルによる通信条件の制御があります。 ただし、エンドユーザが構成ファイルのエントリを変更してアプリケーションの動作を変更できるということが望ましくない場合もあります。

このような場合は、構成パラメータをすべてクライアントプログラム内で指定することができます。こうすると、構成ファイルがまったく使用されないため、エンドユーザはアプリケーションの動作を変更できません。 その場合も、ユーザが複雑な通信コードを書く必要はなく、目的のパラメータをクライアントプログラム内で簡単に指定できます。 パラメータの指定は、load-inline-cfg と end-inline-cfg の 2 つの設定の間で行います。 パラメータエントリは 1 つずつ lnk-error-msg にロードし、mfclient を呼び出して処理します。 パラメータの設定は実際の処理ループが開始される前に行わなければなりません。 インライン設定の例を次に示します。

       WORKING-STORAGE SECTION.

       COPY "mfclisrv.cpy".

       LINKAGE SECTION. ......

       01 INPUT-REC               PIC X(32767)

       PROCEDURE DIVISION.

       Client-Control SECTION.

          SET load-inline-cfg TO TRUE
          MOVE "clierrprog=same" TO lnk-error-msg
          CALL lnk-client USING lnk-param-block

          MOVE "srverrprog=same" TO lnk-error-msg
          CALL lnk-client USING lnk-param-block

          MOVE "servername=mainserv" TO lnk-error-msg
          CALL lnk-client USING lnk-param-block

          SET end-inline-cfg TO TRUE

       *  メインループはサーバとの接続が終わるまで
      *  繰り返します。

          PERFORM UNTIL End-Connection

      *  'lnk-client' holds the name 'mfclient'
       *  初回は、システムを初期化してサーバとのコンタクトを
      *  確立します。

             CALL lnk-client USING lnk-param-block

             EVALUATE TRUE

                WHEN start-connection

           ........ プログラムの残りは、この
           ........... ポイントから先は標準です ............

外部の構成ファイルとインライン設定の両方を使用することもできます。 そうすると、エンドユーザも必要に応じてシステムをある程度制御でき、クライアントプログラムは最終的な制御権を保持しているという両方の利点が得られます。 構成ファイルが先に処理され、次にインライン設定が処理されます。 したがって、構成ファイルで不適切なパラメータ設定が行われても、インライン設定で上書きできます。 この方法を使用する処理は、use-combined-cfg の設定により開始され、以前と同様に、end-inline-cfg により完了されます。

       WORKING-STORAGE SECTION.

       COPY "mfclisrv.cpy".

       LINKAGE SECTION. ......

       01 INPUT-REC               PIC X(32767)

       PROCEDURE DIVISION.

       Client-Control SECTION.

          SET use-combined-cfg TO TRUE
          CALL lnk-client USING lnk-param-block

          SET load-inline-cfg TO TRUE
          MOVE "servername=mainserv" TO lnk-error-msg
          CALL lnk-client USING lnk-param-block

          SET end-inline-cfg TO TRUE

       *  メインループはサーバとの接続が終わるまで
      *  繰り返します。

          PERFORM UNTIL End-Connection

      *  'lnk-client' は 'mfclient' という名前を保持します。
       *  初回は、システムを初期化してサーバとのコンタクトを
      *  確立します。

             CALL lnk-client USING lnk-param-block

             EVALUATE TRUE
                WHEN start-connection

           ........ プログラムの残りは、この
           ........... ........... ポイントから先は標準です  ............

2.11.7 縮小データ転送 (RDT) 機能

クライアント/サーバ結合では、構成ファイルで指定された大きさのデータブロックを格納できるバッファが割り当てられます。 クライアントプログラムとサーバプログラムの間で制御が移動するたびに、このサイズのバッファが送受信されます。 そのため、ネットワークに不必要に大きな負荷がかかる場合があります。 たとえば、22K のレコード領域を持つ 24K のバッファが割り当てられた場合を考えてみましょう。 ファイルが 10 バイトのレコードキーを持つ場合は、クライアントとサーバの間でキーをやり取りするには 10 バイトのみが必要ですが、24K のバッファが使用されます。 実際にはデータサイズより 1 〜 2 バイト余分に必要ですが、バッファ全体よりははるかに小さいサイズです。 そこで、ネットワーク上を転送されるデータサイズを必要な大きさに限定するための縮小データ転送 (RDT) 機能が提供されています。

RDT 機能を使用するには、制御フラグ (use-rdt) と次の 3 つのパラメータが必要です。

lnk-usr-fcode ユーザ機能インジケータ。受信側にこのデータの処理方法を示します。
lnk-usr-retcode

バッファ先頭ポイント。 4 つのデータ領域の中から転送開始ポイントを指定します。 有効な値は、1=cblock、2=dblock、3=eblk、および 4=ublk です。 11 〜 14 も同じアドレス領域を示しますが、この場合はデータが圧縮されていることを示します。 データ圧縮を使用するには構成ファイルで指定しておく必要があり、指定しない場合は、デフォルト設定 (圧縮なし) が使用されます。 0 を指定するとデータ転送が行われません。 0 で NULL 操作を表せるので、IF 文を多用してさまざまな判定をする必要がなくコードがシンプルになります。 NULL 操作は、ローカルに完結する処理の場合にネットワークトラフィックをゼロにできるため、ネットワークの負荷軽減に大変有効です。

lnk-data-length 転送するデータサイズ。

インデックスファイルに対してレコード (顧客詳細情報) の追加、削除、読み込みを行うアプリケーションを例にとると、このインデックスファイルのレコードキーは顧客コードです。 このアプリケーションには、顧客レコードの操作のみでなく、顧客情報をインターフェイス画面から消してしまうオプションもあります。 このサンプルアプリケーションのコードの一部を次に示します。user-data-block 領域には、6 バイトのレコードキーが入ります。 クライアントとサーバの間で顧客詳細情報レコードをやり取りするために使用するデータブロック領域 (dblksize) は、 customer-data-block です。customer-c-code は、 customer-data-block 内の 6 バイトのデータ項目で、ここにレコードキーが保管されます。

クライアント側のコードは次のようになります。

             EVALUATE TRUE

                WHEN customer-load-flg-true

 *---        ユーザがインターフェイスで顧客コードを入力し LOAD オプションを選択して、
*---        そのコードに関係する顧客の詳細情報を
*---        読み込んで表示します。

                   MOVE customer-c-code TO user-data-block
                   SET use-rdt TO TRUE
                   MOVE 1 TO lnk-usr-fcode
                   MOVE 4 TO lnk-usr-retcode
                   MOVE 6 TO lnk-data-length

                WHEN customer-del-flg-true

 *---        ユーザが顧客コードを入力して DELETE オプションを選択して、
*---        ファイルから顧客レコードを削除しました。

                   MOVE customer-c-code TO user-data-block
                   SET use-rdt TO TRUE
                   MOVE 2 TO lnk-usr-fcode
                   MOVE 4 TO lnk-usr-retcode
                   MOVE 6 TO lnk-data-length
                   initialize customer-data-block

                WHEN customer-clr-flg-true

 *---        ユーザが CLEAR オプションを選択して、現在の
*---        顧客詳細情報を画面からクリアしました。

                   SET use-rdt TO TRUE
                   MOVE 0 TO lnk-usr-retcode
                   initialize customer-data-block
                   PERFORM Set-Up-For-Refresh-Screen
             END-EVALUATE  

CLEAR オプションが選択された場合の画面をクリアは、ローカルに完結する操作であるため、サーバに接続する必要がなく、NULL 操作を使用します。以下のサーバプログラムの一部は、 RDT 機能の処理に必要なコードを示しています。 クライアント/サーバ結合では、 send-via-rdt フラグがセットされ、lnk-usr-fcode をチェックすることができます。 サーバ側のコードは次のようになります。

             WHEN send-via-rdt
                EVALUATE lnk-usr-fcode
                   WHEN 1

 *--- LOAD 機能の場合、サーバプログラムは RDT 機能ではなく
*--- データ領域 customer-data-block を使用して、
*--- データファイルから顧客詳細情報を読み込んで、そのデータを
 *--- クライアントに返送します。  RDT フラグが設定されていないと、クライアント/サーバ
*--- 結合は常に完全なデータ領域 (構成ファイルの
 *--- dblksize で定義されている) をクライアントとサーバの
*--- の間で受け渡しします。
                      MOVE user-data-block TO customer-c-code
                      SET customer-load-flg-true TO TRUE
                      PERFORM ....... rest of program.......
                   WHEN 2
                      MOVE user-data-block TO customer-c-code
                      SET customer-del-flg-true TO TRUE
                      PERFORM ....... rest of program.......
                END-EVALUATE

Csbind デモ用アプリケーションは RDT 機能を使用しています。

2.11.8 サーバの制御によるファイル管理機能

クライアント/サーバソリューションに付随する問題の 1 つとして、クライアント数の増加に伴うクライアントプログラムなどの、更新の煩雑さがあります。

オーバーライド機能 ( 『構成ファイルの各エントリのオーバーライド』の項を参照) を使用すると、各クライアントの構成ファイルを個別に書き換えずに、メンテナンス中のサーバから別のサーバに変更することができます。 オーバーライドはローカルでもリモートでも実行できますが、各クライアントのローカルのオーバーライドファイルのインストールまたは削除に時間がかかる場合があります。

mfcsmgr プログラムを使用すると、-i または -d オプションを使用して、クライアントにオーバーライドファイルをインストールまたは削除できます (詳しくは、 『サーバの管理』の項を参照してください)。 インストールまたは削除は、クライアントプログラムの終了時に行われます。

実際は、mfcsmgr プログラムで -i オプションを使用すると、オーバーライドファイルのみでなく、任意のファイルをクライアントシステム (クライアントのローカルディレクトリ) にインストールできます。 つまり、この方法で新たなスクリーンセットや最新プログラムファイルをインストールすれば、管理センターから各クライアントに更新データを配布できます。 セキュリティ上の理由から削除オプションはそれほど強化されておらず、削除できるのはオーバーライドファイル (mfcsovrd.cfg) に限られます。

-i オプションを使用してインストールするファイルはサーバ上になければなりません。 目的のファイルが mfserver を起動したディレクトリ内にある場合は、ファイル名だけを指定します。 別のディレクトリにある場合は、完全パス名で指定する必要があります。たとえば、 /u/live/update/newprog.int、d:\testprog.int、$LIVE/newtest.int はどれも有効ですが、$newfile という指定は無効です。

この機能を使用するためにプログラムを変更する必要はありません。 クライアントにはファイルが転送されたことを示すメッセージが表示され、システムログファイルに詳しい情報が書き込まれます。

2.12 クライアント/サーバ結合における制限事項

クライアント/サーバ結合には制限事項はほとんどありませんが、次の点に注意してください。


Copyright © 2001 Micro Focus. All Rights Reserved.
本書、ならびに使用されている固有の商標と商品名は国際法で保護されています。

前ページへはじめに CCI次ページへ