在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服务,与前面代码功能相同。

相关推荐
爱吃土豆的程序员22 天前
flowable源码解读——内存缓存设计
缓存·flowable·源码解读
风止￴1 个月前
JavaEE从入门到起飞(九) ~Activiti 工作流
java·java-ee·activiti·工作流
宁波阿成1 个月前
基于Jeecgboot3.6.3的vue3版本的流程中仿钉钉流程的鼠标拖动功能支持
钉钉·vue3·jeecgboot
亚林瓜子1 个月前
Camunda流程引擎设置默认历史流程实例保留时间
java·开发语言·camunda·ttl
前行1232 个月前
Jeecgboot仪表盘设计器使用https时访问报错
http·https·jeecgboot·仪表盘设计器
宁波阿成2 个月前
橙单后端项目下载编译遇到的问题与解决
java·前端·数据库·vue3·flowable
宁波阿成2 个月前
基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-抄送服务处理
java·钉钉·vue3·flowable·jeecg-boot
宁波阿成2 个月前
基于Jeecgboot3.6.3的vue3版本的流程ProcessViewer的修改
前端·vue3·flowable·jeecgboot
宁波阿成2 个月前
基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-不同panel兄弟之间的数据传递
前端·钉钉·vue3·flowable·jeecgboot
宁波阿成2 个月前
基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-支持VForm3表单的选择与支持
前端·vue3·flowable·仿钉钉·jeecgboot