テキスト UI プログラムおよび UI プログラムにおけるセグメンテーション
セグメンテーションは、EGL converse ステートメント、およびシステム・リソースの解放に関係しています。 ここで言う「converse」とは、プログラムとユーザーの間の会話を指しています。 converse ステートメントでは、ユーザーへ情報を表示し、応答を待機してから、次の命令の処理を再開します。
非セグメント化 プログラムは、ユーザー応答を待っている間、メモリー内に留まっています。 セグメント化 プログラムは、converse の後に終了し、ユーザーが応答した後に再ロードされます (ただし、プログラムが converse の後にメッセージ・キューからの読み取りを再開する IMS™ 環境の場合を除きます)。 セグメンテーションを行う背景には、ユーザーが即時に応答しない場合にシステム・リソース (メモリーやロックされたデータベースなど) を解放するという意図があります。
- CICS や IMS などの環境でセグメント化プログラムを管理します。
- データベースの変更をコミットし、converse でのデータベース・ロックを解放します。
- converse の後で一部のシステム変数を更新します。
- メモリーなどのシステム・リソースを解放します。
- プログラムが使用しているデータに関する情報を保存し、converse の後でリストアします。
UI プログラム以外の EGL 生成 Java™ プログラムは常に非セグメント化プログラムであり、converse の後メモリー内に常駐しています。 ただし、Java と COBOL の両方でプログラムを生成する場合、プログラムをセグメント化するように宣言したり (プログラムの segmented プロパティーを YES に設定します)、converseVar.commitOnConverse システム変数を設定したりしても、問題はありません。 この場合、データベース変更のコミットや converse 後のデータベース・ロックの解放など、Java 環境でセグメント化プログラムの一部の動作が再現されます。
呼び出し先プログラムはセグメント化可能です。このことを EGL に通知するには、 呼び出しチェーンに含まれるすべてのプログラムについて segmented プロパティーに YES を設定する必要があります。
非セグメント化プログラムの方がより簡単にコーディングできます。 例えば、converse の後で SQL 行に対するロックを再獲得する必要がありません。 欠点としては、ユーザーの思考時間中も SQL 行が保持されるため、このような振る舞いが、同じ SQL 行にアクセスする必要がある他のユーザーにとってパフォーマンス上の問題となる点が挙げられます。
- converseVar.commitOnConverse システム変数を 1 に設定することができます。この場合、EGL は converse の前に以下のアクションを実行します。
- データベースおよび他のリカバリー可能リソースをコミットします。
- ロックを解放します。
- データベースの open ステートメントに hold オプションが含まれている場合を除き、ファイルおよびデータベースの位置を保存しません。 hold オプションは、COBOL プログラムの場合のみ使用できます。
converseVar.commitOnConverse の設定がシステム変数または EGL テーブルに影響することはありません。
- converse を処理する 2 つ目の手法は、テキスト UI プログラムの segmented プロパティーを YES
に設定することです。その場合は、開発時にそのプログラム・プロパティーを変更するか、実行時に
converseVar.segmentedMode システム変数を 1 に設定します。
この場合、EGL は converse の前に以下のアクションを実行します。
- データベースおよび他のリカバリー可能リソースをコミットします。
- ロックを解放します。
- データベースの open ステートメントに hold オプションが含まれている場合も含め、ファイルおよびデータベースの位置を保存しません。
- 単一ユーザーの EGL テーブルが更新され、それらがプログラムの開始時と同じ値になります。
- システム変数が更新され、それらがプログラムの開始時と同じ値になります (セグメントをまたいで値を保存した変数のサブセットは除きます)。
セグメント化プログラムの動作が、converseVar.commitOnConverse システム変数の値に影響されることはありません。
互換性
| プラットフォーム | 問題 |
|---|---|
| IMS または CICS for z/OS® | IMS または CICS for z/OS でセグメント化プログラムを使用することの利点は、以下のとおりです。
IMS または CICS for z/OS で非セグメント化プログラムを使用することの利点は、プログラムの状態を保存してリストアすることがないため、セグメント化プログラムの場合よりも各ユーザーに対する応答時間が短くなることです。 ユーザーが最初に呼び出した際、EGL セグメント化プログラムは以下のアクションを実行します。
|
| IMS または CICS for z/OS (続き) | ユーザーがアクション
(例えば、ビジネス・データの更新など) を実行すると、ランタイム・システムはプログラムをメモリーに戻します。
プログラムは再度先頭から開始されます。
セグメント化プログラムは、自動的に以下のアクションを実行します。
|