一种Drools规则引擎封装模型及其实现

合集下载

[Drools]JAVA规则引擎(非常好的一篇教程)

[Drools]JAVA规则引擎(非常好的一篇教程)

[Drools]JA V A规则引擎(非常好的一篇教程)Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。

本文所使用的demo已上传/source/30022131、Drools语法开始语法之前首先要了解一下drools的基本工作过程,通常而言我们使用一个接口来做事情,首先要穿进去参数,其次要获取到接口的实现执行完毕后的结果,而drools也是一样的,我们需要传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后得到的结果。

在drools中,这个传递数据进去的对象,术语叫Fact对象。

Fact 对象是一个普通的java bean,规则中可以对当前的对象进行任何的读写操作,调用该对象提供的方法,当一个java bean 插入到workingMemory中,规则使用的是原有对象的引用,规则通过对fact对象的读写,实现对应用数据的读写,对于其中的属性,需要提供getter setter访问器,规则中,可以动态的往当前workingMemory中插入删除新的fact对象。

规则文件可以使用.drl文件,也可以是xml文件,这里我们使用drl文件。

规则语法:package:对一个规则文件而言,package是必须定义的,必须放在规则文件第一行。

特别的是,package的名字是随意的,不必必须对应物理路径,跟java的package的概念不同,这里只是逻辑上的一种区分。

同样的package下定义的function和query等可以直接使用。

比如:package com.drools.demo.pointimport:导入规则文件需要使用到的外部变量,这里的使用方法跟java相同,但是不同于java的是,这里的import导入的不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法。

drools规则引擎

drools规则引擎

Drools引擎一、drools是什么Drools是为Java量身定制的基于RETE算法的规则引擎的实现。

具有了OO(面向对象)接口的RETE,使得商业规则有了更自然的表达。

Rule是什么呢?一条规则是对商业知识的编码。

一条规则有 attributes ,一个 Left Hand Side ( LHS )和一个 Right Hand Side ( RHS )。

Drools 允许下列几种:attributes:salience,agenda-group,no-loop,auto-focus,duration,activation-group。

1.salience功能:设置规制执行的优先级值:数字(数字越大执行优先级越高)示例:rule "rule1"salience 1wheneval(true)thenSystem.out.println("rule1");end2.no-loop功能:控制已经执行的规则条件再次满足是否再次执行值:true/false示例:rule "rule1"no-loop truewhen$customer:Customer(name=="张三")thenupdate($customer);System.out.println("customer name:"+$customer.getName());End3.activation-group功能:若干个规则划分成一个组值:分组名称示例:rule "rule2"activation-group "test"salience 10wheneval(true)thenSystem.out.println("rule2 execute");endrule "rule1"activation-group "test"salience 9wheneval(true)thenSystem.out.println("rule1 execute");endnote:如果同一组规则,谁的salience高就执行谁,没有则按顺序执行最后同组最后那个规则4.date-expires功能:当系统时间<=date-expires后才会触发值:日期默认格式为dd-MMM-yyyy可以设置其它时间格式如yyyy-MM-dd,需在代码设置系统时间格式System.setProperty("drools.dateformat", "yyyy-MM-dd");示例:rule "rule1"date-expires "2009-09-27"wheneval(true);thenSystem.out.println("rule1 is execution!");end5、duration:规则定时,duration 3000 3秒后执行规则6、agenda-group:规则的调用与执行是通过Stateless KieSession或KieSession来实现的,一般的顺序是创建一个Stateless KieSession或KieSession,将各种经过编译的规则添加到session当中,然后将规则当中可能用到的Global对象和Fact对象插入到Session当中,最后调用fireAll Rules 方法来触发、执行规则。

规则引擎Drools(一):第一个Drools工程

规则引擎Drools(一):第一个Drools工程

规则引擎Drools(一):第一个Drools工程准备•JDK 1.7+•Maven 3•IDE,Eclipse or IntelliJ IDEA开始新建一个干净的 Maven 工程,开始第一个 Drools 工程吧编辑pom.xml文件,定义 Drools 版本属性:<drools.version>6.4.0.Final</drools.version>编辑pom.xml文件,添加依赖:<dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-ci</artifactId><version>${drools.version}</version></dependency>在src/main/resources/META-INF目录下,新建文件kmodule.xml文件:<?xml version="1.0" encoding="UTF-8"?><kmodule xmlns="/kie/6.0.0/kmodule"><kbase name="rules" packages="rules"><ksession name="ksession-rules"/></kbase></kmodule>在src/main/resources/rules目录下,新建文件test.drl文件:package rules;rule "test"whenthenSystem.out.println("it works!");end新建 Java 类文件App.java:public class App {public static void main(String[] args) {KieServices kieServices = KieServices.Factory.get();KieContainer kieContainer = kieServices.newKieClasspathContainer();KieSession kieSession = kieContainer.newKieSession("ksession-rules");kieSession.fireAllRules();kieSession.destroy();}}运行运行结果:it works!。

