跳到主要内容

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 直接改写案例状态。

变量类型与表达式​

若案例变量需要自定义类型或表达式需要额外能力,应确认对应扩展是否属于 CMMN 引擎,还是来自 BPMN、DMN 等共享或独立组件。将扩展注册到错误的引擎配置对象,可能导致应用能启动但案例执行时找不到该能力。

设计与验证​

  • 确认应用中启用了 CMMN starter,并由 Flowable Spring Boot 自动配置创建案例引擎。
  • 将配置器作为 Spring Bean 暴露,依赖的扩展对象也应由 Spring 或配置器负责创建。
  • 使用覆盖解析、计划项激活、人工任务、生命周期事件和失败恢复的案例模型验证扩展。
  • 如果扩展会改变已有案例定义的运行行为,评估升级时仍在运行的案例实例。
  • 通过启动日志或针对配置器的测试确认该配置器作用于 CMMN 引擎,而不是只确认应用上下文可以启动。

其他引擎的配置边界和回调时机见自定义配置机制总览。

参考资料​