Flowable引擎CMMN API深度解析

Flowable引擎CMMN API深度解析

【免费下载链接】flowable-engine A compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users. 【免费下载链接】flowable-engine 项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine

概述

Flowable CMMN引擎提供了一套完整的API体系,用于管理和执行基于CMMN 1.1规范的案例管理模型。本文将深入解析Flowable CMMN引擎的核心API服务及其使用方法,帮助开发者更好地理解和运用这一强大的工作流引擎。

核心服务接口

Flowable CMMN引擎通过一系列服务接口提供完整的功能支持,这些服务都是线程安全的,可以在整个服务器生命周期中保持引用。

1. 服务获取方式

通过CmmnEngineConfiguration创建独立配置的CMMN引擎实例后,可以获取各服务接口:

CmmnEngine cmmnEngine = CmmnEngineConfiguration.createStandaloneCmmnEngineConfiguration();

// 获取各服务接口
CmmnRuntimeService runtimeService = cmmnEngine.getCmmnRuntimeService();
CmmnRepositoryService repositoryService = cmmnEngine.getCmmnRepositoryService();
CmmnTaskService taskService = cmmnEngine.getCmmnTaskService();
CmmnManagementService managementService = cmmnEngine.getCmmnManagementService();
CmmnHistoryService historyService = cmmnEngine.getCmmnHistoryService();

2. 各服务功能详解

CmmnRepositoryService
  • 功能:管理与操作案例定义和部署
  • 核心能力
    • 部署包含CMMN 1.1 XML文件和其他资源的部署包
    • 查询引擎已知的部署和案例定义
    • 检索部署中包含的各种资源
    • 获取案例定义的POJO版本,便于通过Java而非XML进行内省
CmmnRuntimeService
  • 功能:处理案例实例的执行
  • 核心能力
    • 启动新的案例实例
    • 检索和存储案例变量
    • 查询案例实例和计划项(Plan Item)
    • 通过"信号"机制继续等待外部触发的案例实例
CmmnTaskService
  • 功能:管理人工任务
  • 核心能力
    • 查询分配给用户或组的任务
    • 创建独立任务(不与案例实例关联)
    • 管理任务分配和参与用户
    • 认领和完成任务
CmmnHistoryService
  • 功能:提供历史数据访问
  • 核心能力
    • 查询案例实例启动时间
    • 查询任务执行者和完成时间
    • 查询案例实例执行路径等历史信息
CmmnManagementService
  • 功能:提供底层管理功能
  • 核心能力
    • 访问数据库表信息
    • 查询和执行各种作业

异常处理机制

Flowable采用统一的异常处理策略,基础异常为org.flowable.engine.common.api.FlowableException,这是一个非检查型异常。特定场景下会抛出更具体的子类异常:

  1. FlowableWrongDbException:数据库模式版本与引擎版本不匹配
  2. FlowableOptimisticLockingException:数据并发访问导致的乐观锁异常
  3. FlowableClassLoadingException:类加载失败
  4. FlowableObjectNotFoundException:请求对象不存在
  5. FlowableIllegalArgumentException:非法参数
  6. FlowableTaskAlreadyClaimedException:任务已被认领

查询API

Flowable提供两种数据查询方式:

1. 类型安全查询API

使用流畅的API构建完全类型安全的查询,支持条件组合和精确排序:

List<Task> tasks = taskService.createTaskQuery()
    .taskAssignee("kermit")
    .orderByDueDate().asc()
    .list();

2. 原生查询

支持直接使用SQL进行更灵活的查询。

变量系统

变量是案例执行过程中存储和使用数据的核心机制。

1. 变量类型

  • 案例变量:绑定到整个案例实例
  • 计划项实例变量:绑定到特定计划项实例
  • 任务变量:绑定到人工任务

2. 变量操作

创建案例实例时设置变量:

CaseInstance caseInstance = runtimeService.createCaseInstanceBuilder()
    .variable("var1", "test")
    .start();

运行时操作变量:

// 设置多个变量
runtimeService.setVariables(caseInstanceId, variablesMap);

// 获取所有变量
Map<String, Object> variables = runtimeService.getVariables(caseInstanceId);

// 获取单个变量
Object value = runtimeService.getVariable(caseInstanceId, "varName");

3. 临时变量(Transient Variables)

临时变量与常规变量类似,但不会被持久化:

  • 无历史记录
  • 存储在最高父级上
  • 只能在下个等待状态前访问
  • 会遮蔽同名的持久变量

设置临时变量:

CaseInstance caseInstance = runtimeService.createCaseInstanceBuilder()
    .transientVariable("tempVar", "value")
    .start();

表达式系统

Flowable使用UEL(Unified Expression Language)进行表达式解析。

1. 表达式类型

  • 值表达式:解析为值

    ${myVariable}
    ${myBean.myProperty}
    
  • 方法表达式:调用方法

    ${printer.print()}
    ${myBean.addNewOrder('orderName')}
    

2. 默认可用对象

  • caseInstance:当前案例实例信息
  • planItemInstance:当前计划项实例信息
  • planItemInstances:所有计划项实例信息
  • variableContainer:变量容器抽象
  • authenticatedUserId:当前认证用户ID

3. planItemInstances高级用法

planItemInstances提供强大的链式过滤查询能力:

// 统计活跃的计划项实例
${planItemInstances.active().count()}

// 按ID过滤
${planItemInstances.active().definitionIds('a', 'b').count()}

// 获取当前阶段终止状态的计划项ID
${planItemInstances.currentStage().onlyTerminal().getDefinitionIds()}

支持的状态过滤方法:

  • active(), available(), enabled(), disabled()
  • completed(), terminated(), unavailable()
  • waitingForRepetition(), asyncActive()

最佳实践建议

  1. 服务引用:由于服务对象是线程安全的,建议在应用启动时获取并长期持有服务引用。

  2. 变量使用

    • 合理规划变量作用域
    • 敏感数据考虑使用临时变量
    • 避免存储过大对象
  3. 异常处理

    • 对预期可能发生的异常做好捕获处理
    • 使用细粒度异常类型进行精确处理
  4. 查询优化

    • 对大数据量查询使用分页
    • 合理使用索引字段进行查询
  5. 表达式使用

    • 保持表达式简洁
    • 避免复杂业务逻辑放入表达式
    • 考虑性能影响

通过深入理解Flowable CMMN引擎的API体系,开发者可以构建出高效、可靠的案例管理系统,充分发挥CMMN规范在复杂业务场景下的优势。

【免费下载链接】flowable-engine A compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users. 【免费下载链接】flowable-engine 项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值