第67章 プロセスエンジンの永続性およびトランザクション

プロセスエンジンは、プロセスの状態に永続性を実装します。この実装では、SQL データベースバックエンドと JPA フレームワークを使用します。また、監査ログ情報をデータベースに保存することもできます。

プロセスエンジンは、トランザクションをサポートする永続バックエンドに依存する、JTA フレームワークを使用したプロセスのトランザクション実行も有効にします。

67.1. プロセスランタイム状態の永続性

プロセスエンジンは、実行中のプロセスインスタンスのランタイム状態の永続ストレージをサポートします。ランタイムの状態を保存するため、プロセスエンジンが停止したり、問題が発生した場合はプロセスインスタンスの実行を継続できます。

また、プロセスエンジンは、プロセス定義と現在のプロセス状態および以前のプロセス状態の履歴ログを永続的に格納します。

JPA フレームワークによって指定された persistence.xml ファイルを使用して、SQL データベースで永続性を設定できます。さまざまな永続ストラテジーをプラグインできます。persistence.xml ファイルの詳細は、persistence.xml ファイルの設定」を参照してください。

デフォルトでは、プロセスエンジンで永続性を設定しないと、プロセスインスタンスの状態を含むプロセス情報は永続化されません。

プロセスエンジンがプロセスを開始すると、プロセスインスタンス が作成され、特定のコンテキストでのプロセスの実行を表します。たとえば、売上注文を処理するプロセスを実行する場合は、各営業リクエストに対してプロセスインスタンスが 1 つ作成されます。

プロセスインスタンスには、プロセス変数の現在の値など、プロセスの現在のランタイム状態とコンテキストが含まれます。ただし、この情報はプロセスの継続的な実行には必要ないため、プロセスの過去の状態の履歴に関する情報は含まれていません。

プロセスインスタンスのランタイム状態が永続化されると、プロセスエンジンが失敗したり停止した場合に、実行中のプロセスの実行状態をすべて復元できます。メモリーから特定のプロセスインスタンスを削除して、後で復元することもできます。

永続性を使用するようにプロセスエンジンを設定すると、ランタイム状態がデータベースに自動的に保存されます。コードで永続性をトリガーする必要はありません。

データベースからプロセスエンジンの状態を復元すると、すべてのインスタンスが自動的に最後に記録された状態に復元されます。プロセスインスタンスは、たとえば期限切れタイマー、プロセスインスタンスから要求されたタスクの完了、プロセスインスタンスに送信されたシグナルなど、トリガーされた場合に実行を自動的に再開します。別のインスタンスを読み込み、手動で実行をトリガーする必要はありません。

プロセスエンジンは、オンデマンドでプロセスインスタンスを自動的に再読み込みします。

67.1.1. 永続性のセーフポイント

プロセスエンジンは、プロセスの実行中に 安全な時点 でプロセスインスタンスのステータスを永続ストレージに保存します。

プロセスインスタンスが以前の待機状態から開始または再開すると、このプロセスエンジンは、他のアクションが実行するまで実行を継続します。これ以外のアクションを実行できない場合は、プロセスが完了するか、待機状態に達したことを意味します。プロセスに複数の並列パスが含まれる場合は、すべてのパスが待機状態である必要があります。

プロセスの実行におけるこのポイントは、安全なポイントと見なされます。この時点で、プロセスエンジンはプロセスインスタンスのステータスと、実行の影響を受けるその他のプロセスインスタンスのステータスを永続ストレージに保存します。