マルチユーザー アプリケーションの作成

PC またはサーバーで動作する最新のアプリケーションは、マルチユーザー環境での複数のユーザーによるユーザー間のセッションの同時実行など、複数のインスタンスの並列実行に対応する必要があります。

多くの COBOL アプリケーションは伝統的にシングル ユーザー プログラムであり、それぞれ独立した単一のセッションとして動作するため、マルチユーザー環境での動作には対応していません。同じアプリケーションのインスタンスを複数同時に実行しようとした場合、同じリソース セットが複数のユーザーによって使用されることになるため、ファイル ロック、メモリ アイソレーション障害などの問題が発生する可能性があります。

コードを書き直せばこの問題を修正できますが、大幅なコードの変更が必要です。

Micro Focus Visual COBOL は、同じプロセスに共存できる実行単位と呼ばれるコンストラクトによって、この問題を解決します。実行単位とは、同じアドレス スペース、ロック テーブル、および OpenESQL 接続を共有する 1 つ以上のプログラムの集合です。ランタイム サービス タイプ RunUnit を使用することで、同じプロセスで複数の実行単位を作成できます。その実行単位はそれぞれ隔離されます。

1 つの実行単位内の COBOL プログラムは通常、他の実行単位内のプログラムのメモリにはアクセスしません。それらは隔離されています。また、ファイル ロックは実行単位ごとに適用されます。1 つの実行単位内のプログラムがファイル ロックを適用した場合、同じプロセス中の他の実行単位内のファイル処理中のプログラムからアクセスできなくなります。

実行単位は、ランタイム アセンブリ Micro Focus Runtime (Interop RuntimeServices) (プロジェクトでは MicroFocus.COBOL.RuntimeServices への参照となる) (.NET 用) およびランタイム クラス com.microfocus.cobol.runtimeservices.RunUnit (JVM COBOL 内) によって指定されます。

JVM COBOL では、サーブレット API HttpSession オブジェクトのコンテキストで実行単位のライフ サイクルを処理するクラス com.microfocus.cobol.runtimeservices.servlet.ServletRunUnitManager が存在します。
  1. 必要な出力ファイルを作成するために呼び出す COBOL プログラムをコンパイルします。
  2. 専用の実行単位内で COBOL プログラムを呼び出します。

    これを行うには、呼び出し元のプログラムで実行単位を 1 つ作成して、そのプログラムを含む COBOL 型のインスタンスを 1 つ作成します。これにより、プログラムのインスタンスをその新しい実行単位内で起動できます。

  3. Micro Focus Runtime (Interop RuntimeServices) アセンブリ (Visual Studio 内) への参照の追加または com.microfocus.cobol.runtimeservices.RunUnit クラス (Eclipse 内) のインポートによって、複数の実行単位のランタイム サポートを使用できるようにします。

既存の手続き型 COBOL を変更する必要はありません。

実行単位と SQL

EXEC SQL 文を使用するマネージ COBOL コード (プログラム、クラス、列挙、または ValueType を含む) はマネージ RunUnit で使用する必要がありますが、SQL Server の制御下で SQLCLR ストアド プロシージャまたはタイプとして実行される .NET コードは例外です。このようなコードはマネージ RunUnit で自動的に実行されるため、アプリケーションを変更する必要がありません。

実行されているコードをマルチユーザー環境またはスレッド プール環境で実行する必要がある場合も、マネージ RunUnit の使用が推奨されますが、スレッド セーフになるように元々コーディングされているコードについては、この限りではありません。