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