在JavaDelegate中使用runtimeService服务

背景

在工作流服务任务中,常需要使用RuntimeService接口用于发起流程等业务。Camunda,Activit,Flowable三款产品在这个场景上操作有所不同, 现总结如下。

JeecgFlow 在线体验

camunda

java 复制代码
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {
        RuntimeService runtimeService = delegateExecution.getProcessEngine().getRuntimeService();
        runtimeService.startProcessInstanceByMessage("Message_war");
    }
}

可以通过这种方式访问所有camunda服务的API。

java 复制代码
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {

    @Autowired
    private RuntimeService runtimeService;

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {
        runtimeService.startProcessInstanceByMessage("Message_war");
    }
}

这是通过注入获取RuntimeService服务,与前面代码功能相同。

::: warning

需要注意,由于服务调用时当前事务中完成的, 所以在执行服务任务之前产生或修改的数据尚未存入数据库。

这是因为所有API调用都基于数据库数据处理,这些未提交的更改在服务任务API中调用不可见。

:::

Activiti

java 复制代码
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {
        RuntimeService runtimeService = Context.getProcessEngineConfiguration().getRuntimeService();\
        runtimeService.startProcessInstanceByMessage("myKey");
    }
}

可以通过这种方式访问所有Activiti服务的API。

java 复制代码
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {
    @Autowired
    private RuntimeService runtimeService;

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {
        runtimeService.startProcessInstanceByMessage("myKey");
    }
}

这是通过注入获取RuntimeService服务,与前面代码功能相同。

::: warning

需要注意,由于服务调用时当前事务中完成的, 所以在执行服务任务之前产生或修改的数据尚未存入数据库。

这是因为所有API调用都基于数据库数据处理,这些未提交的更改在服务任务API中调用不可见。

:::

Flowable

java 复制代码
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {
        RuntimeService runtimeService = Context.getProcessEngineConfiguration().getRuntimeService();\
        runtimeService.startProcessInstanceByMessage("myKey");
    }
}

可以通过这种方式访问所有Activiti服务的API。

java 复制代码
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {
    @Autowired
    private RuntimeService runtimeService;

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {
        runtimeService.startProcessInstanceByMessage("myKey");
    }
}

这是通过注入获取RuntimeService服务,与前面代码功能相同。

相关推荐
xrl20123 天前
RuoYi-Vue-Plus + Camunda 7.18:强强联合的解决方案
flowable·camunda·ruoyi-vue-plus·ruoyiflow·activtii
带刺的坐椅11 天前
通用流程编排框架,Solon Flow v3.8.0 隆重发布
java·solon·flowable·flow·drools
椰汁菠萝16 天前
spring boot整合flowable(分库)
spring boot·flowable·分库
xrl201219 天前
ruoyi-vue2集成flowable6.7.2后端篇
数据库·ruoyi·flowable·工作流集成
hhzz22 天前
Activiti7工作流(五)流程操作
java·activiti·工作流引擎·工作流
BAStriver1 个月前
关于Flowable的使用小结
java·spring boot·spring·flowable
bill4471 个月前
BPMN2.0,flowable工作流,【用户任务】使用【任务监听器】动态设置下一步处理人
java·工作流引擎·flowable·bpmn
xrl20121 个月前
ruoyi集成camunda实现bpmn在线设计器
camunda·ruoyiflow·若依工作流
宁波阿成1 个月前
基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台
vue3·springboot3·flowable·jeecgboot
D_alyoo2 个月前
06 Activiti 与 Spring Boot 整合
java·activiti·activiti7源码