文档章节

疯狂Activiti6.0连载(12)DMN规范概述

杨大仙的程序空间
 杨大仙的程序空间
发布于 2017/10/27 16:16
字数 1180
阅读 906
收藏 5

本文节选自《疯狂工作流讲义(第2版)》

京东购买地址:https://item.jd.com/12246565.html

疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397

工作流Activiti教学视频:https://my.oschina.net/JavaLaw/blog/1577577

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

疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397

工作流Activiti教学视频:https://my.oschina.net/JavaLaw/blog/1577577

本书代码目录:https://gitee.com/yangenxiong/CrazyActiviti

© 著作权归作者所有

共有 人打赏支持
杨大仙的程序空间

杨大仙的程序空间

粉丝 921
博文 74
码字总数 125484
作品 0
广州
架构师
私信 提问
疯狂Activiti6.0连载(13)DMN的XML规范

本文节选自《疯狂工作流讲义(第2版)》 京东购买地址:https://item.jd.com/12246565.html 疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397 工作流Activiti教学视频:htt...

杨大仙的程序空间
2017/11/03
0
0
疯狂Activiti6.0连载(14)Activiti运行第一个DMN应用

本文节选自《疯狂工作流讲义(第2版)》 京东购买地址:https://item.jd.com/12246565.html 疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397 工作流Activiti教学视频:htt...

杨大仙的程序空间
2017/11/08
0
1
Activiti6.0零编程部署工作流(一)

概述 前一篇文章《十分钟认识Activiti6.0工作流引擎》站在工程师的视角快速编码体验了一把工作流,为了更纯粹的体验Activiti提供的核心API的功能,我们在命令行交互下体验了流程审批的过程,...

JimmyNo1
06/27
0
0
《连载 | 物联网框架ServerSuperIO教程》- 12.服务接口的开发,以及与云端双向交互

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明 《连载...

唯笑志在
2016/11/25
0
0
《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载

注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。 《连载 ...

唯笑志在
2016/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
今天
4
0
windows上类似dnsmasq的软件Dual DHCP DNS Server

官网地址:http://dhcp-dns-server.sourceforge.net/官网定向的下载地址:https://sourceforge.net/projects/dhcp-dns-server/files/ 设置参考地址:http://blog.51cto.com/zhukeqiang/18264......

xueyuse0012
今天
3
0
LinkedHashMap源码解析

前言 HashMap中的元素时无序的,也就是说遍历HashMap的时候,顺序和放入的顺序是不一样的。 如果需要有序的Map,就可以采用LinkedHashMap. LinkedHashMap通过维护一个包含所有元素的双向链表,...

grace_233
今天
4
0
初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
6
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部