疯狂Activiti6连载(12)DMN规范概述
来源:互联网 发布:怎么使用淘宝钻石展位 编辑:程序博客网 时间:2024/05/22 17:15
本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
DMN规范概述
在第14章,我们讲解了Activiti与规则引擎的整合使用,确切来说,是Activiti与Drools规则引擎的整合。在Activiti6版本发布后,Activiti开始实现DMN规范,换言之,Activiti正在实现自己的规则引擎,虽然尚未完成,但已具雏形。本章将讲述DMN规范以及初步实现的Activit规则引擎。
笔者成书时,Activiti的规则引擎并没有正式发布,官方文档、API中没有找到相关的资料,本章内容为笔者参考Activiti规则引擎模块的源代码编写而成,在以后的Activiti版本中,规则引擎的实现及发布的文档,有可能与本书所描述的内容有所冲突,望读者了解该情况。
DMN的出现背景
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作为一个工作流引擎,与规则引擎Drools本来没有可比之处,它们之间更像互补关系,但是目前Activiti正在实现DMN规范,Drools则实现了PMML规范,这样就意味着,Activiti的工作引擎完成后,也包含了规则引擎的功能,根据DMN规范可知,DMN规范的实现者,也会对PMML提供支持。如此一来,Activiti的规则引擎与Drools将产生竞争关系。
JBoss旗下有工作流引擎jBPM,有规则引擎Drools,Activiti本身就是工作流引擎,再加上此次更新所加入的规则引擎,估计在不久的将来,Activiti在工作流引擎以及规则引擎领域,能与JBoss分庭抗礼。
DMN的XML样例
DMN主要定义决策模型,与BPMN规范类似,OMG发布的DMN规范含有对应的XML约束。当前版本的Activiti实现了decision部分,因此本章只讲述DMN中的decision部分。DMN的XML文档,一般情况下文件名后缀为dmn。代码清单15-1是一份简单的DMN文档。
代码清单15-1:codes\15\15.1\sample.dmn
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/DMN/20151130"
id="simple" name="Simple" namespace="http://activiti.org/dmn">
<decision id="decision1" name="Simple decision">
<decisionTable id="decisionTable">
<input id="input1">
<inputExpression id="inputExpression1" typeRef="string">
<text>input1</text>
</inputExpression>
</input>
<output id="output1" label="Output 1" name="output1" typeRef="string" />
<rule>
<inputEntry id="inputEntry1">
<text><![CDATA[.startsWith('Angus')]]></text>
</inputEntry>
<outputEntry id="outputEntry1">
<text>'Hello, man!'</text>
</outputEntry>
</rule>
<rule>
<inputEntry id="inputEntry2">
<text><![CDATA[.startsWith('Paris')]]></text>
</inputEntry>
<outputEntry id="outputEntry2">
<text>'Hello, baby!'</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
</definitions>
代码清单15-1中的XML文档,定义了一个decision节点,该节点中含有一个输入参数、一个输出结果和两个规则。注意代码清单的粗体字代码,使用了startsWith方法,定义了如果参数字符串以“Angus”开头,则触发第一个规则,如果参数字符以“Paris”开头,则触发第二个规则。关于XML文档中各个元素的描述,将在后面章节中讲述。
本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti
- 疯狂Activiti6连载(12)DMN规范概述
- 疯狂Activiti6.0连载(13)DMN的XML规范
- 疯狂Activiti6.0连载(15)DMN规则匹配表达式
- 疯狂Activiti6.0连载(14)Activiti运行第一个DMN应用
- 疯狂Activiti6.0连载(17) Drools规则语法概述
- 疯狂Activiti6连载(11)Activiti6的流程控制逻辑
- 疯狂Activiti6连载(1)Activiti介绍
- 疯狂Activiti6连载(8)Activiti数据查询(一)
- 疯狂Activiti6连载(9)Activiti数据查询(二)
- 疯狂Activiti6连载(2)下载和运行Activiti
- 疯狂Activiti6连载(3)Activiti开发环境搭建
- 疯狂Activiti6连载(4)流程引擎数据源配置
- 疯狂Activiti6连载(5)流程引擎的创建
- 疯狂Activiti6连载(6)邮件服务器与history配置
- 疯狂Activiti6连载(7)Activiti的设计模式
- 疯狂Activiti6连载(10)特别子流程
- 疯狂Activiti6.0连载(16) Drools介绍与运行
- 疯狂Activiti6.0连载(18) Activiti与Drools整合
- 两个单链表生成相加链表
- 人生不如意事十之八九,90% 是因为没女朋友
- Android调用本机地图APP
- c++实现求哈夫曼数及其对应的哈夫曼编码和译妈
- SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 疯狂Activiti6连载(12)DMN规范概述
- Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!解决方法
- Eclipse 关闭 updating indexes
- 计数排序java
- Gitblit环境搭建(w7 64位环境)
- Android7.0 android.os.FileUriExposedException
- CC26xx &&CC13xx 多线程
- 轻重链剖分
- android studio使用技巧