`

Drools规则引擎初学入门实例HelloWorld

阅读更多

(1)下载eclipse(www.eclipse.org),如果是一般的java开发,下载Eclipse IDE for Java Developers就行了,解压后即可使用;

(2)下载Drools(http://jboss.org/drools/downloads.html),目前最新版本是Drools 4.0.7 Binaries,下载后解压即可;

(3)之后下载eclipse的Drools插件,版本跟eclipse对应,目前有Drools 4.0.7 Eclipse 3.2 Workbench和Drools 4.0.7 Eclipse Europa 3.3 Workbench两种。

         Drools插件解压后,将里面的org.drools.eclipse_4.0.7.jar文件copy到eclipse的plugins目录中,重启eclipse,在工具栏可以看到一个 图标,这就是Drools的工作台,之后就可通过这个按钮创建Drools resource文件了。

(4)开始Hello World

Java文件:DroolsTest.java

  1. package com.sample;
  2. import java.io.InputStreamReader;
  3. import java.io.Reader;
  4. import org.drools.RuleBase;
  5. import org.drools.RuleBaseFactory;
  6. import org.drools.WorkingMemory;
  7. import org.drools.compiler.PackageBuilder;
  8. import org.drools.rule.Package;
  9. /**
  10. * This is a sample file to launch a rule package from a rule source file.
  11. */
  12. public class DroolsTest {
  13.     public static final void main(String[] args) {
  14.         try {
  15.          
  16.          //load up the rulebase
  17.              RuleBase ruleBase = readRule();
  18.              WorkingMemory workingMemory = ruleBase.newStatefulSession();
  19.             
  20.             //go !
  21.              Message message = new Message();
  22.              message.setMessage(  "Hello World" );
  23.              message.setStatus( Message.HELLO );
  24.              workingMemory.insert( message );
  25.              workingMemory.fireAllRules();   
  26.             
  27.             
  28.          } catch (Throwable t) {
  29.              t.printStackTrace();
  30.          }
  31.      }
  32.     /**
  33.       * Please note that this is the "low level" rule assembly API.
  34.       */
  35. private static RuleBase readRule() throws Exception {
  36.   //read in the source
  37.    Reader source = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/Sample.drl" ) );
  38.   
  39.   //optionally read in the DSL (if you are using it).
  40.   //Reader dsl = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );
  41.   //Use package builder to build up a rule package.
  42.   //An alternative lower level class called "DrlParser" can also be used...
  43.   
  44.    PackageBuilder builder = new PackageBuilder();
  45.   //this wil parse and compile in one step
  46.   //NOTE: There are 2 methods here, the one argument one is for normal DRL.
  47.    builder.addPackageFromDrl( source );
  48.   //Use the following instead of above if you are using a DSL:
  49.   //builder.addPackageFromDrl( source, dsl );
  50.   
  51.   //get the compiled package (which is serializable)
  52.    Package pkg = builder.getPackage();
  53.   
  54.   //add the package to a rulebase (deploy the rule package).
  55.    RuleBase ruleBase = RuleBaseFactory.newRuleBase();
  56.    ruleBase.addPackage( pkg );
  57.   return ruleBase;
  58. }
  59. public static class Message {
  60.   public static final int HELLO = 0;
  61.   public static final int GOODBYE = 1;
  62.   public static final int GAME_OVER = 2;
  63.   
  64.   private String message;
  65.   
  66.   private int status;
  67.   
  68.   public String getMessage() {
  69.    return this.message;
  70.    }
  71.   
  72.   public void setMessage(String message) {
  73.    this.message = message;
  74.    }
  75.   
  76.   public int getStatus() {
  77.    return this.status;
  78.    }
  79.   
  80.   public void setStatus( int status ) {
  81.    this.status = status;
  82.    }
  83. }
  84.     
  85. }

选择插件Drools按钮里的"New Rule resource",建立规则(rule)文件:Sample.drl

  1. package com.sample
  2. import com.sample.DroolsTest.Message;
  3. rule "Hello World"
  4. when
  5.    m : Message( status == Message.HELLO, message : message )
  6. then
  7.    System.out.println( message );
  8.    m.setMessage( "Goodbye cruel world" );
  9.    m.setStatus( Message.GOODBYE );
  10.    update( m );
  11. end
  12. rule "GoodBye"
  13. no-loop true
  14. when
  15.    m : Message( status == Message.GOODBYE, message : message )
  16. then
  17.    System.out.println( message );
  18.    m.setStatus(Message.GAME_OVER);
  19.    m.setMessage("game over now!");
  20.    update( m );
  21. end
  22. rule "game over"
  23. when
  24.    m : Message( status == Message.GAME_OVER)
  25. then
  26.    System.out.println( m.getMessage() );   
  27. end

注意:文件要放在相应的包里,然后编译—执行,当时出现了错误,查找资料,还需要加载包,包括:

<1> Drools 4.0.7目录下的drools-core-4.0.7.jar,drools-compiler-4.0.7.jar

<2> Drools 4.0.7\lib目录下的antlr-runtime-3.0.jar,mvel-1.3.1-java1.4.jar

<3>以及eclipse\plugins目录下的org.eclipse.jdt.core_3.2.3.v_686_R32x.jar(不同版本,包名会稍有不同)。

重新运行,应该就不会有错了。执行结果如下:

Hello World
Goodbye cruel world
game over now!

java代码就不说了, 主要说明一下rule文件, 熟悉一下rule语法:
1:规则的主体结构:
rule "name"
    ATTRIBUTES
    when
        LHS
    then
        RHS
end

其中:
LHS(left hand side)是规则的条件部分, RHS(right hand side)是条件满足后的自行块.

2: 条件的书写:
m : Message( status == Message.HELLO, message : message )
意思是:
在working Memory中, 如果有一个Message的instance满足如下条件:
它的status熟悉等于Message.HELLO.
满足条件的Message instance 用变量 m表示, 它的message属性用message变量表示, 以便在RHS中使用.
 
3: 条件满足后的自行块(RHS)
 
   System.out.println( message );
  m.setMessage( "Goodbye cruel world" );
  m.setStatus( Message.GOODBYE );
  update( m );
用到了在LHS中 定义的变量: m, message
update( m )表示把此Message instance在 working memory中更新.这便会触发名称为"GoodBye"的rule, 进而触发名称为"game over"的rule.

 

以下是drools提供的demo, 稍微整理了下, 可直接在eclipse中import进来

http://lcllcl987.iteye.com/blog/255404
(前提: 下载并安装Drool的eclipse插件:Drools 4.0.7 Eclipse Workbench for 3.2 )
建议首先看看:
FibonacciExample: Fibonacci数列的drools实现.
GolfingExample: 著名的golf智力问题的drools实现,golf.drl的注释就是此问题的文字描述.
ShoppingExample: 一个shopping打折的demo, 超过100元, 有10元的折扣.
StateExampleUsingAgendGroup: By setting dynamic to TRUE, Drools will use JavaBean, PropertyChangeListeners so you don't have to call update().
StateExampleWithDynamicRules: 动态加载rule的一个demo(加载StateExampleUsingSalience.drl后在加载StateExampleDynamicRule.drl).

TroubleTicketExample:
使用了duration规则特性: 将指定的规则延迟一定时间运行
规则引擎是在另外一个线程中进行的,因此使用了duration特性可以将指定的规则延迟一定时间运行.
但是要注意的是主线程中也需要做相应的延时,否则主线程结束后不会再处理子线程的结果
salience 和 duration特性影响rule的执行顺序.
其次demo还定义了一个rule function.

 

分享到:
评论

相关推荐

    Drools规则引擎从入门到精通源码

    从基础讲起,结合应用场景,由浅到深细化讲解drools规则引擎的的相关知识,并结合具体实例,演示功能的使用和注意事项。后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括...

    Drools规则引擎介绍.ppt

    【Drools规则引擎介绍】 Drools是一款由JBoss公司开发的开源规则引擎,它致力于将业务规则从复杂的业务逻辑代码中分离出来,实现业务规则的独立管理和灵活变更。Drools基于Rete算法,这是一套高效的规则匹配算法,...

    Drools规则引擎开发实例+源码

    Drools规则引擎是一款强大的开源规则引擎,广泛应用于业务决策逻辑和复杂事件处理。它基于Java平台,由JBOSS组织维护,支持基于 declarative 的规则编写方式,使得非程序员也能理解和修改规则,大大提升了业务规则的...

    Drools规则引擎从入门到精通

    【Drools规则引擎从入门到精通】 Drools是一个强大的业务规则管理系统,它提供了业务规则引擎、Web创作工具(Drools Workbench)以及决策模型符号(DMN)的支持。作为一个开源项目,Drools使用Java编写,遵循Apache...

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red Hat公司开发并维护,它主要用于实现业务规则的管理和执行。Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度...

    Drools 规则引擎的介绍及应用

    ### Drools规则引擎的介绍及应用 #### 一、规则引擎概述 规则引擎是一种软件系统,用于执行基于预定义规则的决策逻辑。这些规则通常表示为业务规则,旨在模拟人类专家在解决特定问题时所遵循的逻辑过程。规则引擎...

    从Drools规则引擎到风控反洗钱系统v0.3.2.pdf

    8. **Drools7之HelloWorld**:提供了Drools 7版本的“HelloWorld”示例代码,帮助初学者理解如何使用Drools 7。 9. **API解析**:展示了如何使用KIE&FACT、解析规则文件等API。 10. **规则**:详细介绍了Drools中...

    Drools开发教程、规则引擎.pdf

    Drools是一个基于Java的业务规则管理系统(BRMS),它提供了强大的业务规则引擎,允许开发者通过定义业务规则来实现业务逻辑的动态变更,而无需改变代码。Drools5是该系统的其中一个版本,它在开发、运行和调试环境...

    规则引擎Drools入门实战案例

    Drools入门案例 Drools基础语法 规则属性 Drools高级语法 Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名...

    基于Drools规则引擎的实例

    **基于Drools规则引擎的实例** Drools是一款强大的业务规则管理系统,它基于Java语言,主要用于实现复杂的业务逻辑和决策。Drools的核心是它的规则引擎,它能够执行基于事实的推理,允许开发者编写一系列的规则来...

    drools规则引擎开发实例

    在这个"drools规则引擎开发实例"中,我们将深入探讨如何利用drools来处理信用卡申请的业务逻辑。 首先,drools的核心概念包括规则(Rule)、工作内存(Working Memory)和事实(Fact)。规则是业务逻辑的表达,由...

    drools文档教程-规则引擎文档

    Drools 规则引擎文档教程 Drools 规则引擎是一种基于 Java 的开源规则引擎,主要用来解决复杂的业务逻辑问题。下面是 Drools 规则引擎在在线申请信用卡业务场景中的应用。 问题引出现有一个在线申请信用卡的业务...

    从Drools规则引擎到风控反洗钱系统V0.2.3

    ### 从Drools规则引擎到风控反洗钱系统V0.2.3 #### Drools简介 **1.1 什么是规则引擎** 规则引擎是一种软件组件,它能够从应用程序中独立出来处理业务逻辑和决策制定。通过使用预定义的语义模块来编写这些决策...

    springboot整合Drools规则引擎,实现高效的业务规则

    Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。具有易于访问企业策略、易于...

    Drools规则引擎介绍PPT及利用Drools实现的信用卡申请审批规则实例

    **Drools规则引擎介绍** Drools 是一个开源的业务规则管理系统(BRMS),它基于Java平台,属于JBoss企业级中间件的一部分。Drools 提供了一个强大的规则引擎,用于执行业务规则,使复杂逻辑得以简洁地表达。它的...

    Drools规则引擎手册.zip

    Drools是一款强大的开源规则引擎,它允许开发者在应用程序中嵌入复杂的业务规则,从而实现逻辑的自动化处理。本手册详细介绍了Drools的核心概念、使用方法和最佳实践,是学习和掌握Drools的宝贵资源。 首先,Drools...

    Drools规则引擎样例系统

    《Drools规则引擎样例系统深度解析》 Drools,这个强大的开源规则引擎,是Java领域中用于实现业务规则管理和决策逻辑的核心工具。它以其高效、灵活和可扩展的特性,在各种复杂的业务场景中得到了广泛应用。在这个名...

    Drools规则引擎实现原理及示例

    Drools规则引擎是一种嵌套在应用程序中的组件, 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。 它实现了将业务规则从程序代码忠分离出来,规则引擎使用特定的语法编写业务规则,规则引擎...

    Drools规则引擎及教程

    Drools是一款强大的开源规则引擎,它基于Java平台,由JBOSS社区开发,主要用于实现业务规则的管理和执行。在企业应用中,Drools能够帮助开发者将复杂的业务逻辑以规则的形式分离出来,使得业务规则的修改和维护变得...

Global site tag (gtag.js) - Google Analytics