规则引擎DROOLS简明教程

规则引擎DROOLS简明教程
rul 的语法比较简单,从以下例子中就能体会出来,这里不讲述了。
考虑这样一种情况,某学校 USST 希望招收的学校其年龄应该大于 15 岁,另外一个学校 FUDAN 希望其招收的学生大于 18 岁.当然,不同的学校对学生的要求可能不一样,例如年龄、性别、成绩 等。如果采用大量的 if...else 语句写在业务逻辑层,将来随着学校招生的要求变化,需要应用程 序开发人员,不断的修改业务规则。现在考虑采用 Drools 来使商务逻辑从应用程序中分离出来。 1。首先设计一个 Student 类,包括姓名、年龄、性别、希望就读学校。类文件如下:
2)设置传递到 url 脚本的参数实例:
WorkingMemory workingMemory = businessRules.newWorkingMemory();
workingMemory.assertObject(xxx);
3)执行规则:
workingMemory.fireAllRules(filter); //filter 规则为过虑器
package com.primeton.juxtapose.rule.example;
import java.io.IOException; import org.drools.DroolsException; import org.drools.IntegrationException; import org.drools.RuleBase; import org.drools.WorkingMemory; import org.drools.event.DebugWorkingMemoryEventListener; import org.drools.io.RuleBaseLoader; import org.drools.spi.Activation; import org.drools.spi.AgendaFilter; import org.xml.sax.SAXException;

Drools开发教程、规则引擎

Drools开发教程、规则引擎

Drools5规则引擎规则引擎开发开发教程教程教程高杰上海锐道信息技术有限公司2009-8-201.学习前的准备Drools是一款基于Java的开源规则引擎,所以在使用Drools之前需要在开发机器上安装好JDK环境,Drools5要求的JDK版本要在1.5或以上。

1.1. 开发环境搭建大多数软件学习的第一步就是搭建这个软件的开发环境,Drools也不例外。

本小节的内容就是介绍如何搭建一个Drools5的开发、运行、调试环境。

1.1.1.下载开发工具Drools5提供了一个基于Eclipse3.4的一个IDE开发工具,所以在使用之前需要到网站下载一个 3.4.x版本的Eclipse,下载完成之后,再到/drools/downloads.html网站,下载Drools5的Eclipse插件版IDE及Drools5的开发工具包,如图1-1所示。

图1-1除这两个下载包以外,还可以把Drools5的相关文档、源码和示例的包下载下来参考学习使用。

将下载的开发工具包及IDE包解压到一个非中文目录下,解压完成后就可以在Eclipse3.4上安装Drools5提供的开发工具IDE了。

1.1.2.安装Drools IDE打开Eclipse3.4所在目录下的links目录(如果该目录不存在可以手工在其目录下创建一个links目录),在links目录下创建一个文本文件,并改名为drools5-ide.link,用记事本打开该文件,按照下面的版本输入Drools5 Eclipse Plugin文件所在目录:path=D:\\eclipse\\drools-5.0-eclipse-all这个值表示Drools5 Eclipse Plugin文件位于D盘eclipse目录下的drools-5.0-eclipse-all 下面,这里有一点需要注意,那就是drools-5.0-eclipse-all文件夹下必须再包含一个eclipse 目录,所有的插件文件都应该位于该eclipse目录之下,接下来要在win dos下重启Eclipse 3.4,检验Drools5 IDE是否安装成功。

使用 Drools 规则引擎实现业务逻辑

使用 Drools 规则引擎实现业务逻辑

使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性,降低应用程序的维护和可扩展性成本。

本文展示了如何使用Drools规则引擎让Java™ 应用程序更适应变化。

Drools的一个好处是具有允许将Java 代码直接嵌入规则文件中的附加语法。

要求施加在当今软件产品上的大多数复杂性是行为和功能方面的,从而导致组件实现具有复杂的业务逻辑。

实现J2EE 或J2SE 应用程序中业务逻辑最常见的方法是编写Ja va 代码来实现需求文档的规则和逻辑。

