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)任何能被描述成函数或公式的规则