You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kogito中创建动态工作流?支持部署后编辑BPMN并同步仓库

在Kogito中实现部署后动态编辑并同步BPMN流程的方案

一、启用Kogito运行时动态流程加载

Kogito默认是构建时将BPMN编译为Java类,要支持运行时动态修改,需启用Runtime Workflow Manager并配置可读写的流程存储:

  • 在application.properties中添加核心配置:
    kogito.runtimes.enabled=true
    kogito.persistence.type=file # 也可选用数据库存储,按需选择
    kogito.workflows.directory=${user.home}/kogito-runtime-workflows # 指定BPMN文件存储目录
    
  • 注入ProcessRuntimeManager实现流程的读取与更新:
    @Inject
    private ProcessRuntimeManager processRuntimeManager;
    
    // 获取指定流程的原始BPMN XML内容
    public String fetchBpmnContent(String processId) {
        ProcessDefinition definition = processRuntimeManager.getProcessDefinition(processId);
        return definition != null ? definition.getSource() : null;
    }
    
    // 更新并重新部署BPMN流程
    public void updateAndDeployBpmn(String processId, String newBpmnXml) {
        // 移除旧流程定义
        processRuntimeManager.removeProcessDefinition(processId);
        // 部署新的BPMN内容
        try (InputStream inputStream = new ByteArrayInputStream(newBpmnXml.getBytes(StandardCharsets.UTF_8))) {
            processRuntimeManager.deploy(inputStream);
        } catch (IOException e) {
            throw new RuntimeException("Failed to deploy updated BPMN", e);
        }
    }
    
    注:此前获取BPMN内容失败,大概率是未调用ProcessDefinition.getSource()方法,而是尝试读取编译后的类文件,该方法可直接返回原始可编辑的BPMN XML。

二、实现BPMN到仓库的同步

编辑完成后,通过仓库的REST API(如GitLab/GitHub API)完成文件提交:

  • 核心逻辑步骤:
    1. 定位仓库中对应的BPMN文件路径(如src/main/resources/${processId}.bpmn2)
    2. 调用仓库API更新文件内容并提交
    3. 可选:若Kogito部署目录与仓库关联,通过文件监听或接口触发流程重新加载
  • 伪代码示例:
    public void syncToRepo(String processId, String newBpmnXml) {
        String repoFilePath = "src/main/resources/" + processId + ".bpmn2";
        // 调用仓库API完成文件更新,需根据实际仓库的API规范调整
        RepositoryApi.updateFile(repoFilePath, newBpmnXml, "Update process: " + processId);
    }
    

三、自研编辑器的适配要求

确保编辑器输出的BPMN符合Kogito运行时规范,避免加载失败:

  • 必须包含Kogito命名空间:xmlns:kogito="http://www.jboss.org/kogito"
  • 流程节点ID需唯一,避免与现有流程冲突
  • 保留Kogito扩展属性(如kogito:taskName、kogito:inputData),这些是Kogito运行时的依赖项
  • 编辑完成后,用kogito-cli验证合法性:
    kogito-cli validate --file updated-process.bpmn2
    

四、关键注意事项

  • 版本控制:为流程ID添加版本标识(如order-process-v1),避免多人编辑冲突
  • 权限校验:严格控制终端用户的编辑权限,防止恶意修改流程
  • 性能优化:动态加载流程会有一定性能开销,高并发场景建议缓存已编译的流程定义

内容的提问来源于stack exchange,提问作者SrigandanS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:58:12