Drools Hello world

2024-08-29 06:18
文章标签 hello world drools

本文主要是介绍Drools Hello world,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Drools的基本工作过程

         之前我们一般的做法都是使用一个接口进行业务的工作,首先要传进去参数,其次要获取到接口的实现执行完毕后的结果。其实Drools也大相径庭,我们需要传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后得到的结果。

         在drools中,这个传递数据进去的对象,术语叫 Fact对象。Fact对象是一个普通的java bean(小编是这样理解的),规则中可以对当前对象进行任何的读写操作,调用该对象提供的方法,当一个java bean插入到working Memory(内存储存)中,规则使用的是原有对象的引用,规则通过对fact对象的读写,实现对应用数据的读写,对于其中的属性,需要提供getter setter访问器,规则中,可以动态的往当前working Memory中插入删除新的fact对象。

注:何为fact对象   下面只是小编对fact对象的一些理解和认知,有说的不对的地方还请指点

Fact对象

Fact是指在Drools规则应用当中,将一个普通的JavaBean插入到规则的WorkingMemory当中后的对象。规则可以对Fact对象进行任意的读写操作,当一个JavaBean插入到WorkingMemory当中变成Fact之后,Fact对象不是对原来的JavaBean对象进行Clon(克隆),而是原来JavaBean对象的引用

规则进行计算的时候需要用到应用系统当中的数据,这些数据设置在Fact对象当中,然后将其插入到规则的WorkingMemory当中,一个Fact对象通常是一个具有getter和setter方法的POJO对象,通过getter和setter方法可以方便的对Fact对象f进行操作,所以我们可以简单的把Fact对象理解为规则与应用系统数据交互的桥梁或通道。 

当Fact对象插入到WorkingMemory当中后,会与当前WorkingMemory当中所有的规则进行匹配,同时返回一个FactHandler对象。FactHandler对象是插入到WorkingMemory当中Fact对象的引用句柄,通过FactHandler对象可以实现对对应的Fact对象通过API 进行删除及修改等操作。

Drools文件多变的扩展名

       说了这么多,这规则引擎是个什么文件呢,也是*.java *.class *.js之类的?当然不是,规则引擎可以分为多种方式,最原始也是最基本的是*.drl文件,当然也可以是*.xml的方式,还可以是*.xls or *.xlsx的方式;看着就很灵活是吧。

Drools Hello world

在上面的文章里,我们对Drools有一个简单的认识,在这里章节里,小编对详细的对Drools语法进行一个说明:

在小编看来Drools的基础语法可分为三块内容,包路径、引用、规则体;一个最简单的规则至少要包含“包路径”,”规则体“这两部分。下面我们就写一个hello world。

hello.drl

package rules.testwrodrule “test001”wheneval(true);	thenSystem.out.println(“hello world”);end	

上面的例子是最简单的一个规则,只要触发该规则时,就会在控制空 输出 helloworld,那么这几个都代表的是什么意思呢,说的这三大块内容以是什么呢,小编这里给大家分析一下上面的例子,

首先:规则文件及扩展名,hello.drl  规则名是可以随便起的,不要求像java 首字母大写,这里小编要提示一下读者,规则名起名最好还是规范,见名知意。

Drl文件内容:

package 这就是三大块中的包路径,这里的路径是逻辑路径,理论上是可以随便写的,但不能不写。但为了更方便的开发,这里小编提醒大家最好与文件目录同名,像java 一下以点(.)的方式隔开

rule 就是三大块中的规则体,以rule开头,以end 结尾,每个规则文件可以包含多个rule。规则体分为三个部分,LHS RHS 属性 三大部分,下面小编会对这三个部分做一个简单的说明,在语法详情的篇章里,会有说明的。

LHS:条件部分又被称之为 LeftHand Side,简称为 LHS,在一个规则当中 when 与 then 中间的部分就是 LHS 部分。在 LHS 当中,可以包含 0~n 个条件,如果 LHS 部分没空的话,那么引擎会自动添加一个eval(true)的条件,由于该条件总是返回 true,所以 LHS 为空的规则总是返回 true。

也就是这样的效果

    hello.drl

	package rules.testwrodrule “test001”when//这里如果为空 则表示eval(true);thenSystem.out.println(“hello world”);end	

RHS:结果部分又被称之为 RightHand Side,简称为 RHS,在一个规则当中 then后面部分就是 RHS,只有在 LHS 的所有条件都满足时 RHS 部分才会执行。 

         RHS部分是规则真正要做事情的部分,可以将因条件满足而要触发的动作写在该部分当中,在RHS当中可以使用LHS 部分当中定义的绑定变量名、设置的全局变量、或者是直接编写 Java 代码(对于要用到的 Java 类,需要在规则文件当中用 import将类导入后方能使用,这点和 Java 文件的编写规则相同)。 

         我们知道,在规则当中LHS就是用来放置条件的,所以在RHS当中虽然可以直接编写 Java 代码,但不建议在代码当中有条件判断,如果需要条件判断,那么请重新考虑将其放在 LHS 当中,否则就违背了使用规则的初衷。 

         在Drools 当中,在RHS里面,提供了一些对当前 Working Memory 实现快速操作的宏函数或对象,比如insert/insertLogical、update/modify和retract 就可以实现对当前Working Memory 中的 Fact 对象进行新增、修改或者是删除;如果您觉得还要使用 Drools当中提供的其它方法,那么您还可以使用另一外宏对象 drools,通过该对象可以使用更多的操作当前Working Memory 的方法;同时Drools还提供了一个名为 kcontext的宏对象,使我们可以通过该对象直接访问当前Working Memory 的KnowledgeRuntime。

