补偿事件
- 补偿边界事件
补偿边界事件触发的条件
-
- 事务子流程取消,导致补偿边界事件触发
- 补偿中间事件触发,导致补偿边界事件触发
- 补偿中间事件
事件的学习掌握两点:什么时候会被触发,触发后有什么后果
一、事务子流程取消,导致补偿边界事件触发,
在/**
* @author lqx
* 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤12- 16 BPMN事件(3)结束事件
* 或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤12- 16 BPMN事件(3)结束事件
*/
有用到
二、补偿中间事件触发,导致补偿边界事件触发
2.1参照如上,补偿中间事件触发,会导致所有补偿边界事件触发(即在农业银行节点执行完后,流转到补偿中间事件节点,接着先触发1补偿事件节点,接着其serviceTask 农业银行处理补偿自定义类做处理,再接着触发2补偿事件节点,接着其serviceTask 工商银行处理补偿自定义类做处理) 新建compensation-signal-intermediate-event-test.bpmn 流程图
2.2 修改 compensation-signal-intermediate-event-test.bpmn,将如图4个serviceTask自定义类(均需实现JavaDelegate接口)分别放入对应位置,并且如果这个节点是补偿自定义类的节点需加 isForCompensation="true" 属性
2.3测试方法
public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
Deployment dep = rs.createDeployment().addClasspathResource("compensation-signal-intermediate-event-test.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
/*
输出结果
工商银行扣款
农业银行加款
农业银行处理补偿--扣款退还给工商银行
工商银行处理补偿--加款,收回之前扣给农业银行的钱
*/
}
CompensationEventTest.java
package com.xiangshuai.act.c18;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
/**
* * @author lqx
* 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤15- 19 BPMN事件(6)补偿事件
* 或 我的网盘\我的笔记学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤15- 19 BPMN事件(6)补偿事件
* */
public class CompensationEventTest {
public static void main(String[] args) {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
Deployment dep = rs.createDeployment().addClasspathResource("compensation-signal-intermediate-event-test.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
/*
输出结果
工商银行扣款
农业银行加款
农业银行处理补偿--扣款退还给工商银行
工商银行处理补偿--加款,收回之前扣给农业银行的钱
*/
}
}