activiti-5.x-user-guide

Exception strategy 异常策略

Activiti 中的基础异常为org.activiti.engine.ActivitiException,一个非检查异常。 这个异常可以在任何时候被 API 抛出,不过特定方法抛出的“特定”的异常都记录在 javadocs中。 例如,下面的 TaskService:

/**
 * Called when the task is successfully executed.
 * @param taskId the id of the task to complete, cannot be null.
 * @throws ActivitiObjectNotFoundException when no task exists with the given id.
 */
 void complete(String taskId);

在上面的例子中,当传入一个不存在的任务的 id 时,就会抛出异常。 同时,javadoc 明确指出 taskId 不能为 null,如果传入 null, 就会抛出 ActivitiIllegalArgumentException

我们希望避免过多的异常继承,下面的子类用于特定的场合。 流程引擎和API 调用的其他场合不会使用下面的异常, 它们会抛出一个普通的ActivitiExceptions。

  • ActivitiWrongDbException:当 Activiti 引擎发现数据库版本号和引擎版本号不一致时抛出。
  • ActivitiOptimisticLockingException:对同一数据进行并发方法并出现乐观锁时抛出。
  • ActivitiClassLoadingException:当无法找到需要加载的类或在加载类时出现了错误(比如,JavaDelegate,TaskListener等。)
  • ActivitiObjectNotFoundException:当请求或操作的对应不存在时抛出。
  • ActivitiIllegalArgumentException:这个异常表示调用Activiti API 时传入了一个非法的参数,可能是引擎配置中的非法值,或提供了一个非法制,或流程定义中使用的非法值
  • ActivitiTaskAlreadyClaimedException:当任务已经被认领了,再调用 taskService.claim(...) 就会抛出。