《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
3.2.4 KieServices
该接口提供了很多方法,可以通过这些方法访问KIE关于构建和运行的相关对象,比如说可以获取KieContainer,利用KieContainer来访问KBase和KSession等信息;可以获取KieRepository对象,利用KieRepository来管理KieModule等。
KieServices就是一个中心,通过它来获取的各种对象来完成规则构建、管理和执行等操作。
示例demo:
// 通过单例创建KieServices
KieServices kieServices = KieServices.Factory.get();
// 获取KieContainer
KieContainer kieContainer = kieServices.getKieClasspathContainer();
// 获取KieRepository
KieRepository kieRepository = kieServices.getRepository();
3.2.5 KieContainer
可以理解KieContainer就是一个KieBase的容器。提供了获取KieBase的方法和创建KieSession的方法。其中获取KieSession的方法内部依旧通过KieBase来创建KieSession。
// 通过单例创建KieServices
KieServices kieServices = KieServices.Factory.get();
// 获取KieContainer
KieContainer kieContainer = kieServices.getKieClasspathContainer();
// 获取KieBase
KieBase kieBase = kieContainer.getKieBase();
// 创建KieSession
KieSession kieSession = kieContainer.newKieSession("session-name");
3.2.6 KieBase
KieBase就是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession。
// 获取KieBase
KieBase kieBase = kieContainer.getKieBase();
KieSession kieSession = kieBase.newKieSession();
StatelessKieSession statelessKieSession = kieBase.newStatelessKieSession();
3.2.7 KieSession
KieSession就是一个跟Drools引擎打交道的会话,其基于KieBase创建,它会包含运行时数据,包含“事实Fact”,并对运行时数据实时进行规则运算。通过KieContainer创建KieSession是一种较为方便的做法,其本质上是从KieBase中创建出来的。KieSession就是应用程序跟规则引擎进行交互的会话通道。
创建KieBase是一个成本非常高的事情,KieBase会建立知识(规则、流程)仓库,而创建KieSession则是一个成本非常低的事情,所以KieBase会建立缓存,而KieSession则不必。
3.2.8 KieRepository
KieRepository是一个单例对象,它是存放KieModule的仓库,KieModule由kmodule.xml文件定义(当然不仅仅只是用它来定义)。
// 通过单例创建KieServices
KieServices kieServices = KieServices.Factory.get();
// 获取KieRepository
KieRepository kieRepository = kieServices.getRepository();
3.2.9 KieProject
KieContainer通过KieProject来初始化、构造KieModule,并将KieModule存放到KieRepository中,然后KieContainer可以通过KieProject来查找KieModule定义的信息,并根据这些信息构造KieBase和KieSession。
3.2.10 ClasspathKieProject
ClasspathKieProject实现了KieProject接口,它提供了根据类路径中的META-INF/kmodule.xml文件构造KieModule的能力,是基于Maven构造Drools组件的基本保障之一。意味着只要按照前面提到过的Maven工程结构组织我们的规则文件或流程文件,只用很少的代码完成模型的加载和构建。
3.2.11 kmodule.xml
kmodule的简单配置规则在上面的实例中已经简单介绍,下面具体介绍具体的配置。
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 | 当以云模式编译时,KieBase将事件视为正常事实,而在流模式下允许对其进行时间推理。 |
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,defeasible, jtms | 定义KieSession使用的belief System的类型。 |
后语
你的支持是我努力的最大动力!此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。如有疑问可以留言也可以发送本人邮箱secbro2@gmail.com。
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析的更多相关文章
- 《Drools7.0.0.Final规则引擎教程》Springboot+规则重新加载
在<Drools7.0.0.Final规则引擎教程>之Springboot集成中介绍了怎样将Drools与Springboot进行集成,本篇博客介绍一下集成之后,如何实现从数据库读取规则并 ...
- 《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
3.1 Hello World 实例 在上一章中介绍了Drools5x版本中规则引擎使用的实例,很明显在Drools7中KnowledgeBase类已经标注为"@Deprecated&quo ...
- 《Drools7.0.0.Final规则引擎教程》第2章 追溯Drools5的使用
2.1 Drools5简述 上面已经提到Drools是通过规则编译.规则收集和规则的执行来实现具体功能的.Drools5提供了以下主要实现API: KnowledgeBuilder Knowledge ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器
定时器 规则用基于 interval(间隔)和cron的定时器(timer),替代了被标注过时的duration 属性.timer属性的使用示例: timer ( int: <initial d ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器
定时器 规则用基于 interval(间隔)和cron的定时器(timer),替代了被标注过时的duration 属性.timer属性的使用示例: timer ( int: <initial d ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
转载至:https://blog.csdn.net/wo541075754/article/details/75004575 3.2.4 KieServices 该接口提供了很多方法,可以通过这些方法 ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
转载:https://blog.csdn.net/wo541075754/article/details/74943236 3.2.1 什么是KIE KIE(Knowledge Is Everythi ...
- 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
3.2.1 什么是KIE KIE(Knowledge Is Everything),知识就是一切的简称.JBoss一系列项目的总称,在<Drools使用概述>章节已经介绍了KIE包含的大部 ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus
转载至:https://blog.csdn.net/wo541075754/article/details/75349556 auto-focus 在agenda-group章节,我们知道想要让Age ...
随机推荐
- Socket类的用法
原文:http://www.cnblogs.com/Elijah/archive/2011/11/29/2268047.html Socket可以理解成一个IP地址加一个端口,构成的一个“插座”... ...
- Java应用程序连接数据库--JDBC基础
Java应用程序连接数据库--JDBC基础 Java应用程序连接数据库–JDBC基础 <!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency&g ...
- cdojQ - 昊昊爱运动 II
地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...
- HDU - 6435 Problem J. CSGO 2018 Multi-University Training Contest 10 (二进制枚举+思维)
题意:有N个主武器(MW)和M个副武器(SW),每个武器都有自己的S值,和K个附加属性xi.要选取一对主副武器搭配,搭配后获得的性能由该公式得出: 求获得最大的性能为多少. 分析:由于|xm - xs ...
- git使用基础
一.git介绍 git是由 Linus 开发的一种“分布式版本控制”软件,而在此之前,版本控制基本上都是“集中式版本控制”,如:CVS,SVN 等.两者的区别: 1. "集中式版本控制系统& ...
- nodejs多核处理
前言大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,有人开发了第三方的cluster,让node可以利用多核CPU实现并行. 随着nod ...
- Kotlin学习记录1
参考我的博客:http://www.isedwardtang.com/2017/09/02/kotlin-primer-1/
- python 课堂笔记-购物车
# Author:leon production_list = [ ('iphone',5800), ('mac pro', 9800), ('bike', 800), ('watch', 10600 ...
- hadoop21---使用代理修改List,代理流程
package cn.itcast_05_proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Met ...
- Linux网络IO函数以及TCP连接函数包装
标准I/O VS 网络IO 标准I/O又称为标准I/O流,从某种意义上讲是全双工的,因为程序能够在同一个流上执行输入和输出. Unix/Linux对网络的抽象是一种称为套接字的文件类型.和任何Unix ...