Drools 是一款基于Java 的开源规则引擎,所以在使用Drools 之前需要在开发机器上安装好JDK 环境,Drools5 要求的JDK 版本要在1.5 或以上。

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

将下载的开发工具包及IDE 包解压到一个非中文目录下,解压完成后就可以在Eclipse3.4 上安装Drools5 提供的开发工具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 是否安装成功。进入win dos,进入Eclipes3.4 所在目录,输入eclipse –clean 启动Eclipse3.4。启动完成后打开菜单WindowPreferences,在弹出的窗口当中如果能在左边导航树中发现Drools 节点就表示Drools5 IDE 安装成功了,如图1-2 所示。

IDE 安装完成后,接下来需要对Drools5 的IDE 环境进行简单的配置,打开菜单WindowPreferences,在弹出的窗口当中选择左边导航树菜单DroolsInstalled Drools
Runtimes 设置Drools5 IDE 运行时依赖的开发工具包,点击“Add…”按钮添加一个开发工具包,如图1-3 所示。

图 1-3 当中添加了一个开发工具包,名称为“drools-5.0.0”,对应的工具包目录为D 盘doc\about rule\drools5.x\drools-5.0-bin 目录。添加完成后这样Drools5 的开发环境就搭好了。
下面我们就来利用这个环境编写一个规则看看运行效果。

编写第一个规则

环境搭建好后,新建一个Drools Project项目,为项目取好名字后直接finish。

项目结构如图1-4

我们打开DroolsTest.java看看

  1. package com.sample;
  2.  
  3. import org.drools.KnowledgeBase;
  4. import org.drools.KnowledgeBaseFactory;
  5. import org.drools.builder.KnowledgeBuilder;
  6. import org.drools.builder.KnowledgeBuilderError;
  7. import org.drools.builder.KnowledgeBuilderErrors;
  8. import org.drools.builder.KnowledgeBuilderFactory;
  9. import org.drools.builder.ResourceType;
  10. import org.drools.io.ResourceFactory;
  11. import org.drools.logger.KnowledgeRuntimeLogger;
  12. import org.drools.logger.KnowledgeRuntimeLoggerFactory;
  13. import org.drools.runtime.StatefulKnowledgeSession;
  14.  
  15. /**
  16. * This is a sample class to launch a rule.
  17. */
  18. public class DroolsTest {
  19.  
  20. public static final void main(String[] args) {
  21. try {
  22. // load up the knowledge base
  23. KnowledgeBase kbase = readKnowledgeBase();
  24. StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
  25. KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
  26. // go !
  27. Message message = new Message();
  28. message.setMessage("Hello World");
  29. message.setStatus(Message.HELLO);
  30. ksession.insert(message);
  31. ksession.fireAllRules();
  32. logger.close();
  33. } catch (Throwable t) {
  34. t.printStackTrace();
  35. }
  36. }
  37.  
  38. private static KnowledgeBase readKnowledgeBase() throws Exception {
  39. KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
  40. kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);
  41. KnowledgeBuilderErrors errors = kbuilder.getErrors();
  42. if (errors.size() > 0) {
  43. for (KnowledgeBuilderError error: errors) {
  44. System.err.println(error);
  45. }
  46. throw new IllegalArgumentException("Could not parse knowledge.");
  47. }
  48. KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  49. kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
  50. return kbase;
  51. }
  52.  
  53. public static class Message {
  54.  
  55. public static final int HELLO = 0;
  56. public static final int GOODBYE = 1;
  57.  
  58. private String message;
  59.  
  60. private int status;
  61.  
  62. public String getMessage() {
  63. return this.message;
  64. }
  65.  
  66. public void setMessage(String message) {
  67. this.message = message;
  68. }
  69.  
  70. public int getStatus() {
  71. return this.status;
  72. }
  73.  
  74. public void setStatus(int status) {
  75. this.status = status;
  76. }
  77.  
  78. }
  79.  
  80. }

KnowledgeBase:Drools 提供的用来收集应用当中知识(knowledge)定义的知识库对象,通过KnowledgeBaseFactory 对象提供的newKnowledgeBase()方法来实现

KnowledgeBuilder:用来在业务代码当中收集已经编写好的规则, 然后对这些规则文件进行编译, 最终产生一批编译好的规则包(KnowledgePackage)给其它的应用程序使用,KnowledgeBuilder 在编译规则的时候可以通过其提供的hasErrors()方法得到编译规则过程中发现规则是否有错误

StatefulKnowledgeSession:插入业务对象,触发规则执行或开始一个规则流执行。

KnowledgeRuntimeLogger:规则运行日志

DroolsTest.java首先通过readKnowledgeBase()方法获取KnowledgeBase,在readKnowledgeBase()里面载入规则文件,然后在StatefulKnowledgeSession里面放入了一个Message对象,然后调用fireAllRules()开始执行规则。

