【java规则引擎】drools6.5.0版本中kmodule.xml解析

发布者:Love Lenka
发布于:2017-07-04 17:43

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>
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 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 暂时还没有搞清楚,等搞清楚之后再说.

声明:该文观点仅代表作者本人,转载请注明来自看雪