当前位置:文档之家› drools 6

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>
相关主题