15.4. エラータイプとフィルター
エラー処理ではどのような種類のエラーも捕まえて処理しようとするため、エラーをカテゴリー分けする方法が必要になります。こうすることで、エラーから適切に情報を抽出し、プラグ可能とすることができます。これは、ユーザーによっては、デフォルトとは違う方法で特定タイプのエラーの出力と処理方法を必要とするためです。
エラーのカテゴリー分けとフィルターリングは、ExecutionErrorFilters をベースにしています。このインターフェイスは ExecutionError のインスタンス構築を担っており、これは後で ExecutionErrorStorage 戦略で保存されます。これには以下のメソッドがあります。
-
accept: エラーがフィルターで処理可能かどうかを示します。 -
filter: 実際のフィルターリング、処理などが発生する場所です。 -
getPriority: フィルター呼び出し時に使用される優先度を示します。
フィルターは、一度に処理するエラーは 1 つで、優先順位の仕組みを使用して、複数のフィルターで、別のビューで同じエラーが返されないようにします。優先順位を使用すると、より特化したフィルターで、エラーが受け入れられるかどうか、または別のフィルターで処理可能かが判断されます。
ExecutionErrorFilter は ServiceLoader メカニズムを使用することで提供され、これによりエラー処理の機能が容易に拡張できます。
Red Hat Process Automation Manager には以下の ExecutionErrorFilters が同梱されています。
表15.1 ExecutionErrorFilters
| クラス名 | タイプ | 優先順位 |
|---|---|---|
| org.jbpm.runtime.manager.impl.error.filters.ProcessExecutionErrorFilter | Process | 100 |
| org.jbpm.runtime.manager.impl.error.filters.TaskExecutionErrorFilter | タスク | 80 |
| org.jbpm.runtime.manager.impl.error.filters.DBExecutionErrorFilter | DB | 200 |
| org.jbpm.executor.impl.error.JobExecutionErrorFilter | Job | 100 |
フィルターには、優先度の値の低いものが実行順序の高いものとして与えられます。上記のテーブルでは、以下の順序でフィルターが実行されます。
- タスク
- Process
- Job
- DB