共计 1491 个字符,预计需要花费 4 分钟才能阅读完成。
在第 14 章,我们讲解了 Activiti 与规则引擎的整合使用,确切来说,是 Activiti 与 Drools 规则引擎的整合。在 Activiti6 版本发布后,Activiti 开始实现 DMN 规范,换言之,Activiti 正在实现自己的规则引擎,虽然尚未完成,但已具雏形。本章将讲述 DMN 规范以及初步实现的 Activit 规则引擎。
笔者成书时,Activiti 的规则引擎并没有正式发布,官方文档、API 中没有找到相关的资料,本章内容为笔者参考 Activiti 规则引擎模块的源代码编写而成,在以后的 Activiti 版本中,规则引擎的实现及发布的文档,有可能与本书所描述的内容有所冲突,望读者了解该情况。
DMN 是英文 Decision Model and Notation 的缩写,直译意为决策模型与图形。根据前章节可知,BPMN 是 OMG 公司发布的工作流规范,而 DMN 同样是 OMG 公司发布规范,该规范主要用于定义业务决策的模型和图形,1.0 版本发布于 2015 年,目前最新的是 1.1 版本,发布于 2016 年。
BPMN 主要用于规范业务流程,业务决策的逻辑由 PMML 等规范来定义,例如在某些业务流程中,需要由多个决策来决定流程走向,而每个决策都要根据自身的规则来决定,并且每个决策之间可能存在关联,此时在 BPMN 与 PMML 之间出现了空白,DMN 规范出现前,决策者无法参与到业务中。为了填补模型上的空白,新增了 DMN 规范,定义决策的规范以及图形,DMN 规范相当于业务流程模型与决策逻辑模型之间的桥梁。
虽然 DMN 只作为工作流与决策逻辑的桥梁,但实际上,规范中也包含决策逻辑部分,同时也兼容 PMML 规范所定义的表达式语言。换言之,实现 DMN 规范的框架,同时也会具有业务规则的处理能力。
Activiti 作为一个工作流引擎,与规则引擎 Drools 本来没有可比之处,它们之间更像互补关系,但是目前 Activiti 正在实现 DMN 规范,Drools 则实现了 PMML 规范,这样就意味着,Activiti 的工作引擎完成后,也包含了规则引擎的功能,根据 DMN 规范可知,DMN 规范的实现者,也会对 PMML 提供支持。如此一来,Activiti 的规则引擎与 Drools 将产生竞争关系。
JBoss 旗下有工作流引擎 jBPM,有规则引擎 Drools,Activiti 本身就是工作流引擎,再加上此次更新所加入的规则引擎,估计在不久的将来,Activiti 在工作流引擎以及规则引擎领域,能与 JBoss 分庭抗礼。
DMN 主要定义决策模型,与 BPMN 规范类似,OMG 发布的 DMN 规范含有对应的 XML 约束。当前版本的 Activiti 实现了 decision 部分,因此本章只讲述 DMN 中的 decision 部分。DMN 的 XML 文档,一般情况下文件名后缀为 dmn。代码清单 15- 1 是一份简单的 DMN 文档。
代码清单 15-1:codes\15\15.1\sample.dmn
代码清单 15- 1 中的 XML 文档,定义了一个 decision 节点,该节点中含有一个输入参数、一个输出结果和两个规则。注意代码清单的粗体字代码,使用了 startsWith 方法,定义了如果参数字符串以“Angus”开头,则触发第一个规则,如果参数字符以“Paris”开头,则触发第二个规则。关于 XML 文档中各个元素的描述,将在后面章节中讲述。