侧边栏壁纸
  • 累计撰写 2,046 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

Drools必须掌握的基础知识

大猿本猿
2021-11-14 / 762 阅读 / 0 字

Drools必须掌握的基础知识

语法结构

rule "ruleName"
    attributes
    when
        LHS 
    then
        RHS
end

内置方法

update

insert

retract

规则属性

enable

salience

no-loop

activation-group

date-effective date-expires

必须知道的相关组件概念

(1)KieServices:kie整体的入口,可以用来创建Container,resource,fileSystem等。

(2)KieContainer: KieContainer就是一个KieBase的容器,可以根据kmodule.xml 里描述的KieBase信息来获取具体的KieSession。

(3)KieBase: KieBase就是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,

KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession。

(4)KieSession:就是一个跟Drools引擎打交道的会话,其基于KieBase创建,它会包含运行时数据,包含“事实 Fact”,并对运行时数据事实进行规则运算。

(5)KieModule:是一个包含了多个kiebase定义的容器。一般用kmodule.xml来表示。

(6)KieModuleModel:是kmodule.xml 文件的java表示,可以不用添加xml文件而是通过程序代码的方式来构建,

(7)KieFileSystem:一个内存文件系统,用于以编程方式定义组成KieModule的资源

(8)KieBuilder:当把所有的规则文件添加到KieFileSystem中后,通过把KieFileSystem传递给一个KieBuilder,

可以构建出这个虚拟文件系统。其中有个buildAll()方法,会在构建好虚拟文件系统后,自动去构建KieModule

(9)KieRepository:是一个KieModule的仓库,包含了所有的KieModule描述,用一个ReleaseId做区分

(10)KieResources:是一个定义了如何获取资源的工厂,包括url,classpath,filesystem等

有状态session与无状态session

通过KieContainer可以获取KieSession,在kmodule.xml配置文件中如果不指定ksession的type默认也是有状态的session。

有状态session的特性是,我们可以通过建立一次session完成多次与规则引擎之间的交互,在没有调用dispose方法时,会维持会话状态。

使用KieSession的一般步骤为,获取session,insert Fact对象,然后调用fireAllRules进行规则匹配,随后调用dispose方法关闭session。

StatelessKieSession提供了一个更加便利的API,是对KisSession的封装,不再调用dispose方法进行session的关闭。它隔离了每次与规则引擎的交互,不会再去维护会话的状态。同时也不再提供fireAllRules方法。

使用场景:

(1)数据校验

(2)运算

(3)数据过滤

(4)消息路由

(5)任何能被描述成函数或公式的规则