drools原生drl规则文件的使用
在初识drools中对drl文件进行了简单的介绍。这里举个例子来具体说明下。主要是写了规则之后我们如何用java代码来run起来。
drl文件内容如下:
rule "ageUp12" when
$student: Student(age > 2)
then
$student.ageUp12();
end rule "nameMax" when
$student: Student(name == "max")
then
$student.nameMax();
retract($student);
end rule "class" when
$student:Student()
then
$student.toString();
retract($student);
end rule "testList" when
$student : Student($age : age)
not Student(age < $age)
then
System.out.println("age = " + $age);
retract($student);//这里导致了LHS的变化 然后会重新触发规则的匹配慎用 这里只是为了展示排序的例子,然后这个rule可以排序。。。。
end
我们在文件中import了一个Student类,代码很简单,就是一个javaBean,里面有两个字段:int age和String name;然后还有几个方法,ageUp12(),nameMax()
然后我们怎么把这个文件和java代码关联起来呢,直接上代码
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//ResourceFactroy是个获取各种资源的工厂,比如newUrlResource,这里ResourceType指明了规则文件的类型,里面有我们在决策表中用到的xls哦
knowledgeBuilder.add(ResourceFactory.newClassPathResource("drools/mydrools.drl"), ResourceType.DRL);
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());
StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession();
Student student = new Student(13,"max");
Student student1 = new Student(11,"max");
knowledgeSession.insert(student);//具体的java类对象添加到workingMemory中。
knowledgeSession.insert(student1);
knowledgeSession.fireAllRules();
在这段代码里我们看到 最后真正去执行的是一个叫做knowledgeSession的东西,这是一个会话,实现了KieSession接口,这个接口的实现类本身包含数据,规则并且执行真正的操作。在规则表里面还会提到。
然后前面我们构造了一个KnowledgeBuilder,来把规则文件加载到drools里,然后构造了一个KnowledgeBase,并从这个KnowlegeBase中获取一个实际操作的会话。
这里对这几个class做一下简单介绍:
KnowledgeBuilder主要是加载规则文件到drools规则引擎中,用于根据规则引擎文件来构造知识仓库。
KnowledgeBase是对一个规则文件的抽象,可以看下他的父类接口KieBase,在英文文档中是这么介绍的:KieBase就是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession
StatefulKnowledgeSession是一个KieSession实现类,这个接口在英文文档中是这么介绍的:KieSession就是一个跟Drools引擎打交道的会话,其基于KieBase创建,它会包含运行时数据,包含“事实 Fact”,并对运行时数据事实进行规则运算
注:这里用到的几个class都是kie-api中的类,这个api在drools中的作用非常之重要,我们在前面的博客里已经有所讲解。而且也是决策表中的主要组件。
![]()
drools原生drl规则文件的使用的更多相关文章
- Drools 规则文件语法概述
概述(Overview) 以.drl为扩展名的文件,是Drools中的规则文件,规则文件的编写,遵循Drools规则语法.下面详细介绍一下Drools规则文件语法.具体参考官方文档: https:// ...
- Drools学习笔记1—规则文件
Facts(即普通的POJO) 指普通业务对象插入到Workingmemory后的对象规则可以对fact对象进行任意的对象操作是规则与应用系统交换的桥梁返回FactHandler对象,是插入到Work ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
转载至:https://blog.csdn.net/wo541075754/article/details/75150267 一个标准的规则文件的格式为已“.drl”结尾的文本文件,因此可以通过记事本 ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
一个标准的规则文件的格式为已".drl"结尾的文本文件,因此可以通过记事本工具进行编辑.规则放置于规则文件当中,一个规则文件可以放置多条规则.在规则文件当中也可以存放用户自定义的函 ...
- Struts2的输入校验(1)——校验规则文件的编写
Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: ...
- 如何在jenkins的maven项目中,用mvn命令行指定findbugs的黑名单规则文件
一:问题背景 最近在研究jenkins的过程中,针对maven项目,打算添加findbugs进行静态检查,但我不太想在项目的pom中进行修改,最好可以只修改jenkins的job配置,即配置外部化. ...
- 抽取非基本验证到规则文件 - A2D规则引擎
基本验证与业务验证,基本验证就是始终保持不变的验证规则,可以通过如下硬编码实现: public class Order { [Required] [Range(")] public deci ...
- AWVS11提取规则文件
在这里给大家分享一个获取AWVS规则文件的思路. 目前我提取的是17年4月份的扫描规则. 后面如果规则更新,可以自行提取 官网: https://www.acunetix.com/vulne ...
- udev的规则文件
转载于:https://linux.cn/article-9365-1.html 介绍 在 GNU/Linux 系统中,虽然设备的底层支持是在内核层面处理的,但是,它们相关的事件管理是在用户空间中通过 ...
随机推荐
- 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx
踩坑经历 因为项目需要去对接别的接口,使用URLConnection POST请求https接口,发送json数组时遇到java.io.IOException: Server returned HTT ...
- Openstack组件部署 — Nova_安装和配置Controller Node
目录 目录 前文列表 Prerequisites 先决条件 To create the databases To create the service credentials Create the C ...
- IIS身份验证和文件操作权限(三、ASP.NET模拟)
一.配置ASP.NET模拟 注意:在配置[ASP.NET模拟]是还要配置[匿名身份验证]不知道为什么,有知道可以留言,互相学习 二.浏览站点 -- 操作文件 ①无操作权限 点击写入 ②有操作权限(特定 ...
- System.getenv()和System.getProperty()
System.getenv() 方法是获取指定的环境变量的值. System.getenv(String str) 接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null. S ...
- maven surefire入门
一.maven常用命令: mvn compile mvn install mvn test mvn clean mvn dependency:resolve -X #查看完整的debug信息!!! ...
- UVA 10005 Packing polygons(最小圆覆盖)
裸的模板题 AC代码: #include<cstdio> #include<cmath> #include<algorithm> #include<iostr ...
- Codeforces 1191B Tokitsukaze and Mahjong
题目链接:http://codeforces.com/problemset/problem/1191/B 题意:类似于麻将,三个一样花色一样数字的,或者三个同花顺就赢了,新抽的能当任何类型,问至少几个 ...
- 专题:NFSv4 file server
Network File System (NFS) is a file system protocol that allows client machines to access network at ...
- Day 21 python :面向对象 类的相关内置函数 /单例模式 /描述符
1.isinstance(obj,cls) 检查obj是否是类cls的对象: 备注:用isinstance 的时候,产生实例后,会显示实例既是父类的实例,也是子类的实例 class Mom: gend ...
- 52-Ubuntu-打包压缩-2-打包/解包
tar是Linux中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以把一个打包的大文件恢复成一系列文件. 序号 命令 作用 01 tar -cvf 打包文件.tar 被打包文件 打包 ...