瘋狂Activiti6.0連載(12)DMN規範概述

本文節選自《瘋狂工做流講義(第2版)》html

京東購買地址:https://item.jd.com/12246565.htmlgit

瘋狂Activiti電子書:https://my.oschina.net/JavaLaw/blog/1570397框架

工做流Activiti教學視頻:https://my.oschina.net/JavaLaw/blog/1577577spa

DMN規範概述

        在第14章,咱們講解了Activiti與規則引擎的整合使用,確切來講,是Activiti與Drools規則引擎的整合。在Activiti6版本發佈後,Activiti開始實現DMN規範,換言之,Activiti正在實現本身的規則引擎,雖然還沒有完成,但已具雛形。本章將講述DMN規範以及初步實現的Activit規則引擎。.net

        筆者成書時,Activiti的規則引擎並無正式發佈,官方文檔、API中沒有找到相關的資料,本章內容爲筆者參考Activiti規則引擎模塊的源代碼編寫而成,在之後的Activiti版本中,規則引擎的實現及發佈的文檔,有可能與本書所描述的內容有所衝突,望讀者瞭解該狀況。code

DMN的出現背景

        DMN是英文Decision Model and Notation的縮寫,直譯意爲決策模型與圖形。根據前章節可知,BPMN是OMG公司發佈的工做流規範,而DMN一樣是OMG公司發佈規範,該規範主要用於定義業務決策的模型和圖形,1.0版本發佈於2015年,目前最新的是1.1版本,發佈於2016年。視頻

        BPMN主要用於規範業務流程,業務決策的邏輯由PMML等規範來定義,例如在某些業務流程中,須要由多個決策來決定流程走向,而每一個決策都要根據自身的規則來決定,而且每一個決策之間可能存在關聯,此時在BPMN與PMML之間出現了空白,DMN規範出現前,決策者沒法參與到業務中。爲了填補模型上的空白,新增了DMN規範,定義決策的規範以及圖形,DMN規範至關於業務流程模型與決策邏輯模型之間的橋樑。xml

        雖然DMN只做爲工做流與決策邏輯的橋樑,但實際上,規範中也包含決策邏輯部分,同時也兼容PMML規範所定義的表達式語言。換言之,實現DMN規範的框架,同時也會具備業務規則的處理能力。htm

 

Activiti與Drools

        Activiti做爲一個工做流引擎,與規則引擎Drools原本沒有可比之處,它們之間更像互補關係,可是目前Activiti正在實現DMN規範,Drools則實現了PMML規範,這樣就意味着,Activiti的工做引擎完成後,也包含了規則引擎的功能,根據DMN規範可知,DMN規範的實現者,也會對PMML提供支持。如此一來,Activiti的規則引擎與Drools將產生競爭關係。blog

        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

相關文章
相關標籤/搜索