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

本文节选自《疯狂工作流讲义(第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

140509_5TSO_3665821.png

转载于:https://my.oschina.net/JavaLaw/blog/1557264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值