文档章节

drools 学习笔记

解某人
 解某人
发布于 2017/05/26 10:52
字数 752
阅读 17
收藏 0

1、基本的使用

1.1、无状态回话

无状态回话,不使用推理,类似于函数的调用过程。传入参数->然后得到结果

主要有一下用途(不限于此)

  • 验证规则(Validation)
  • 计算数值(Calculation)
  • 路由和过滤(Routing and Filtering)
    • Filter incoming messages, such as emails, into folders.
    • Send incoming messages to a destination.

下面是一个简单的无状态回话的例子:

public class Applicant {
    private String name;
    private int age;
    private boolean valid;
    // getter and setter methods here
}

规则如下

package com.company.license
rule "Is of valid age"
when
    $a : Applicant( age < 18 )
then
    $a.setValid( false );
end

当Applicant实例插入到引擎中时,将根据规则的约束进行评估,在这种情况下,这只是一个规则的两个约束条件。第一个约束为 Applicant 类型约束,第二个为年龄(字段)大于18 也就是说满足这两个条件的实例才会匹配这个规则。 0-N个字段的约束被称为 模式 $a 是一个变量 绑定到被匹配的实例 他的属性可以更新(名称可以是任意的,建议用$开头 和 字段变量区别)

The process of matching patterns against the inserted data is, not surprisingly, often referred to as pattern matching.

插入的数据和这些模式的匹配过程叫做 模式匹配

1.2、有状态的回话

Stateful Sessions are long lived and allow iterative changes over time 有状态会话长期存在,并允许随着时间的推移进行迭代更改。(基番)

应用场景

  • Monitoring(监控) Stock market monitoring and analysis for semiautomatic buying.
  • Diagnostics(诊断) Fault finding, medical diagnostics
  • Logistics Parcel tracking and delivery provisioning
  • Compliance Validation of legality for market trades.

有状态session和无状态session不同的是 前者必须明确调用dispose()方法注销对象,(因为KieBase在创建状态知识会话时会包含它们的引用)

栗子:对房间火灾状况的监控 用四个类来表示 假设有一个房子每个房间(room)都有一个洒水器(Sprinkler),一个报警装置(Alarm) ;模拟出现火情(Fire)

public class Room {
    private String name
    // getter and setter methods here
}
public class Sprinkler {
    private Room room;
    private boolean on;
    // getter and setter methods here
}
public class Fire {
    private Room room;
    // getter and setter methods here
}
public class Alarm {
}

房子有许多房间,因此规则必须表达物体之间的关系,例如在某个房间内的喷洒器。 这最好通过使用绑定变量作为模式中的约束来完成。(基番)

rule "When there is a fire turn on the sprinkler"
when
    Fire($room : room)
    $sprinkler : Sprinkler( room == $room, on == false )
then
    modify( $sprinkler ) { setOn( true ) };
    System.out.println( "Turn on the sprinkler for room " + $room.getName() );
end

与无状态不同的是前面采用java 语法来修改字段,这里使用 modify 修改,他会通知规则引擎获取更改的动作,再次出发该动作,这个过程成为 推理 可以通过 sequential mode 关闭推理

下面模拟灭火后的情况

rule "When the fire is gone turn off the sprinkler"
when
    $room : Room( )
    $sprinkler : Sprinkler( room == $room, on == true )
    not Fire( room == $room )
then
    modify( $sprinkler ) { setOn( false ) };
    System.out.println( "Turn off the sprinkler for room " + $room.getName() );
end

© 著作权归作者所有

解某人
粉丝 0
博文 12
码字总数 2387
作品 0
乌鲁木齐
私信 提问
Drools 6.2.0.Beta1 发布

Drools 6.2.0.Beta1 发布,此版本引入了一个新的 Drools Execution Server。更多内容请看这里。 Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools ...

叶秀兰
2014/08/17
2K
1
Java 业务规则引擎--Drools

Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,...

匿名
2008/10/13
38.3K
6
Drools 6.4.0.Final 发布,Java 业务规则引擎

Drools 6.4.0.Final 发布了,Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,...

oschina
2016/04/19
3.1K
4
Drools 6.3.0.Final 发布,Java 业务规则引擎

Drools 6.3.0.Final 发布,此版本主要是平台的扩展和改进。 相关内容: Downloads Documentation Release Notes Drools 6.3 是跟 jBPM 一起发布的,主要改进: 实时验证和 Decision 表认证 ...

叶秀兰
2015/09/29
3.2K
4
Drools 6.2.0.Final 发布,Java 业务规则引擎

Drools 6.2.0.Final 发布,此版本主要关注可用性和易用性方面的改进:Workbench UI;支持社会活动和插件管理;规则方面全新的 Execution Server。 相关链接: News & Noteworthy Downloads ...

叶秀兰
2015/03/07
5.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写数据可视化大屏界面电子看板9-曲线效果

一、前言 为了编写数据可视化大屏界面电子看板系统,为了能够兼容Qt4和嵌入式linux系统,尤其是那种主频很低的,但是老板又需要在这种硬件上(比如树莓派、香橙派、全志H3、imx6)展示这么华...

飞扬青云
8分钟前
0
0
责任链模式

//这篇博客的博主真的不错,解析的都很清晰明了, https://blog.csdn.net/jason0539/article/details/45091639

南桥北木
34分钟前
2
0
Flutter -------- dio网络请求

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 1.添加依赖# dependencies: dio: 2.1.x #...

切切歆语
44分钟前
1
0
PHP的学习

PHP变量的命名必须以$符开始,如: $i;$j;$name; $符后面的第一个字符不可以是数字,只能是字母或者下划线(_)。 除了下划线(_)之外,变量中不能出现任何特殊字符,也就是变量只能包含...

墨冥
今天
2
0
一篇文章彻底搞懂Java虚拟机

概念: 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box,Java Virtual Machine(Jav...

骚年锦时
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部