Flowable引擎CMMN模块架构深度解析
概述
Flowable引擎的CMMN模块是一个基于CMMN(Case Management Model and Notation)规范的案例管理引擎。作为Flowable引擎生态系统的重要组成部分,它采用了与其他引擎(如BPMN引擎)相似的设计理念,但在执行机制上有着显著差异。本文将深入剖析CMMN引擎的架构设计、核心组件及其工作原理。
整体架构
CMMN引擎采用分层架构设计,主要分为以下几个层次:
- 服务层:提供面向用户的API服务
- 命令执行层:处理命令拦截和执行
- 议程层:管理操作执行顺序
- 持久层:负责数据存储和检索

核心组件
1. 引擎配置与实例化
CMMN引擎通过CmmnEngineConfiguration进行配置,可以通过配置文件或编程方式创建。配置完成后,实例化CmmnEngine对象,这是使用CMMN引擎的入口点。
2. 服务接口
CMMN引擎提供以下核心服务接口:
- CmmnRepositoryService:负责案例定义的部署和管理
- CmmnRuntimeService:处理案例实例的运行时操作
- CmmnTaskService:管理人工任务
- CmmnHistoryService:提供历史数据查询
- CmmnManagementService:引擎管理和维护
这些服务的设计与其他Flowable引擎保持一致性,降低了学习成本。
3. 共享服务
CMMN引擎与其他引擎共享以下基础服务:
- 任务服务:统一管理所有引擎产生的人工任务
- 变量服务:处理变量存储和访问
- 身份服务:管理用户和组信息
- 作业服务:处理定时和异步任务
这种共享架构带来了两个主要优势:
- 跨引擎操作的事务一致性
- 资源共享,减少重复实现
执行流程

- API调用:用户通过服务接口发起操作
- 命令转换:API方法转换为
Command对象 - 命令执行:
CommandExecutor处理命令,经过拦截器链 - 议程规划:命令生成
CmmnOperation并加入CmmnEngineAgenda - 操作执行:从议程中取出并执行操作,可能产生新操作
- 持久化:通过实体管理器进行数据持久化
CMMN引擎特性
1. 数据驱动执行
与BPMN引擎的"流程驱动"不同,CMMN引擎采用"数据驱动"的执行模式。数据变化会触发EvaluateCriteriaOperation,评估案例中各个计划项的状态变化。引擎会优化这些评估,避免重复或无用的计算。
2. 计划项实例(Plan Item Instance)
这是CMMN引擎的核心概念,表示案例中当前"活跃"的计划项及其状态。CMMN为计划项定义了严格的生命周期状态,这些状态体现在:
CmmnRuntimeService的方法中- 查询API的设计中
PlanItemInstance对象的字段中
3. 议程机制
CmmnEngineAgenda管理操作的执行顺序,采用"计划-执行"模式:
- 操作被规划到议程中
- 引擎从议程中取出操作执行
- 操作执行可能产生新操作并加入议程
- 重复直到议程为空
调试与日志
要深入了解议程和操作的执行细节,可以启用调试日志:
log4j.logger.org.flowable.cmmn.engine.impl.agenda=DEBUG
日志会显示操作的规划和执行顺序,例如:
Planned [Init Plan Model] initializing plan model for case instance...
Planned [Change PlanItem state] Task A, new state: [available]...
Planned [Evaluate Criteria] case instance...
Planned [Activate PlanItem] Task A...
这些日志清晰地展示了计划项的状态变迁和条件评估过程。
与BPMN引擎的对比
-
执行模式:
- BPMN:流程驱动,按流程定义顺序执行
- CMMN:数据驱动,响应数据变化执行
-
状态管理:
- BPMN:相对简单的状态管理
- CMMN:严格的计划项生命周期状态
-
触发机制:
- BPMN:主要由流程节点触发
- CMMN:主要由数据变化和条件评估触发
最佳实践
- 合理设计案例模型:充分利用CMMN的事件响应特性
- 监控议程操作:通过日志分析引擎行为
- 共享服务利用:统一管理跨引擎的任务和变量
- 性能优化:注意避免频繁的条件评估导致性能问题
总结
Flowable的CMMN引擎通过其独特的架构设计,实现了对CMMN规范的完整支持。理解其数据驱动的执行机制、议程系统和计划项生命周期,对于有效使用该引擎至关重要。与BPMN引擎的协同工作能力使其成为复杂业务流程和案例管理场景的理想选择。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0151- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0111