drools规则引擎笔记(二)
规则引擎版本,drools6.5.0 final
eclipse:Neon
JDK1.8
今天主要是在规则的when部分加入了多个fact对象。
对于working memory存在多个fact的情形,其实和单个fact对象是类似的。需要注意的是,我们需要将多个多想都要插入working memory中才行。
下面是试验的代码,之前我已经在eclipse上安装了drools的插件,所以我的代码是在drools生成的木板上直接进行修改的。
针对本次试验,重要的几个文件如下

package com.audi.dto; public class TestDTO
{
private String condition;
private String action;
public String getCondition()
{
return condition;
}
public void setCondition(String condition)
{
this.condition = condition;
}
public String getAction()
{
return action;
}
public void setAction(String action)
{
this.action = action;
} }
package com.audi.util; public class TestUtils
{
public static String testDrl()
{
return "true";
}
}
下面的这段代码是规则的内容(其实语法和java很相似),注意下面的import语句,要在包名的末级加上*号,否则会报错:
package com.sample import com.audi.dto.*;
import com.audi.util.*; rule "testUtil"
when
$util:TestUtils();
$dto:TestDTO($util.testDrl()=="true");
then
$dto.setAction("sucess...");
System.out.println("------------hhhhhhhhhhhhhhh-------------");
end
下面是drools自动生成的xml文件,其实就是配置drools的三种规则文件的方式:
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="rules">
<ksession name="ksession-rules"/>
</kbase>
<kbase name="dtables" packages="dtables">
<ksession name="ksession-dtables"/>
</kbase>
<kbase name="process" packages="process">
<ksession name="ksession-process"/>
</kbase>
</kmodule>
下面是规则的测试代码,尤其要注意kSession.insert(new TestUtils());这一句,这就是把这个工具类插入working memory的代码,没了它会导致规则的when部分为false,从而导致规则匹配失败。
package com.sample; import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession; import com.audi.dto.TestDTO;
import com.audi.util.TestUtils; /**
* This is a sample class to launch a rule.
*/
public class DroolsTestUtil
{ public static final void main(String[] args)
{
try
{
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules"); // go !
TestDTO dto = new TestDTO();
dto.setCondition("test");
kSession.insert(new TestUtils());
kSession.insert(dto);
kSession.fireAllRules();
System.out.println("------------开始匹配-------------");
if (null == dto.getAction())
{
System.out.println("------------匹配失败-------------");
}
else
{
System.out.println("------------匹配成功-------------");
System.out.println(dto.getAction());
}
} catch (Throwable t)
{
t.printStackTrace();
}
} }

drools规则引擎笔记(二)的更多相关文章
- Drools规则引擎
一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...
- Drools 规则引擎环境搭建
一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...
- SpringBoot2 整合 Drools规则引擎,实现高效的业务规则
本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...
- (十五)整合 Drools规则引擎,实现高效的业务规则
整合 Drools规则引擎,实现高效的业务规则 1.Drools引擎简介 1.1 规则语法 2.SpringBoot整合Drools 2.1 项目结构 2.2 核心依赖 2.3 配置文件 3.演示案例 ...
- Drools 规则引擎应用
规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...
- Drools 规则引擎应用 看这一篇就够了
1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...
- 线上故障排查——drools规则引擎使用不当导致oom
事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...
- Drools规则引擎入门指南(一)
最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...
- drools规则引擎初探
https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles Forgy的RETE算 ...
随机推荐
- 如何开启MySQL远程访问权限 允许远程连接
1.改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...
- composer的安装和使用
由于工作中需要用到leancloud的LeanCloud PHP SDK,支持composer安装,所以就下载composer工具了, 安装之前可以用composer命令检测是否已经安装了,命令是:c ...
- Js基础之常用对象
今天来总结一下js中的常用对象: 1.string对象 常用方法: charAt():返回在指定位置的字符. charCodeAt():返回在指定的位置的字符的 Unicode 编码. concat( ...
- springboot springcloud eureka
参考: https://www.cnblogs.com/skyblog/p/5133752.htmlhttp://blog.csdn.net/u012734441/article/details/78 ...
- binlog之三:binlog开启、查看
0.开启二进制日志记录功能: #vim /etc/my.cnf [mysqld] log_bin=mysql-bin b ...
- 开发环境入门 linux基础 基本操作命令(部分) 文本结构和基本命令
文本结构和基本命令 linux系统中系统提示符:$ 表示普通用户 su root切换用户命令(用户名 root),输入密码,切换到其他用户状态 root 命令提示符:# exit 退出当前用户,返回 ...
- python正则以及collections模块
正则 一.认识模块 什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.p ...
- python 函数相关定义
1.为什么要使用函数? 减少代码的冗余 2.函数先定义后使用(相当于变量一样先定义后使用) 3.函数的分类: 内置函数:python解释器自带的,直接拿来用就行了 自定义函数:根据自己的需求自己定义的 ...
- 问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args
设置与读取C#控制台应用程序Main函数中的参数args 在项目属性面版->调试->命令行参数设置.空格分隔.读取:string[] str = Environment.GetComman ...
- ios下编译opencv
如果想要在ios下编译opencv 需要安装Cmake 这里通过homebrew 来安装cmake ios下打开终端然后先安装 homebrew :(mac 下自带ruby) ruby -e &quo ...