天天看點

【java規則引擎】drools6.5.0版本中kmodule.xml解析

kmodule.xml檔案存放在src/main/resources/META-INF/檔案夾下。

【java規則引擎】drools6.5.0版本中kmodule.xml解析
【java規則引擎】drools6.5.0版本中kmodule.xml解析

View Code

這個kmodule.xml的檔案的定義非常簡單,其實也很容易了解:

一個kmodule裡面包含了兩個kbase,這個也是我們這個例子裡面的兩個用例,分别對應drl規則檔案的例子,一個是對應Excel表格的規則例子。

每一個kbase都有一個name,可以取任意字元串,但是不能重名。

然後都有一個packages,可以看到packages裡面的字元串其實就是src/main/resources下面的檔案夾的名稱,或者叫包名,規則引擎會根據這裡定義的包來查找規則定義檔案。可以同時定義多個包,以逗号分隔開來就行。

每一個kbase下面可以包含多個ksession,當然本例中都自定義了一個。

每一個ksession都有一個name,名字也可以是任意字元串,但是也不能重複。

kbase和ksession裡面的name屬性是全局不能重複的。

kbase和ksession中其實還有很多其它的屬性,但是在這裡不是很重要,就先不提了,後面我們會一一講解的。

kbase的屬性:

屬性名

預設值

合法的值

描述

name

none

any

KieBase的名稱,這個屬性是強制的,必須設定。

includes

逗号分隔的KieBase名稱清單

意味着本KieBase将會包含所有include的KieBase的rule、process定義制品檔案。非強制屬性。

packages

all

逗号分隔的字元串清單

預設情況下将包含resources目錄下面(子目錄)的所有規則檔案。也可以指定具體目錄下面的規則檔案,通過逗号可以包含多個目錄下面的制品檔案。

default

false

true, false

表示目前KieBase是不是預設的,如果是預設的話,不用名稱就可以查找到該KieBase,但是每一個module最多隻能有一個KieBase。

equalsBehavior

identity

identity, equality

顧名思義就是定義“equals”(等于)的行為的,這個equals是針對Fact(事實)的,當插入一個Fact到 Working Memory中的時候,Drools引擎會檢查該Fact是否已經存在,如果存在的話就使用已有的FactHandle,否則就建立新的。而判斷Fact 是否存在的依據通過該屬性定義的方式來進行的:設定成 identity,就是判斷對象是否存在,可以了解為用==判斷,看是否是同一個對象; 如果該屬性設定成 equality的話,就是通過Fact對象的equals方法來判斷。

eventProcessingMode

cloud

cloud, stream

這個屬性暫時不用理會,在後面的CEP(Complex Event Processing:複合事件處理)章節會學習到。

declarativeAgenda

disabled

disabled, enabled

這是一個進階功能開關,打開後規則将可以控制一些規則的執行與否,暫時還沒有了解好,了解後再用專門的章節講述。

ksession的屬性:

KieSession的名稱,該值必須唯一,也是強制的,必須設定。

type

stateful

stateful, stateless

定義該session到底是有狀态(stateful)的還是無狀态(stateless)的,有狀态的session可以利用Working Memory執行多次,而無狀态的則隻能執行一次。

定義該session是否是預設的,如果是預設的話則可以不用通過session的name來建立session,在同一個module中最多隻能有一個預設的session。

clockType

realtime

realtime, pseudo

定義時鐘類型,用在事件處理上面,在複合事件處理上會用到,其中realtime表示用的是系統時鐘,而pseudo則是用在單元測試時模拟用的。暫時不用理會。

beliefSystem

simple

simple, jtms, defeasible

暫時還沒有搞清楚,等搞清楚之後再說.