テキスト UI プログラムおよび UI プログラムにおけるセグメンテーション

セグメンテーションは、EGL converse ステートメント、およびシステム・リソースの解放に関係しています。 ここで言う「converse」とは、プログラムとユーザーの間の会話を指しています。 converse ステートメントでは、ユーザーへ情報を表示し、応答を待機してから、次の命令の処理を再開します。

非セグメント化 プログラムは、ユーザー応答を待っている間、メモリー内に留まっています。 セグメント化 プログラムは、converse の後に終了し、ユーザーが応答した後に再ロードされます (ただし、プログラムが converse の後にメッセージ・キューからの読み取りを再開する IMS™ 環境の場合を除きます)。 セグメンテーションを行う背景には、ユーザーが即時に応答しない場合にシステム・リソース (メモリーやロックされたデータベースなど) を解放するという意図があります。

一般に、CICS® や IMS などのトランザクション環境では、セグメンテーションが中心的な課題になります。 詳しくは、CICS または IMS におけるセグメント化プログラムの動作を参照してください。 EGL の場合、これらの実装に関する問題をユーザーが意識する必要はありません。 些少な例外はいくつかありますが、EGL では、 プログラムが絶えずメモリー内に常駐するものとしてコードを作成してください。 後は EGL が、(必要に応じて) 以下のアクションを実行する追加コードを含む、各環境に適したコマンドを生成します。

UI プログラム以外の EGL 生成 Java™ プログラムは常に非セグメント化プログラムであり、converse の後メモリー内に常駐しています。 ただし、Java と COBOL の両方でプログラムを生成する場合、プログラムをセグメント化するように宣言したり (プログラムの segmented プロパティーを YES に設定します)、converseVar.commitOnConverse システム変数を設定したりしても、問題はありません。 この場合、データベース変更のコミットや converse 後のデータベース・ロックの解放など、Java 環境でセグメント化プログラムの一部の動作が再現されます。

呼び出し先プログラムはセグメント化可能です。このことを EGL に通知するには、 呼び出しチェーンに含まれるすべてのプログラムについて segmented プロパティーに YES を設定する必要があります。

非セグメント化プログラムの方がより簡単にコーディングできます。 例えば、converse の後で SQL 行に対するロックを再獲得する必要がありません。 欠点としては、ユーザーの思考時間中も SQL 行が保持されるため、このような振る舞いが、同じ SQL 行にアクセスする必要がある他のユーザーにとってパフォーマンス上の問題となる点が挙げられます。

非セグメント化プログラムで converse の前にリソースを解放したり更新したりするための手法として、以下の 2 つがあります。

互換性

表 1. セグメント化プログラムの互換性に関する考慮事項
プラットフォーム 問題
IMS または CICS for z/OS®
IMS または CICS for z/OS でセグメント化プログラムを使用することの利点は、以下のとおりです。
  • EGL を使用しない場合、セグメント化プログラムの開発者は、呼び出しごとにプログラムの状態を分析するコードを作成します。 EGL を使用した場合、開発者は、ユーザーがメモリー内に常駐したプログラムと継続的に会話を行う場合と同様のコードを作成するため、アプリケーション・ロジックがより単純になります。
  • メモリーなどの限定リソースがより効率的に使用されるようになり、より多くの端末が EGL プログラムを同時に実行できます。

IMS または CICS for z/OS で非セグメント化プログラムを使用することの利点は、プログラムの状態を保存してリストアすることがないため、セグメント化プログラムの場合よりも各ユーザーに対する応答時間が短くなることです。

ユーザーが最初に呼び出した際、EGL セグメント化プログラムは以下のアクションを実行します。
  1. その呼び出しがそのユーザーの最初の呼び出しであるかどうかの判別など、初期化タスクを実行します。
  2. プログラム・ロジックの先頭に制御権を渡します。
  3. 以下のようにして、各 EGL converse ステートメントを実装します。
    1. 作業データベースを使用して、プログラムの状態 (ユーザーとプログラムの間の会話の現行状況を示すユーザー固有の値のセット) を保存します。 すべてのレコードおよびフォームのデータが含まれます。 該当する行からプログラムを実行する際に必要になる情報も含まれます。
    2. データベースおよびリカバリー可能リソースをコミットします。
    3. すべてのロックを解放します。
    4. データベースの open ステートメントに hold オプションがある場合でも、データベース位置は保存しません。
    5. フォームと会話します。
    6. 終了します。
IMS または CICS for z/OS (続き)
ユーザーがアクション (例えば、ビジネス・データの更新など) を実行すると、ランタイム・システムはプログラムをメモリーに戻します。 プログラムは再度先頭から開始されます。 セグメント化プログラムは、自動的に以下のアクションを実行します。
  1. その呼び出しがこのユーザーの処理の続きであるかどうかの判別など、初期化タスクを実行します。
  2. このプログラムでの converse ステートメントの実行対象となった情報や、すべてのフォームおよびレコードのデータなどを含め、プログラムの状態をリストアします。
  3. ユーザーの入力を読み取り、必要な編集を実行します。
  4. 次の converse ステートメントを実装する際に以下のサイクルを続けます。
    1. プログラムの状態を保存します。
    2. データベースおよびリカバリー可能リソースをコミットします。
    3. すべてのロックを解放します。
    4. データベースの open ステートメントに hold オプションがある場合でも、データベース位置は保存しません。
    5. フォームまたは VGUI レコードと会話します。
    6. 終了します。

フィードバック