Drools入门之kmodule.xml文件

kmodule.xml是一个规则引擎的核心配置文件,它与Spring类似,都需要有相对应的配置文件做统一管理。它的主要功能是用来设置规则库名称、包路径、规则会话名称、规则会话类型等。

kmodule.xml文件要放到src/main/resources/META-INF/文件夹下。

kmodule.xml配置文件,其内容为:

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <kbase name="rules" packages="rules">
        <ksession name="testhelloworld"/>
    </kbase>
</kmodule>
  1. 一个kmodule.xml配置中可包含多个KieBase,每一个KieBase都有name属性,可以取任意字符串,但不能重名
  2. KieBase有一个packages属性,它的值是一段字符串形式的路径信息,其内容是指src/main/resources目录下文件夹的名称,或者称之为包名,规则引擎会根据packages定义的内容查找规则文件。可以同时定义多个包,以逗号进行分隔。每一个KieBase可以包含多个KieSession。
  3. 每一个KieSession都有一个名称,名称可以是任意字符串,但是不能重复。Java代码中KieSession设置的name就是在执行规则代码时的name,是用来指定操作具体规则的。
  4. packages指定当前路径下的所有规则文件都会被读取。例如,在rules/Hello目录下定义了10个规则文件,运行时,这10个文件都会被加载,当然也只有满足条件的规则文件才会被执行。注意,如果在rules/Hello下有子目录,那么子目录中的规则文件不会被加载。
  5. 避免分析(4)中的问题,解决方案有以下3种。
    • 设计多个规则文件目录,每一种只放一个规则文件。虽然这种方式比较烦琐,但确实可以解决这类问题。
    • 指定规则名,规则名称指规则文件中的rule参数,第7章中有指定规则名称的详细说明。
    • 指定规则文件名的方式,这种方式是通过API实现的,与第二种相似。
  6. 就分析(4)而言,要注意的问题很多,同一目录下规则文件中的规则名称不能重复,当目录中含有多个规则文件时,通过insert进行插入对象操作,则规则文件中的所有规则都将有这样的值,规则之间既相互独立,又相互依赖。

KieBase属性说明

image-20220703155644991

KieSession属性说明

image-20220703155825987


Drools入门之kmodule.xml文件
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/drools-kmodule
作者
卑微幻想家
发布于
2022-06-20
许可协议