CMMN 案例引擎自定义配置
CMMN 自定义配置用于扩展案例定义的解析和案例实例运行行为。Spring Boot 应用可以使用与其他引擎相同的配置器机制,但配置器必须绑定到 CMMN 引擎的 Spring 配置类型。
@Bean
EngineConfigurationConfigurer<SpringCmmnEngineConfiguration> cmmnEngineConfigurer() {
return configuration -> {
// 在这里注册案例引擎扩展
};
}
Flowable 在创建 CMMN 引擎之前调用该回调。配置器注册的扩展由案例引擎初始化和后续案例定义解析、案例实例执行使用。CMMN 的扩展点与 BPMN、DMN 各自的引擎配置分离,不能假设 BPMN 配置器会自动改变案例引擎行为。
本节中的 CMMN 配置方式是按 Flowable Spring Boot 的通用引擎配置机制说明。参考的业务配置示例展示了 BPMN 与 DMN 定制,没有展示 CMMN 专属回调;实际使用前应核对项目引入的 Flowable starter 版本及其 CMMN 自动配置。
CMMN 配置项
SpringCmmnEngineConfiguration 管理案例引擎的模型解析、生命周期和运行服务。常见配置包括:
| 配置项 | 作用 | 适用场景 |
|---|---|---|
customCmmnParseHandlers | 注册额外的案例模型解析处理器。 | 解析 CMMN 扩展元素或在部署时检查模型配置。 |
preCmmnParseHandlers / postCmmnParseHandlers | 在默认 CMMN 解析处理器之前或之后运行自定义处理器。 | 处理顺序会影响可访问的解析结果时,选择明确的前置或后置阶段。 |
activityBehaviorFactory | 为计划项活动创建运行时行为。 | 确实需要改变某类案例活动的默认行为时。 |
customPreVariableTypes / customPostVariableTypes | 将自定义变量类型加入案例引擎的变量类型体系。 | 案例变量需要定制持久化或序列化格式时。 |
caseValidator | 自定义案例定义校验规则。 | 需要在部署前对案例模型施加应用约束时。 |
historyLevel | 调整案例运行历史的记录范围。 | 按审计与追溯需求调整历史数据量时。 |
caseDefinitionCacheLimit | 限制案例定义缓存容量。 | 案例定义数量较多或需要调整内存占用时。 |
enableSafeCmmnXml | 控制安全 XML 处理。 | 按模型来源和安全要求确认 XML 解析策略时。 |
名称和可用性可能随 Flowable 版本变化。尤其是缓存、历史级别和异步执行等常规选项,Spring Boot 项目通常先检查对应的 flowable.* 属性,再决定是否通过配置器改写。
常见扩展方向
CMMN 模型解析
自定义 CMMN 解析处理器可在案例模型部署时参与解析,用于识别扩展元素、附加模型信息或实施额外的模型约束。解析阶段处理模型资源,不等于案例实例运行时的业务监听。
解析处理器应只匹配预期的 CMMN 元素,并妥善处理未知扩展、重复部署与无效属性。报错时尽可能指出模型资源、元素类型及出错配置。
以下示例把一个 自定义解析器注册到 CMMN 默认解析器之后。假设该解析器实现了 Flowable 的 CmmnParseHandler 接口:
@Bean
EngineConfigurationConfigurer<SpringCmmnEngineConfiguration> caseParserConfigurer(
CaseExtensionParseHandler caseExtensionParseHandler) {
return configuration -> configuration.setPostCmmnParseHandlers(
List.of(caseExtensionParseHandler)
);
}
解析器通过 getHandledTypes() 声明需要处理的 CMMN 元素,并在解析回调中检查或补充模型信息。若只需追加扩展处理器,也可以使用专用的自定义解析器列表;是否使用前置、后置或自定义列表,应根据目标版本提供的接口语义选择。
案例活动行为
当需要改变特定计划项或活动的运行方式时,可以考察 CMMN 引擎提供的活动行为扩展点。行为实现要遵守案例实例的状态流转、生命周期事件和引擎事务边界;应避免绕过引擎内部 API 直接改写案例状态。