camunda_08_task_exception
異常的分類
- 業(yè)務(wù)異常: 最主要的情形是, 業(yè)務(wù)參數(shù)不合理, 比如請(qǐng)假天數(shù)小于等于零, 當(dāng)然這類參數(shù)最好是在流程發(fā)起前做validate, 不要遺留到流程簽核過程中.
- 技術(shù)異常: 程序運(yùn)行時(shí)碰到的純技術(shù)問題, 比如網(wǎng)絡(luò)閃斷, 比如偶發(fā)的連接數(shù)據(jù)庫(kù)失敗等.
External task 任務(wù)結(jié)束的幾種方法
- 正常結(jié)束
Task正常結(jié)束, 可以通過下面代碼告知流程引擎已經(jīng)成功完成該任務(wù), 可以通過 variableMap 增加或修改流程變量.
externalTaskService.complete(externalTask, variableMap);
- 業(yè)務(wù)異常
task代碼在碰到業(yè)務(wù)異常后, 需要拋出BpmnError, 這時(shí)候流程執(zhí)行將有兩種情況:
(1)如果我們?cè)贐PM流程圖為該Task增加邊界error event, 該異常會(huì)被捕獲, 流程就沿異常分支繼續(xù)執(zhí)行下去.
(2)如果沒有邊界error event, 默認(rèn)行為是打印log日志并結(jié)束當(dāng)前任務(wù), 這個(gè)行為可以通過設(shè)置enableExceptionsAfterUnhandledBpmnError屬性為true來改變,這時(shí)一個(gè)流程引擎錯(cuò)誤將會(huì)被拋出.
externalTaskService.handleBpmnError(externalTask, errorCode, errorMessage);

- 技術(shù)異常 incident
我們應(yīng)在代碼層面上做好 retry 機(jī)制, 盡量避免拋出這樣的異常, 因?yàn)檫@類異常無法通過在流程圖上增加邊界error event來捕獲.
發(fā)生這樣的異常后, 流程將停止, 需要管理員修復(fù)該流程實(shí)例, 并在 camunda UI 上記錄為 incident . incident 后臺(tái)存儲(chǔ)在ACT_RU_INCIDENT表中.
externalTaskService.handleFailure( externalTask, errorMessage, errorDetails, retries, retryTimeout);
JavaDelegate 任務(wù)結(jié)束的幾種方法
-
正常結(jié)束, 不需要調(diào)用特別的函數(shù)標(biāo)識(shí)任務(wù)結(jié)果.
-
業(yè)務(wù)異常, 直接拋出 BpmnError
throw new BpmnError("NO_DOWNLOAD_OPTION", "Repo can't be downloaded");
- 技術(shù)異常, 直接拋出 Exception
throw new Exception("Error from REST call, Response code: " + response.getStatus());

浙公網(wǎng)安備 33010602011771號(hào)