在大多数情况下,该代码的错综复杂性使得维护和更新应用程序的业务逻辑成为一项令人畏惧的任务,甚至对于经验丰富的开发人员来说也是如此。

任何更改,不管多么简单,仍然会产生重编译和重部署成本。

规则引擎试图解决(或者至少降低)应用程序业务逻辑的开发和维护中固有的问题和困难。

可以将规则引擎看作实现复杂业务逻辑的框架。

大多数规则引擎允许您使用声明性编程来表达对于某些给定信息或知识有效的结果。

您可以专注于已知为真的事实及其结果,也就是应用程序的业务逻辑。

有多个规则引擎可供使用,其中包括商业和开放源码选择。

商业规则引擎通常允许使用专用的类似英语的语言来表达规则。

其他规则引擎允许使用脚本语言(比如Groovy 或Python)编写规则。

本文为您介绍Drools引擎,并使用示例程序帮助您理解如何使用Drools作为Java 应用程序中业务逻辑层的一部分。

引擎,使用Rete 算法(参阅参考资料)对所编写的规则求值。

Drools允许使用声明方式表达业务逻辑。

可以使用Java/XML 语法编写规则,这对于入门Drools十分有用,因为您可以将Java 代码直接嵌入规则文件中。

还可以使用Groovy/XML 语法或Python/XML 语法在Drools中编写规则。

Drools还具有其他优点:∙非常活跃的社区∙易用∙快速的执行速度∙在Java 开发人员中流行∙JSR 94 兼容(JSR 94 是Java Rule Engine API)(参阅参考资料)∙免费因此,您应该熟悉使用Eclipse IDE 开发Java 代码。

SpringBoot整合Drools规则引擎动态生成业务规则的实现

SpringBoot整合Drools规则引擎动态生成业务规则的实现

SpringBoot整合Drools规则引擎动态⽣成业务规则的实现最近的项⽬中,使⽤的是flowable⼯作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页⾯去动态配置改变,所以就花了⼏天时间去研究了⼀下Drools规则引擎框架。

然后应⽤到了项⽬中。

⾸先在项⽬中引⼊规则引擎相关依赖<properties><java.version>1.8</java.version><drools.version>7.20.0.Final</drools.version></properties><dependencies><!--引⼊规则引擎--><dependency><groupId>org.kie</groupId><artifactId>kie-spring</artifactId><version>${drools.version}</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope><version>1.18.20</version></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>这⾥的drools版本使⽤的是7.20.0.Final,如果想和Flowable结合使⽤,在流程画图中插⼊规则任务,可以将drools版本和flowable starter中管理的drools版本⼀致,⽐如我现在的项⽬中⽤到的flowable-srping-boot-starter的依赖版本是6.5.0,点进去这个jar包的pom⽂件再进⼀步点parent标签然后再点parent标签的依赖然后再点parent标签内的flowable-root,然后搜索drools可以看到flowable starter集成管理的drools版本是7.6.0-Final,所以最好和这个版本保持⼀致当然你需要在flowable modeler画图项⽬中引⼊,然后启动flowable modeler程序,在画图界⾯任务类型中就可以看到⼀个Business rule task,商业规则任务。

Java规则引擎_Drools的介绍及应用

Java规则引擎_Drools的介绍及应用

第26卷第6期2005年11月微计算机应用MICROCOMPU IER A PPL ICA TIONS Vol.26No.6Nov.2005本文于2004-12-13收到。

Java 规则引擎———Drools 的介绍及应用刘 伟(中国科技大学 合肥 230026) 摘 要:规则引擎技术是一项很有吸引力的技术。

首先介绍了规则引擎的相关概念及其实现原理。

然后重点介绍了J ava 规则引擎技术的规范和一个采用XML 和java 语言实现的规则引擎———Drools 。

最后给出了利用Drools 解决实际问题的范例并探讨了该技术的不足和发展前景。

关键词:规则引擎,JSR 94,DroolsIntroduction and Implementation of Drools ———a Rule E ngine B ased JavaL IU Wei(Univ of Sci &Tech of China ,Hefei ,230026,China )Abstract :Rule Engine is a magnetic technology in the area of software developing now.In this paper ,firstly ,the concept and implementing principle of Rule Engine is introduced ,and then J SR94,the Java programing specification of Rale Engine is presented.As a product of Java Rule Engine ,Drools ,is emphasized smbsequently.providing an actual example ,the paper describes the details of the usage of Drods finally.K eyw ords :Rule Engine ,J SR94Drools1 基于规则的专家系统简介Java 规则引擎是推理引擎的一种,它起源于基于规则的专家系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

