Drools 学习笔记

【声明】本文为AdamsLee原创,转载请注明出自围炉网并保留本文有效链接:Drools 学习笔记, 转载请保留本声明!

先创建KieService,再由KieService创建 KieContainer。KieContainer 创建 KieSession。KieSession创建成本很低,同时它包含了运行时的数据,所以可以销毁、创建若干次。

KieService 可以创建KieScanner ,KieScanner遍历本地或远程maven规则jar是否更新。

在运行时,KieContainer会根据*Model对象来创建KieModule、KieBase、KieSession对象。其中KieModule和KieBase只会创建一次。

KieServices提供了很多方法,可以通过这些方法访问KIE关于构建和运行的相关对象,比如获取KieContainer,利用KieContainer来访问KBase和KSession等信息;可以获取KieRepository对象,利用KieRepository来管理KieModule等。KieServices就是一个中心,通过它来获取各种对象来完成规则构建、管理和执行等操作。

KieContainer 可以理解为是一个KieBase的容器。

KieBase可以理解为是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession。

KieSession就是一个到规则引擎的链接,通过它就可以跟规则引擎通讯,并且发起执行规则的操作。通过KieSession.fireAllRules方法来通知规则引擎执行规则,KieSession.dispose()将KieSession链接关闭。通过KieContainer创建KieSession是一种较为方便的做法,其实他本质上是从KieBase中创建出来的。

KieRepository是一个单例对象,是一个存放KieModule的仓库,KieModule由kmodule.xml文件定义(不仅仅只用它来定义)

KieProject用来初始化KieContainer, KieContainer可以通过KieProject来查找KieModule定义的信息,并根据这些信息构造KieBase和KieSession。

ClasspathKieProject实现了KieProject接口,它提供了根据类路径中的META-INF/kmodule.xml文件构造KieModule的能力,也就是能够基于Maven构造Drools组件的基本保障之一。

KnowledgeBuilder 用来在业务代码当中收集已经编写好的规则,然后对这些规则文件进行编译,最终产生一批编译好的规则包(KnowledgePackage)给其它的应用程序使用。

KnowledgeBase 用来收集应用当中知识(knowledge),在一个KnowledgeBase当中可以包含普通的规则(rule)、规则流(rule flow)、函数定义(function)、用户自定义对象(type model)等

KnowledgeBase本身不包含任何业务数据对象(fact对象:JavaBean set到Working Memory后的对象)

业务数据对象(fact对象)都是插入到KnowledgeBase产生的两种类型的session对象当中(StatefulKnowledgeSession和StatelessKnowledgeSession)

RuleAgent 不需要每次都创建一个 RuleBase,当服务器规则文件更新时,StatefulSession 能够自动更新。url 是设置成服务器上已部署的规则文件地址。

通过宏对象drools的使用可以更多的操作当前WorkingMemory的方法;同时Drools还提供了一个名为kcontext的宏对象,用它可以访问当前Working Memory的KnowledgeRuntime。

Drools提供了一个接口,通过它用户可以从应用程序代码处理规则文件内部声明的类型

规则模板使用任何表格式的数据源作为一个规则数据源,将其填入模板产生多条规则。利用规则模板,数据与规则分离。

Java程序通过远程地址读取kie-drools仓库内的规则

KieScanner自动扫描workbench中的jar包

KieHelpper可以添加纯文本String作为规则

在没有调用最后一步fireAllRules方法之前,所有的规则及插入的fact对象都存放在一个名叫Agenda表的对象当中,这个Agenda表中的每一个规则及与其匹配相关业务数据叫做Activation,在调用fireAllRules方法后,这些Activation会依次执行,这些位于Agenda表中的Activation的执行顺序在没有设置相关用来控制顺序的属性时(比如salience属性),他的执行顺序是随机的,不确定的。

此条目发表在未分类分类目录,贴了标签。将固定链接加入收藏夹。