drools 6
规则
rule
注释
单行://
多行:/* ... */
开源改变人生
22
规则文件
关键字
hard
不能用作函数名、查询名、规则名、变量名 ...
true/false/null
soft
soft关键字可以使用,但应当避免 lock-on-active date-effective date-expires no-loop auto-focus activation-group agenda-group ruleflow-group entry-point duration package import dialect salience enabled attributes rule extend when then template query declare function global eval not in or and exists forall accumulate collect from action reverse result end over init
规则文件
规则文件
一般为.drl后缀
支持多种规则语言(目前为Java和mvel)
包声明
package ...
放在规则文件的最开头
函数定义
function T fn(){...}
开源改变人生
21
规则文件
类型声明
declare
查询
query
可对已有的类型声明元数据
开源改变人生
33
类型定义
预定义的类级元数据
@Role( <fact | event> )
指明是常规fact还是event
@timestamp( <attribute name> )
事件的时间戳属性
@duration( <attribute name> )
定时器、日历
定时器
使用表达式
可以带start/end/repeat-limit三个可选参数(;分隔)
开源改变人生
28
定时器、日历
日历
开源改变人生
29
示例
state
演示agenda-group和salience属性、规则触发顺序
硬编码实现规则难以应对变化 规则引擎集中化了规则(知识),易于维护
开源改变人生
2
规则引擎
为什么需要规则引擎?
基于累计结果的条件
基于不存在性的条件
基于时间的条件
规则需要延时触发
规则需要定时触发
开源改变人生
3
规则引擎
开源改变人生
13
安装
主要jar包
knowledge-api.jar – 提供接口和工厂类
knowledge-internal-api.jar – 内部接口和工厂类
drools-core.jar - 核心引擎。 包含RETE 和LEAPS算法实现 drools-compiler.jar – 用于编译规则
drools的eclipse插件
/drools/release/6.2.0.Final/org.drools.updatesite/
示例代码
https:///droolsjbpm/drools/tree/master/drools-examples https:///droolsjbpm/drools/tree/master/drools-examples-api
date-effective
规则生效日期
date-expires
规则失效日期
开源改变人生
24
规则属性
salience
优先级,数值越大越优先执行。默认为0 如果当前规则修改了fact,会导致当前规则再次被触发,no-loop避免了这种情况。避免 当前规则进入无限循环
为什么需要规则引擎?
一条规则的触发引起其他规则被触发
一条规则触发后需要再次触发
多轮规则触发,规则触发是迭代式的,当数据发生变化后需要再次触发
开源改变人生
4
规则引擎
为什么需要规则引擎?
规则需要分优先级
规则需要分组,一次激活一组
规则存在互斥关系,多条规则只能有一条规则被触发
11
开源改变人生
安装
二进制发布(含示例)
drools-distribution-6.2.0.Final.zip
droolsjbpm-integration-distribution-6.2.0.Final.zip
Drools Workbench
kie-drools-wb-distribution-6.2.0.Final.zip
开源改变人生
30
类型定义
类型定义
declare ... end
开源改变人生
31
类型定义
类型继承
extends
开源改变人生
32
类型定义
声明元数据
@metadata_key( metadata_value )
@PropertyReactive
细粒度的属性变化监听 (右边规则不加no-loop也不会导致无限循环)
开源改变人生
35
类型定义
预定义的属性级元数据
@key
影响生成的Java类的equals()和hashCode()方法的实现,
以及根据key产生相应的构造函数
事件的持续时间属性
@expires( <time interval> )
Fact的失效时间间隔(仅当引擎运行于STREAM模式时)
开源改变人生
34
类型定义
预定义的类级元数据
@propertyChangeSupport
引擎监听Fact的属性变化
(按照JavaBean规范)
开源改变人生
23
规则属性
dialect
规则语言。当前只有java和mvel,默认为Java
Java
$order.setDiscountedTotal($order.getGrossTotal() * 0.95);
mvel
$order.discountedTotal = $order.grossTotal * 0.95
KIE
Knowledge Is Everything
目前除OptaPlanner外,其他都使用统一版本号
基于GWT的WEB框架
UberFire
受Eclipse启发(布局管理)
KIE-WB
KIE Workbench
基于UberFire
采用Git存储资源 采用插件机制,各种编辑器以插件形式加入
Fact
开源改变人生
18
Drools的工作方式
推断引擎
模式匹配
执行安排(Agenda)
开源改变人生
19
示例
Banking
Example1 ... Example6
开源改变人生
20
drools-规则引擎
恒拓开源信息科技有限公司
2015-3
规则引擎
为什么需要规则引擎?
硬编码实现规则难以维护
if(...) { ... } else if(...) { ... } else if(...) { ... } ...
switch(...) ( ) case { ... } ...
drools-jsr94.jar - JSR-94兼容实现
drools-decisiontables.jar – 用于编译决策表
开源改变人生
14
安装
引入Maven项目
<dependency> <groupId>org.kie</groupId> <artifactId>kie-api</artifactId> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-decisiontables</artifactId> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-templates</artifactId> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-internal</artifactId> </dependency>