kmodule.xml檔案存放在src/main/resources/META-INF/檔案夾下。
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
暫時還沒有搞清楚,等搞清楚之後再說.