DroolsTest里面还定义了一个Message对象,Message有两个属性message和status,两个常量:HELLO和GOODBYE

我们再看看规则文件Sample.drl

  1. package com.sample
  2.  
  3. import com.sample.DroolsTest.Message;
  4.  
  5. rule "Hello World"
  6. when
  7. m : Message( status == Message.HELLO, myMessage : message )
  8. then
  9. System.out.println( myMessage );
  10. m.setMessage( "Goodbye cruel world" );
  11. m.setStatus( Message.GOODBYE );
  12. update( m );
  13. end
  14.  
  15. rule "GoodBye"
  16. when
  17. Message( status == Message.GOODBYE, myMessage : message )
  18. then
  19. System.out.println( myMessage );
  20. end

rule "Hello World","Hello World"值规则的名称,Rule非常像java里面的一个if...else....

rule "Hello World"描述的逻辑大概为:insert进来的对象如果是一个Message对象,并且Message的status属性等于Message.HELLO,那么将Message的message属性赋值给myMessage,最后将Message对象赋予给m。在then部分打印了myMessage,然后将新的Message对象m的message和status进行修改."Hello World"执行完毕,此时应该在控制台打印输出:Hello World。接下来执行rule "GoodBye".

rule "GoodBye"描述的逻辑为:判断对象是否为一个Message对象,并且Message的status属性等于Message.GOODBYE,将Message的message属性赋值给myMessage,然后在控制台打印myMessage,控制台应该输出:Goodbye cruel world。

好了,我们在DroolsTest.java中运行看看是不是和我们预计的一样.运行方式选择Java运行程序

可以看到控制台输出:

Hello World
Goodbye cruel world

Drools规则引擎环境搭建的更多相关文章

  1. Drools 规则引擎环境搭建

    一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...

  2. eclipse下搭建Drools规则引擎环境

    插件下载地址:http://download.jboss.org/drools/release/ 1.点开对应的版本文件,选择标红的两个压缩包下载,其他的如有需要也可以自行选择: 2.将下载的压缩包解 ...

  3. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  4. Drools规则引擎

    一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...

  5. SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

    本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...

  6. (十五)整合 Drools规则引擎,实现高效的业务规则

    整合 Drools规则引擎,实现高效的业务规则 1.Drools引擎简介 1.1 规则语法 2.SpringBoot整合Drools 2.1 项目结构 2.2 核心依赖 2.3 配置文件 3.演示案例 ...

  7. Drools规则引擎实践直白总结

    目录 1. 创建Drools环境(引入Drools相关依赖包.现在都流行spring boot,故最简单有效的依赖才是最好的,kie-spring内部自行依赖了drools相关核心的依赖包) 2. 了 ...

  8. Drools 规则引擎应用

    规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...

  9. Drools 规则引擎应用 看这一篇就够了

    1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...

随机推荐

  1. 复利计算器app发布

    复利计算器app发布 抱歉:由于无法实现服务端的持续开启,发布的app仅为简单的单机版,暂时舍弃了c/s版本的一些功能,如:投资动态管理功能. 应用详情博客:请点击这里 apk下载地址1(百度手机助手 ...

  2. 03慕课网《进击Node.js基础(一)》API-URL网址解析

    url url.parse(url,query,host);解析域名 url必须,地址字符串 query可选 host 可选:在不清楚协议时正确解析 querystring 字符串和对象之间互相解析 ...

  3. Saver 保存与读取

    tensorflow 框架下的Saver 功能,用以保存和读取运算数据 Saver 保存数据 代码 import tensorflow as tf # Save to file #remember t ...

  4. 缓存-MemoryCache Class

    这是使用MemoryCache缓存的一个例子. private void btnGet_Click(object sender, EventArgs e) { ObjectCache cache = ...

  5. jdbc 6.0

    1.获取数据库自动生成的键值 package com.rong.jielong; import java.sql.Connection; import java.sql.DriverManager; ...

  6. 3dContactPointAnnotationTool开发日志(二六)

      之前给老师看了看我的毕设,老师觉得操作太复杂了,要能像3ds max里那样可以拖动物体的轴进行平移,沿着显示的圆圈旋转以及缩放啥的.说白了就是在Unity3d的Game视图显示出Scene视图里的 ...

  7. JavaScript设计模式学习之路——继承

    早在学习java的时候,就已经接触了继承,在java中因为有extends关键字,因此继承就比较简单.但是在JavaScript中,只能通过灵活的办法实现类的继承. 下面是我昨天在学习过程中,了解到的 ...

  8. 【Apache】ab工具

    格式:ab  [options] [http://]hostname[:port]/path -n requests Number of requests to perform //在测试会话中所执行 ...

  9. Sass & Scss & CSS3

    Sass & Scss & CSS3 Sass & Scss @mixin & @include & @import & variable https: ...

  10. hdu-题目1159:Common Subsequence

    http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Java/Oth ...