Show Table of Contents
10.3. ジョブエグゼキューター
ジョブエクゼキュータは、 プロセス実行を非同期に再開するコンポーネントです。 非同期メッセージシステムを介してコマンドメッセージが到着するまで待機し、 実行します。非同期続行に使用される 2 つのジョブは
ExecuteNodeJob と ExecuteActionJob です。
これらのジョブメッセージは、 プロセス実行により生成されます。 プロセス実行中に、 非同期で実行する必要がある各ノードまたはアクションに対して
Job (POJO) が MessageService へ送信されます。 メッセージサービスは JbpmContext と関連付けられ、 送信する必要があるすべてのメッセージを収集します。
メッセージは
JbpmContext.close() の一部として送信されます。 このメソッドは関連付けられたすべてのサービスに対して close() 呼び出しをカスケード処理します。 実際のサービスは jbpm.cfg.xml で設定できます。 サービスの 1 つ DbMessageService はデフォルトで設定され、 新しいジョブメッセージが利用可能であることをジョブエクゼキュータに通知します。
グラフ実行メカニズムは
MessageServiceFactory インターフェースと MessageService インターフェースを使用してメッセージを送信します。 これにより非同期メッセージサービスが設定可能になります (jbpm.cfg.xml)。 Java EE 環境では、 DbMessageService を JmsMessageService に置き換えて、 アプリケーションサーバーの機能を活用できます。
ジョブエクゼキュータの挙動に関する要約は次の通りです。
ジョブはデータベースのレコードです。 ジョブはオブジェクトであり、 実行可能です。 タイマーと非同期メッセージはジョブになります。 非同期メッセージの場合、 メッセージが挿入された時に dueDate が現在の時間に設定されます。 ジョブエクゼキュータはジョブを実行する必要がありますが、次の 2 つの段階で実行されます。
- ジョブエグゼキュータースレッドはジョブを取得する必要がある
- ジョブエグゼキュータースレッドはジョブを取得する必要がある
ジョブの取得と実行は、別のトランザクションとして実行されます。ディスパッチャースレッドは、このノードの全エグゼキュータースレッドの代わりにデータベースからジョブを取得します。エグゼキュータースレッドがジョブを取得すると、その名前をジョブの所有者フィールドに追加します。各スレッドには、IP アドレスやシーケンス番号に従い一意名が設定されています。
スレッドはジョブの取得と実行の間に消失する可能性があります。このような状況をクリーンアップするため、1 つのジョブエグゼキューターごとにロック時間をチェックする 1 つのロックモニタスレッドが存在します。30 分以上ロックされているジョブは、他のジョブによって実行されるようロックモニタースレッドによってロック解除されます。
Hibernate のオプティミスティックロックが正常に動作するために必要な分離レベルは
REPEATABLE_READ にセットする必要があります。 REPEATABLE_READ により、 このクエリが 1 つの競合トランザクションで 1 つの行のみを更新することが保証されます。
update JBPM_JOB job
set job.version = 2
job.lockOwner = '192.168.1.3:2'
where
job.version = 1
Non-Repeatable Reads とは、 トランザクションが以前に読み取ったデータを再び読み取り、 トランザクションの以前の読み取り移行にコミットされた他のトランザクションによってデータが変更されていることを発見する特殊な状態を示します。
Non-Repeatable Reads は楽観ロックにとって問題です。分離レベル
READ_COMMITTED は Non-Repeatable Reads の発生を許すため、十分ではありません。したがって、複数のジョブエグゼキュータースレッドを設定する場合はREPEATABLE_READ が必要です。
ジョブエグゼキューター関連の設定プロパティは以下の通りです。
- jbpmConfiguration
- 設定をリトリーブする bean
- name
- ジョブエグゼキューター名
重要
1 台のマシンに JBPM インスタンスが 1 つ以上、開始されている場合、この名前は各ノードに一意でなければなりません。 - nbrOfThreads
- 開始されたエグゼキュータースレッドの数
- idleInterval
- 保留されているジョブがない場合、ディスパッチャースレッドがジョブのキューを確認するまでに待機する時間
注記
キューにジョブが追加されると、ディスパッチャースレッドに自動通知されます。 - retryInterval
- 実行時に問題があった場合のジョブ再試行の間隔。デフォルト値は 3 回です。
注記
再試行の最大回数は jbpm.job.retries で設定されています。 - maxIdleInterval
- idleInterval の最大期間
- historyMaxSize
- このプロパティは廃止されるため、特に影響はありません。
- maxLockTime
- lock-monitor スレッドがアンロックするまでジョブをロックできる最大時間
- lockMonitorInterval
- lock-monitor スレッドがロックされているジョブの確認をする際の休止間隔
- lockBufferTime
- このプロパティは廃止されるため、特に影響はありません。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.