这里我们有提到了import,这是一个什么概念呢,其实很简单,就是引入所需要的Java类或方法。import:导入规则文件需要使用到的外部变量,这里的使用方法跟java相同,但是不同于java的是,这里的import导入的不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法。小编这里要提醒一下读者,在规则文件里package永远是第一行

比如:

importcom.drools.demo.point.PointDomain;  导入类

importfunction com.drools.demo.point.PointDomain.getById; 导入静态方法

例如下面代码: 

hello.drl 

package rules.testwrod	
import cn.test.Person;rule “test001”when$p:Person();thenntln(“hello ”+$p.getName());end	

下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的

----请看下方↓↓↓↓↓↓↓

百度搜索 Drools从入门到精通:可下载开源全套Drools教程

深度Drools教程不段更新中:


更多Drools实战陆续发布中………

扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓



这篇关于Drools Hello world的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117078

相关文章

【Spring boot】编写代码及测试用例入门之 Hello Spring boot _踩坑记

先贴下目录: 这是我从 start.spring.io 里下载的依赖Web的模板 // DemoApplication.javapackage com.abloume.springboot.blog.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autocon

【JFinal】IDEA+maven上手JFinal之Hello World!

一、New Project 1、在 IDEA 环境下新建 Project 项目 2、选择创建 Maven 项目,并且不使用模板 3、输入 Maven 的 GroupId 和 ArtifactId 4、输入项目名称 二、将当前 Project 改为 POM 工程 将项目的 jfinal-web-demo 作为项目的 parent 工程,用于定义 maven 依赖包的版本信息、

CVPR 2024最新论文分享┆YOLO-World:一种实时开放词汇目标检测方法

论文分享简介 本推文主要介绍了CVPR 2024上的一篇论文《YOLO-World: Real-Time Open-Vocabulary Object Detection》,论文的第一作者为Tianheng Cheng和Lin Song,该论文提出了一种开放词汇目标检测的新方法,名为YOLO-World。论文通过引入视觉-语言建模和大规模预训练解决了传统YOLO检测器在固定词汇检测中的局限性。论

hello,大家好。

由于最近工作变动,目前是从河北来到了广东。 顾不上写博客了,请大家谅解。 后续会慢慢的恢复正常的节奏,很感谢大家的关注。

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个纯色图层(也可以是其他类型图层),作为【效果控件载体图层】

java-在idea中antrl的hello world

java-在idea中antrl的hello world 1. 在idea中安装ANTLR V4的插件2. 下载ANTLR的jar包3. idea中创建普通的java项目4. 创建一个Hello.g4的文件5. 使用idea生产接口文件6. java创建一个类和main方法7. 调试输出8. 参考链接 1. 在idea中安装ANTLR V4的插件 路径如下,安装完成后重启ide

World of Warcraft [CLASSIC][80][Shushia][Molten Core][BOSS-5 Baron Geddon]

80级术士单杀[熔火之心]40人团队副本 [5号BOSS 迦顿男爵] BOSS技能①[点燃法力],每3秒燃烧400点法力值,实际上还附带400点伤害,持续5分钟 BOSS技能②[人体炸弹] :迦顿男爵会随机给一个人施放DEBUFF,被DEBUFF影响的人需要在最短时间内跑到远离人群的角落,等待炸弹爆炸。这个技能会造成3000+的伤害,并且会对周围一定范围内的玩家造成等量伤害,感觉我

java-antrl手敲命令的hello world

java-antrl手敲命令的hello world 环境步骤1. 下载ANTLR的jar包2. 新建一个g4文件3. 生成语法对应的java文件4. 编译语法对应的java文件5. 测试语法5.1 打印测试信息5.2 查看语法分析树 6. 注意事项6.1 每一个antlr4版本的jar包都对应java的相应版本,要对应。6.2 [@1,6:10='parrt',<ID>,1:6]解析6.3

汇编语言输出“Hello World!“

1.软件 Nasmide64.exe(李忠老师编写) Fixvhdw64.exe(李忠老师编写) VirtualBox虚拟机(免费 开源) 2.过程 01.Fixvhdw64.exe输入以下代码: mov ax,0xb800mov ds,axmov byte [0x00],'H'mov byte [0x02],'e'mov byte [0x04],'l'mov byte [0