15.4. 错误类型和过滤器

错误处理尝试捕获和处理任何类型的错误,因此需要一种方法来分类错误。这样,就可以从错误正确提取信息,并使其可插拔,因为有些用户可能需要以不同于默认提供的方式进行特定类型错误。

错误分类和过滤基于 ExecutionErrorFilters。此接口仅负责构建 ExecutionError 实例,这些实例以 ExecutionErrorStorage 策略的形式存储。它有以下方法:

  • 接受 :指示过滤器是否可以处理给定错误。
  • 过滤 :发生实际过滤、处理等。
  • getPriority: 表示调用过滤器时使用的优先级。

每次过滤一个错误,并使用优先级系统来避免多个过滤器返回同一错误的替代"views"。优先级启用更为特殊的过滤器来查看是否可以接受错误,或者允许另一个过滤器处理它。

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

作业

100

根据优先级的最低值,会给过滤器赋予更高的执行顺序。在下表中,按以下顺序调用过滤器:

  1. 任务
  2. Process
  3. 作业
  4. DB