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学习之classpath
要运行class文件,必须在class文件所在的目录下,那么是不是也可以通过设置系统变量来配置呢,当然有了classpath就来了 环境变量配置有两种 1.一劳永逸的 2.set 临时变量 我们用临时 ...
- 戏说 .NET GDI+系列学习教程(三、Graphics类的应用_自定义控件--主要用于画面拖拽效果)
如题,需求:在某个图片上用户可以手动指定位置. 如下: 中心思想:仿照Visual Studio工具中的控件的做法 如何仿照呢? 1.自定义的控件类继承System.Windows.Forms.Con ...
- 如何解决Unsupported major.minor version 52.0问题?
为什么出现Unsupported major.minor version 52.0? You get this error because a Java 7 VM tries to load a cl ...
- 剑指offer——48把数字翻译成字符串
题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”.一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcf ...
- 装机时键盘选择失误?教你修改kali Linux键盘到美式。
在Linux装机选择键盘的时候,由于学的是英式英语而选择了英式键盘,结果吃了大亏.英式键盘和我们平时使用的美式键盘的键位是不一样的! 这是我们平时使用的美式键盘: 这是英式键盘: 修改的方式是: 点击 ...
- <思维导图>思维导图
- idea springboot 打包 war
1.pom文件中将项目改为 war
- springboot + zipkin + mysql
zipkin的数据存储可以存在4个地方: 内存(仅用于测试,数据不会持久化,zipkin-server关掉,数据就没有了) 这也是之前使用的 mysql 可能是最熟悉的方式 es Cassandra ...
- 初识 flex 布局
开启弹性盒模式: display:flex / inline-flex: inline-flex 行内弹性盒 1.设置 flex 缩放的 限定值 min-width 最小值 min-wi ...
- (Struts2学习系列四)Struts2指定配置文件
我们的每个action都在struts.xml里配置的话,就会出现很多的xml语句,单单一个struts.xml就会变得很大,所以我们会在struts.xml里使用include引入其他的.xml文件 ...