camunda_08_task_exception

异常的分类

  • 业务异常: 最主要的情形是, 业务参数不合理, 比如请假天数小于等于零, 当然这类参数最好是在流程发起前做validate, 不要遗留到流程签核过程中.
  • 技术异常: 程序运行时碰到的纯技术问题, 比如网络闪断, 比如偶发的连接数据库失败等.

External task 任务结束的几种方法

  • 正常结束
    Task正常结束, 可以通过下面代码告知流程引擎已经成功完成该任务, 可以通过 variableMap 增加或修改流程变量.
  externalTaskService.complete(externalTask, variableMap);
  • 业务异常
    task代码在碰到业务异常后, 需要抛出BpmnError, 这时候流程执行将有两种情况:
    (1)如果我们在BPM流程图为该Task增加边界error event, 该异常会被捕获, 流程就沿异常分支继续执行下去.
    (2)如果没有边界error event, 默认行为是打印log日志并结束当前任务, 这个行为可以通过设置 enableExceptionsAfterUnhandledBpmnError 属性为true来改变,这时一个流程引擎错误将会被抛出.
	externalTaskService.handleBpmnError(externalTask, errorCode, errorMessage);

  • 技术异常 incident
    我们应在代码层面上做好 retry 机制, 尽量避免抛出这样的异常, 因为这类异常无法通过在流程图上增加边界error event来捕获.
    发生这样的异常后, 流程将停止, 需要管理员修复该流程实例, 并在 camunda UI 上记录为 incident . incident 后台存储在 ACT_RU_INCIDENT表中.
	externalTaskService.handleFailure(  externalTask, errorMessage, errorDetails, retries, retryTimeout);

JavaDelegate 任务结束的几种方法

  • 正常结束, 不需要调用特别的函数标识任务结果.

  • 业务异常, 直接抛出 BpmnError

    throw new BpmnError("NO_DOWNLOAD_OPTION", "Repo can't be downloaded");
  • 技术异常, 直接抛出 Exception
   throw new Exception("Error from REST call, Response code: " + response.getStatus());

参考

camunda之——错误事件(Error Events)

posted @ 2022-09-28 07:33  harrychinese  阅读(240)  评论(0编辑  收藏  举报