V0 1

种 D r o o l s 规 则 引擎 封 装 模 型 及 其 实 现
蓝雯飞, 邢志宝, 强小利
( 中南 民族大学 计算机科学学 院, 武汉 4 3 0 0 7 4 )


针对 D r o o l s 规 则引擎的规则语法接受 曲线 陡峭 , 业务 人员难 以快速 创建并 维护规 则等 问题 , 提 出了一种
Ab s t r a c t R u l e g r a m ma r r e c e i v e d c u r v e o f b u s i n e s s e n in g e i s s t e e p . I t ’ S h a r d o f r b u s i n e s s p e so r n n e l t o q u i c k l y c r e a t e a n d
mo d e l f o r e n c a p s u l a t i n g D r o o l s AP I .E x p e r i me n t s s h o w t h a t he t e n c a p s u l a t e d Dr o o l s c a n n o t o n l y e f e c t i v e l y r e d u c e t h e b u s i n e s s p e so r n n e l o f r u l e l e a r n i n g nd a ma i n t e n nc a e c o s t s ,b u t ls a o i mp r o v e t h e e n g i n e e x e c u t i o n s p e e d .
Ke y wo r d s r u l e ;r u l e e n i g n e ; A P I e n c a p s u l a t i o n
引擎 , 可以分离代码 中的业务规则 , 实现业务人员制
移动运营商每天产生的数据量大且复杂 , 以往 的做 法是 人工 直接 核 对 , 即利 用 手 工 为不 符 合 规 范
以代码形式存在而难 以编写与维护的问题; ( 2 ) 因 移动业务产生大量数据 , 带来规则引擎核查数据速 度相当缓慢的问题. 本文以 D r o o l s 规 则 引 擎 为研 究 对 象 . 针 对 业 务 规则难 以编写和维护的问题 , 通过 图形化界面封装
ma i n t a i n r u l e .T h e p a p e r b r i n g s u p a mo d e l f o r e n c a p s u l a t i n g r u l e i f l e . Be s i d e s , AP I c ll a i n g p r o c e s s o f n l i e e n g i n e i s
规则 文件 封装 模型. 同时 , 针对规则引擎 A P I 调用过程较为复杂 , 大量事实对象 f a c t 存在 时引擎执行 速度相 当缓慢 的问题 , 给出了一种 D r o o l s A P I 封装模型 . 实验结果表 明 : 封装后 的 D r o o l s 可 以有效 降低业 务人员对规则学 习与维 护成本 , 并且 明显 提高了引擎执行速度. 关键词 规则 ; 规 则引擎 ; A P I 封装
T P 3 1 1 文献标识码 A 文章 编号 1 6 7 2 43 2 1 ( 2 0 1 5 ) 0 3 - 0 0 9 5 - 0 5 中图分类号
Re s e a r c h o n En c a p s u l a t i o n Mo de l t o Dr o o l s Rul e Eng i n e
的数 据进 行标 记 . 对 海 量 的运 营 数 据进 行 人 工 核 查 几乎 不可 能. 于是 , 有人 尝试 直接将 各种 核查 规则 直
定规则并编写规则 , 业务规则 的需求变更不再是困 扰 开发人 员 的 问题 . 3 J . 然而 , 应 用 规 则 引擎 仍 存 在
以下 2个 主 要 问题 : ( 1 ) 业 务 人 员 因 规 则 在 文 件 中
c o m p l i c a t e d .T he e n g i n e p e f r o r mi n g s ee p d b e c o m e s r a he t r s l o w w h e n m a n y f a c t o b j e c t s e x i s t .T he p a er p p u t s f o r w a r d a
L a n W e n f e i , X i n g Z h i b a o , Q i a n g X i a o l i
( C o l l e g e o f C o m p u t e r S c i e n c e ,S o u t h - C e n t r a l U n i v e r s i t y f o r N a t i o n li a t i e s , Wu h a n 4 3 0 0 7 3 , C h i n a )
第3 4卷第 3期 2 0 1 5年 9月
中南民族大学学报(自然科学版 )
J o u r n l a o f S o u t h — C e n  ̄ l a U n i v e r s i t y f o r N a t i o n a l i t i e s ( N a t . S c i . E d i t i o n )
相关文档
最新文档