15.4. エラータイプとフィルター

エラー処理ではどのような種類のエラーも捕まえて処理しようとするため、エラーをカテゴリー分けする方法が必要になります。こうすることで、エラーから適切に情報を抽出し、プラグ可能とすることができます。これは、ユーザーによっては、デフォルトとは違う方法で特定タイプのエラーのスローと処理方法を必要とするためです。

エラーのカテゴリー分けとフィルタリングは、ExecutionErrorFilters をベースにしています。このインターフェイスは ExecutionError のインスタンス構築を担っており、これは後で ExecutionErrorStorage 戦略で保存されます。これには以下のメソッドがあります。

  • accept: エラーがフィルターで処理可能かどうかを示します。
  • filter: 実際のフィルタリング、処理などが発生する場所です。
  • getPriority: フィルター呼び出し時に使用される優先度を示します。

フィルターは、一度に処理するエラーは 1 つで、優先順位の仕組みを使用して、複数のフィルターで、別の「ビュー」で同じエラーが返されないようにします。優先順位を使用すると、より特化したフィルターで、エラーが受け入れられるかどうか、または別のフィルターで処理可能かが判断されます。

ExecutionErrorFilterServiceLoader メカニズムを使用することで提供され、これによりエラー処理の機能が容易に拡張できます。

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

フィルターには、優先度の値の低いものが実行順序の高いものとして与えられます。上記のテーブルでは、以下の順序でフィルターが実行されます。

  1. タスク
  2. Process
  3. Job
  4. DB