パラレル・ジョブ・マネージャー (PJM)
パラレル・ジョブ・マネージャー (PJM) は、適切に調整された独立したパラレル従属ジョブの集合体として実行されるトランザクション・バッチ・ジョブをサブミットし、管理するための機能およびフレームワークを提供します。
PJM の基本
- パラレル・ジョブ・マネージャーは、個々のシステム・アプリケーション内でなく、バッチ・コンテナー内にあります。
- 必要な xJCL ファイルは 1 つだけです。 xJCL は、最上位ジョブ xJCL の内容を従属ジョブ xJCL の内容と結合します。
- 別途データベースを作成する必要はありません。
- PJM はバッチ・コンテナーに含まれるため、PJM をインストールして構成する必要はありません。
- バッチ・アプリケーション内の PJM API は、ユーティリティー Java™ アーカイブ (JAR) としてパッケージ化します。共有ライブラリーは不要です。
- xd.spi.properties ファイルの内容は、xJCL の一部になっています。xd.spi.properties ファイルは不要です。
API の PJM 操作および呼び出し
以下の 2 つの図は、PJM アーキテクチャーと、パラレル・ジョブの順序を示しています。まず、xJCL がジョブ・スケジューラーにサブミットされます。 ジョブ・スケジューラーは、xJCL が参照するアプリケーションを実行するエンドポイントに xJCL をディスパッチします。バッチ・コンテナーは、xJCL 内のジョブの run プロパティーを検査して、ジョブがパラレルで実行する従属ジョブを持つかどうかを判別します。バッチ・コンテナーは、その実行を PJM サブコンポーネントに委任します。PJM は、パラメータライザー API を呼び出し、xJCL 内の情報を利用して、ジョブを従属ジョブに分割します。ここで PJM は LogicalTX 同期 API を呼び出して、論理トランザクションの先頭を示します。 PJM は従属ジョブ xJCL を生成し、従属ジョブをジョブ・スケジューラーにサブミットします。ジョブ・スケジューラーは従属ジョブをバッチ・コンテナー・エンドポイントにディスパッチして実行できるようにします。バッチ・コンテナーが従属ジョブを実行します。チェックポイントが取られると、従属ジョブ・コレクター API が呼び出されます。この API は、従属ジョブに関連する状態情報を収集します。このデータは、解釈するために従属ジョブ・アナライザー API に送られます。すべての従属ジョブが最終的な状態に達すると、同期 API の beforeCompletion および afterCompletion が呼び出されます。ジョブの戻りコードを計算するために、アナライザー API も呼び出されます。
論理トランザクションは、パラレル・ジョブの実行を測定する作業単位区分です。 そのライフサイクルは、パラレル・ジョブの従属ジョブを結合したライフサイクルに対応します。拡張メカニズムによって、アプリケーション管理のリソースをカスタマイズでき、コミットおよびロールバック目的でこの作業単位の有効範囲で制御できるようになります。
PJM アーキテクチャーおよびプログラミング・モデル
以下の図は、PJM アーキテクチャーを要約した図で、どこで API が呼び出されるかを示しています。

パラレル・ジョブの順序
以下の図は、パラレル・ジョブのイベントの順序を示しています。

PJM のジョブ管理
- すべての従属ジョブが終了状態で完了した、すなわち、正常終了した場合は、最上位ジョブは終了状態で完了します。
- いずれかの従属ジョブが再始動可能状態で完了し、失敗状態で終了した従属ジョブがない場合は、最上位ジョブは再始動可能状態で完了します。
- いずれかの従属ジョブが失敗状態で完了した場合は、最上位ジョブは失敗状態で完了します。
- 最上位ジョブおよび従属ジョブが再始動可能な状態になっている場合、最上位ジョブのみを再始動します。いずれかの従属ジョブが手動で再始動された場合、最上位ジョブは論理トランザクションを正しく処理しません。