【java规则引擎】drools6.5.0版本中kmodule.xml解析
kmodule.xml文件存放在src/main/resources/META-INF/文件夹下。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> 3 <kbase name="rules" packages="rules"> 4 <ksession name="ksession-rules"/> 5 </kbase> 6 <kbase name="dtables" packages="dtables"> 7 <ksession name="ksession-dtables"/> 8 </kbase> 9 </kmodule>
这个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 | none | 逗号分隔的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的属性:
属性名 | 默认值 | 合法的值 | 描述 |
---|---|---|---|
name | none | any | KieSession的名称,该值必须唯一,也是强制的,必须设置。 |
type | stateful | stateful, stateless | 定义该session到底是有状态(stateful)的还是无状态(stateless)的,有状态的session可以利用Working Memory执行多次,而无状态的则只能执行一次。 |
default | false | true, false | 定义该session是否是默认的,如果是默认的话则可以不用通过session的name来创建session,在同一个module中最多只能有一个默认的session。 |
clockType | realtime | realtime, pseudo | 定义时钟类型,用在事件处理上面,在复合事件处理上会用到,其中realtime表示用的是系统时钟,而pseudo则是用在单元测试时模拟用的。暂时不用理会。 |
beliefSystem | simple | simple, jtms, defeasible | 暂时还没有搞清楚,等搞清楚之后再说. |