盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

Flowable cmmn结构以及bpmn与cmmn的区别

分享牛 12749℃
    本文重点看一下Flowable cmmn结构以及底层的一些架构图。本部会从高层次的角度介绍Flowable CMMN引擎的内部结构。当然,由于CMMN引擎代码是开源的,大家可以通过深入源代码来找到实际的实现细节。BPMN和CMMN引擎的一个很大的区别是,BPMN引擎通常是本地执行:引擎看着当前流程实例状态,检查是什么流程以及是否可以持续运转(当然这是一个简化,有很多操作是不适用的,但在概念上的区别,它是正确的)。
CMMN引擎的工作方式是不同的:在CMMN中,数据起着重要的作用,数据的变化可以在不同的地方触发很多事情。因此,在发生case定义更改时,通常会计划和执行评估。当它检测到重复或无用的评估时,引擎会优化这些评估。
    正如下图所示,CMMN引擎是一个引擎,它是Flowable引擎生态系统的一部分,它的设计与其他引擎类似。CMMN引擎建立在CMMN特定服务和共享服务之上比如,任务、变量、身份和工作服务,它们独立于其他引擎。
在底层实现上,实体和datamanager层负责低级别的持久性,相当于其他引擎。


    
  
  通过使用共享服务,这也意味着,从BPMN和CMMN引擎中获得的任务将会一起结束,并且可以通过相同的API进行查询和管理。类似地,对于async执行器:计时器和async作业使用相同的逻辑,甚至可以由一个中央执行器来管理。
    共享服务体系结构还有一个好处。当引擎被一起使用时,就像通常情况下一样,引擎会在可能的情况下共享资源,数据库事务将跨越多个引擎操作的调用,查找缓存是通用的,而持久性是独立于引擎本身处理的。
CMMN引擎的设计与Flowable的其他引擎相同。下图给出了在使用CMMN引擎时涉及到的不同组件的高级概述:


从高层次的观点来看:

1、一个CmmnEngine实例是由一个CmmnEngineConfiguration创建的。可以从配置文件或以编程方式创建配置实例。
2、CmmnEngine提供了以服务的形式访问Flowable的CMMN API: CmmnRepositoryService, CmmnRuntimeService, CmmnTaskService, CmmnHistoryService, CmmnManagementService。服务的命名和它们的职责类似于其他引擎。
3、每个API方法都转换为一个命令实例。这个命令实例被传递到CommandExecutor中,在其他命令中,它可以通过一堆命令拦截器。这些拦截器具有不同的响应能力,包括处理事务。
4、最终,该命令通常(除非是纯数据修改命令)计划在CmmnEngineAgenda上执行CmmnOperation。
5、操作中的逻辑将调用底层服务和/或实体管理器。

BPMN和CMMN引擎的一个很大的区别是,BPMN引擎通常是本地执行:引擎看着当前流程实例状态,检查是什么流程以及是否可以持续运转(当然这是一个简化,有很多操作是不适用的,但在概念上的区别,它是正确的)。
CMMN引擎的工作方式是不同的:在CMMN中,数据起着重要的作用,数据的变化可以在不同的地方触发很多事情。因此,在发生case定义更改时,通常会计划和执行评估。当它检测到重复或无用的评估时,引擎会优化这些评估。
CMMN引擎工作的核心是一个计划项目实例的概念(Plan item instance),一个计划项目当前存在于这个案例中的表示以及它们的状态。与BPMN不同,CMMN为计划项目(plan items)定义了严格的状态生命周期。这在CmmnRuntimeService方法中可以看到。
    工作的议程、操作和计划项目实例的处理方式都可以通过设置日志记录来检查日程包的调试。例如,在使用log4j时我们使用下面的代码:
log4j.logger.org.flowable.cmmn.engine.impl.agenda=DEBUG

日志的输出内容大概是下面的样子:
Planned [Init Plan Model] initializing plan model for case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122
Planned [Change PlanItem state] Task A (id: planItemTaskA), new state: [available] with transition [create]
Planned [Change PlanItem state] PlanItem Milestone One (id: planItemMileStoneOne), new state: [available] with transition [create]
Planned [Change PlanItem state] Task B (id: planItemTaskB), new state: [available] with transition [create]
Planned [Change PlanItem state] PlanItem Milestone Two (id: planItemMileStoneTwo), new state: [available] with transition [create]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'create' having fired for plan item planItemTaskA (Task A)
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'create' having fired for plan item planItemMileStoneOne (PlanItem Milestone One)
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'create' having fired for plan item planItemTaskB (Task B)
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'create' having fired for plan item planItemMileStoneTwo (PlanItem Milestone Two)
Planned [Activate PlanItem] Task A (planItemTaskA)
Planned [Change PlanItem state] Task A (id: planItemTaskA), new state: [active] with transition [start]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'start' having fired for plan item planItemTaskA (Task A)
Planned [Change PlanItem state] Task A (id: planItemTaskA), new state: [completed] with transition [complete]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'complete' having fired for plan item planItemTaskA (Task A)
Planned [Activate PlanItem] PlanItem Milestone One (planItemMileStoneOne)
Planned [Change PlanItem state] PlanItem Milestone One (id: planItemMileStoneOne), new state: [active] with transition [start]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'start' having fired for plan item planItemMileStoneOne (PlanItem Milestone One)
Planned [Change PlanItem state] PlanItem Milestone One (id: planItemMileStoneOne), new state: [completed] with transition [occur]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'occur' having fired for plan item planItemMileStoneOne (PlanItem Milestone One)
Planned [Activate PlanItem] Task B (planItemTaskB)
Planned [Change PlanItem state] Task B (id: planItemTaskB), new state: [active] with transition [start]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'start' having fired for plan item planItemTaskB (Task B)
Planned [Change PlanItem state] Task B (id: planItemTaskB), new state: [completed] with transition [complete]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'complete' having fired for plan item planItemTaskB (Task B)
Planned [Activate PlanItem] PlanItem Milestone Two (planItemMileStoneTwo)
Planned [Change PlanItem state] PlanItem Milestone Two (id: planItemMileStoneTwo), new state: [active] with transition [start]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'start' having fired for plan item planItemMileStoneTwo (PlanItem Milestone Two)
Planned [Change PlanItem state] PlanItem Milestone Two (id: planItemMileStoneTwo), new state: [completed] with transition [occur]
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122 with transition 'occur' having fired for plan item planItemMileStoneTwo (PlanItem Milestone Two)
Planned [Evaluate Criteria] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122
No active plan items found for plan model, completing case instance
Planned [Complete case instance] case instance bfaf0e64-eaf4-11e7-b9d0-acde48001122

转载请注明:分享牛 » Flowable cmmn结构以及bpmn与cmmn的区别