66.5. 进程引擎中的执行错误
任何流程引擎执行的一部分,包括任务服务,可以抛出异常。一个例外是扩展 java.lang.Throwable 的任何类。
在进程级别上处理一些例外。值得注意的是,工作项目处理程序可能会引发自定义异常,用于指定错误处理的子进程。如需有关开发工作项目处理程序的信息,请参阅 自定义任务和工作处理程序。
如果没有处理异常并到达进程引擎,它将变成 执行错误。当发生执行错误时,进程引擎会回滚当前的事务并使进程处于之前稳定状态。之后,进程引擎将继续从该点执行进程。
对向进程引擎发送请求的调用者可见执行错误。流程引擎还包括用于处理执行错误的扩展机制,并存储有关它们的信息。这种机制由以下组件组成:
ExecutionErrorManager:错误处理的入口点。此类与RuntimeManager集成,后者负责为其提供底层KieSession和TaskService。ExecutionErrorManager提供对执行错误处理机制中的其他类的访问。当进程引擎创建
RuntimeManager实例时,它还会创建一个对应的ExecutionErrorManager实例。ExecutionErrorHandler:错误处理的主要类。这个类在进程引擎中实施,您通常不需要自定义或扩展它。ExecutionErrorHandler调用错误过滤器,以处理特定错误并调用ExecutionErrorStorage来存储错误信息。ExecutionErrorHandler绑定到的生命周期 ; 在创建新运行时引擎时会创建它,并在运行时引擎被销毁。RuntimeEngineExecutionErrorHandler的单个实例在给定的执行上下文或事务中使用。KieSession和TaskService都使用该实例来告知处理已处理节点或任务的错误处理。有关以下事件通知ExecutionErrorHandler:- 启动节点实例的处理
- 完成节点实例的处理
- 任务实例的处理
完成任务实例的处理
ExecutionErrorHandler使用此信息记录错误的上下文,特别是错误本身未提供进程上下文信息。例如,数据库例外没有任何进程信息。
ExecutionErrorStorage:用于执行错误信息的可插拔存储类。当进程引擎创建
RuntimeManager实例时,它还会创建一个对应的ExecutionErrorStorage实例。然后ExecutionErrorHandler类调用这个ExecutionErrorStorage实例,以存储每个执行错误的信息。默认的存储实施使用数据库表存储每个错误的所有可用信息。不同错误类型可能有不同的详细级别,因为某些错误可能不允许提取详细信息。
- 处理特定类型的执行错误的多个 过滤器。您可以添加自定义过滤器。
默认情况下,记录每个执行错误作为 未确认的。您可以使用 Business Central 查看所有记录的执行错误并确认它们。您还可以创建自动确认所有或执行错误的作业。
有关使用 Business Central 查看执行错误以及创建可自动确认错误的作业,请参阅 Business Central 中管理和监控业务流程的信息。
66.5.1. 执行错误类型和过滤器 复制链接链接已复制到粘贴板!
执行错误处理会尝试捕获和处理任何类型的错误。但是,用户需要以不同的方式处理不同的错误。另外,针对不同类型的错误,还提供了不同的详细信息。
错误处理机制支持可插拔 过滤器。每个过滤器处理特定类型的错误。您可以通过不同的方式添加处理特定错误的过滤器,覆盖默认处理。
过滤器是 ExecutionErrorFilter 接口的实现。此接口构建 ExecutionError 的实例,稍后使用 ExecutionErrorStorage 类存储。
ExecutionErrorFilter 接口有以下方法:
-
accept:指示某个错误是否可以被过滤器处理 -
过滤器: 处理错误并返回ExecutionError实例 -
getPriority:指示此过滤器的优先级
执行错误处理程序会单独处理每个错误。对于每个错误,它开始调用所有注册过滤器的 接受 方法,从具有较低优先级值的过滤器开始。如果过滤器的 接受 方法返回为 true,处理程序会调用 过滤器 的过滤器方法,不会调用任何其他过滤器。
由于优先级系统,只有一个过滤器处理任何错误。更为专业的过滤器具有较低优先级值。任何专用过滤器不接受的错误,会到达具有更高优先级值的通用过滤器。
ServiceLoader 机制提供 ExecutionErrorFilter 实例。要注册自定义过滤器,将其完全限定的类名称添加到服务项目的 META-INF/services/org.kie.internal.runtime.error.ExecutionErrorFilter 文件中。
Red Hat Process Automation Manager 附带以下执行错误过滤器:
| 类名称 | 类型 | 优先级 |
|---|---|---|
| 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 |
根据优先级最低值,为过滤器赋予更高的执行顺序。因此,执行错误处理器按照以下顺序调用这些过滤器:
- 任务
- Process
- 作业
- DB