Drools 入门例子

article/2025/10/1 10:03:28

 

本人参照drools-4.0.7-examples修改,可以到这个网址去下载:http://www.jboss.org/drools/downloads.html

1:下载4.0版eclipse : eclipse-java-ganymede-win32.zip并解压到D:/eclipse-java-ganymede-win32不需安装
2:下载drools插件 http://www.jboss.org/drools/downloads.html 的 Drools 4.0.7 Eclipse Europa 3.3 Workbench
3:解压drools,把其中的org.drools.eclipse_4.0.7.jar拷到eciplse的features目录下
4:启动eclipse,可以看到drools workbench了,创建简单的drools
File->New->Project->Drools->Rule Project点击Next,命名我为HelloDrools,点击Finish。
5:运行Run As->Java Application->DroolsTest - com.sample
报错org.drools.RuntimeDroolsException: Unable to load dialect 'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java'
解决办法: 在运行图标->Run Configuration->Classpath->Add External JARs添加D:/eclipse-java-ganymede-win32/eclipse/plugins/org.eclipse.jdt.core_3.4.0.v_874.jar。
6:输出
Hello World
Goodbye cruel world
-------------------------------

文档中说还需要GEF,不过上面的4.0版的eclipse中已经有了,其他版本不知道,在这看Help->Software Update->Installed Software。

首先要导入的包:其中foxtrot-2.0.jar ,jgoodies-forms-1.0.4.jar非必须在其他例子要用到

HelloWorldExample .java

package org.drools.examples;

import java.io.FileReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;

import org.drools.compiler.PackageBuilder;
import org.drools.event.DebugAgendaEventListener;
import org.drools.event.DebugWorkingMemoryEventListener;
import org.drools.rule.Package;

/**
* This is a sample file to launch a rule package from a rule source file.
*/
public class HelloWorldExample {

public static void main(String[] args) throws Exception {
   String filepath = "bin/rules/org/drools/examples/HelloWorld.drl";
   final Reader source = new FileReader(filepath);
   final PackageBuilder builder = new PackageBuilder();
  
   // this will parse and compile in one step
   builder.addPackageFromDrl(source);

   // Check the builder for errors
   if (builder.hasErrors()) {
    System.out.println(builder.getErrors().toString());
    throw new RuntimeException("Unable to compile /"HelloWorld.drl/".");
   }

   // get the compiled package (which is serializable)
   final Package pkg = builder.getPackage();

   // add the package to a rulebase (deploy the rule package).
   final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
   ruleBase.addPackage(pkg);

   final StatefulSession session = ruleBase.newStatefulSession();

   session.addEventListener(new DebugAgendaEventListener());
   session.addEventListener(new DebugWorkingMemoryEventListener());

final Message message = new Message();
   message.setMessage("Hello World");
   message.setStatus(Message.HELLO);
   session.insert(message);

   session.fireAllRules();

session.dispose();
}

public static class Message {
   public static final int HELLO = 0;
   public static final int GOODBYE = 1;

   private String message;

   private int status;

   public Message() {

   }

   public String getMessage() {
    return this.message;
   }

   public void setMessage(final String message) {
    this.message = message;
   }

   public int getStatus() {
    return this.status;
   }

   public void setStatus(final int status) {
    this.status = status;
   }
}

}

HelloWorld.drl

package org.drools.examples

import org.drools.examples.HelloWorldExample.Message;

rule "Hello World"
    dialect "mvel"
when
   m : Message( status == Message.HELLO, message : message )
then
     System.out.println( message );
     modify ( m ) { message = "Goodbyte cruel world",
                    status = Message.GOODBYE };
     System.out.println( message );                
end

rule "Good Bye"
    dialect "java"
when
   Message( status == Message.GOODBYE, message : message )
then
   System.out.println( message );   
end


http://chatgpt.dhexx.cn/article/uLduFrAl.shtml

相关文章

Drools

Drools入门系列(一)HelloWorldDrools入门系列(二)HelloWorld详解之Sample.drlDrools入门系列(三)HelloWorld详解之kmodule.xmlDrools入门系列(四)HelloWorld详解之JUnit Test类Drool…

规则引擎 Drools

规则引擎 Drools 文章目录 规则引擎 Drools1. 问题引出2. 规则引擎概述2.1 什么是规则引擎2.2 使用规则引擎的优势2.3 规则引擎应用场景2.4 Drools介绍 3.Drools入门案例3.1 业务场景说明3.2 开发实现3.3 小结3.3.1 规则引擎构成3.3.2 相关概念说明3.3.3 规则引擎执行过程3.3.4…

drools学习

drools使用和设置 1.概述举个例子 2.结合maven引入1.引入maven2.创建kmoudule.xml文件3如有需要,安装drools的插件4编写drl规则文件5准备用于测试的po类6编写drools的java接口 3.基本规则 4.组合语法 1.概述 drools是一个规则引擎,什么是规则引擎?就是能够自动将决策树转化为…

drools详解

1、基本的概念 请参考这个链接,差不多的语法感觉都介绍了 drools-api的基本语法链接 2、如何将drl文件配置在数据库中,实现动态加载: package com.neo.drools;import com.neo.drools.model.Message; import org.kie.api.io.ResourceType; i…

Drools基本介绍,入门案例,基本语法

目录 经典需求与场景 需求 传统做法-if 传统做法-策略 问题? 规则引擎 概念 起源 原理--基于 rete 算法的规则引擎 规则引擎应用场景 Drools 介绍 消费赠送积分案例 第一步: 创建工程,引入jar 创建 drools 自动配置类 订单实体…

Drools 简介

序 现实生活中,规则无处不在。对于某些企业级应用,诸如欺诈检测软件,购物车,活动监视器,信用和保密应用之类的系统,经常会有大量的、错综复杂的业务规则配置,而且随着企业管理者的决策变化&…

drools 介绍

1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1.2.1 if...else if (order.getAmout() < 100){ order.setScore(0); addScore(order); }else if(order.getAmo…

计组——定点数原码反码补码移码以及它们之间的转换

原码 用尾数表示真值的绝对值&#xff0c;符号位“0/1”对应“正/负” 若机器字长n1位&#xff0c;原码整数的表示范围&#xff1a; − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 {\color{Red} -(2^{n}-1)\leq x\leq 2^{n}-1} −(2n−1)≤x≤2n−1&#xff08;关于原点对称&#xff09;…

数据的表示:原码、反码、补码、移码以及浮点数的运算

前言 复习到数据表示方面相关的知识&#xff0c;所以在这里做一下记录&#xff0c;也方便大家参考。 什么是 R 进制 对于 R 机制&#xff0c;如果要实现与十进制的转换&#xff0c;则使用 按权展开法&#xff0c;其具体操作为&#xff1a; 将 R 进制数的每一位数值用 R k R…

五分钟理解原码补码反码和移码

这是计算机的基本知识了&#xff0c;一定要好好学。哈哈废话不多说&#xff0c;直接进入正题吧。计算机中有无符号数和有符号数两大类。 有符号数就是正负数&#xff0c;在计算机中正好用0和1分别去代表正和负。(ps:好多人不理解机器数和真值&#xff0c;机器数就是把符号数字…

原码、反码、补码、移码的表示

若字长n为8时&#xff0c;那么45的二进制表示0 0101101 &#xff0c;若数值X 1.原码 [X]原&#xff0c;在二进制数值中&#xff0c;正数保持不变&#xff0c;负数符号位置1. 2.反码 [X]反&#xff0c;的正数保持不变 &#xff0c; 负数对数值的绝对值每一位按位求反 3.补码…

关于补码移码各自和原码的联系、来历、功能及I EEE754标准中移码范围问题

最近在学习计算机组成原理时,遇到一些问题,记录在此。 如果你对下面这段话有疑惑或者兴趣&#xff0c;我或许能说点什么你感兴趣的。 真值-128的补码&#xff1a;1000 0000&#xff0c;这个补码本身表示的二进制数&#xff08;无符号&#xff09;是128&#xff0c;其对应着真…

移码的计算方式

规则&#xff1a;对应真值的补码的符号位取反&#xff1b; 计算公式&#xff1a; 式中&#xff1a;x为真值&#xff0c;n为整数的位数&#xff1b; 形式上补码是先减后增的&#xff0c;移码是递增的&#xff1b;根据人类的习惯&#xff0c;移码可以清楚的反映对应真值的大小…

计算机组成原理学习笔记:定点数、浮点数、原码、反码、补码、移码

定点数与浮点数 所谓定点数就是指小数点的位置固定不变而浮点数是小数点的位置是不固定的&#xff0c;会浮动 1 ) 定点数 用熟悉的十进制数来类比&#xff0c;定点数就是我们平时更习惯使用的常规的计数方式&#xff0c;我们会显式的标明小数点的位置Eg: 110.12 2 &#xf…

原码,补码,移码

一、原码 ①最高位为符号位&#xff0c;0表示正数&#xff0c;1表示负数&#xff1b; ②除符号位其它数值部分&#xff0c;就是数值本身绝对值的二进制数&#xff1b; ③负数的原码是在其绝对值得的基础上&#xff0c;符号位变为1&#xff1b; 但是&#xff1a; 0的表示不唯一&…

移码补码原理

计算机中的“数”&#xff0c;花样很多&#xff0c;又是ASCII码、又是BCD码等等&#xff0c;下面&#xff0c;做而论道写了一些关于移码、补码的一些看法&#xff0c;欢迎拍砖。 机器数 计算机中的“数”&#xff0c;其实都不是数字&#xff0c;它们都是一些高、低电平。其中&a…

浮点数与移码

浮点数的组成和计数原理 浮点数是什么浮点数的表示与规定浮点数的规定&#xff08;IEEE754 标准&#xff09;浮点数的表示范围&#xff08;IEE7标准瞎&#xff09;阶码用移码表示 浮点数是什么 浮点数就是小数点可以任意浮动的数字。   因为在计算机的机器语言中&#xff0c;…

图神经网络时代的深度聚类

©PaperWeekly 原创 作者&#xff5c;纪厚业 学校&#xff5c;北京邮电大学博士生 研究方向&#xff5c;图神经网络和推荐系统 聚类作为经典的无监督学习算法在数据挖掘/机器学习的发展历史中留下了不可磨灭的印记。其中&#xff0c;经典的聚类算法 K-Means 也被选为数据挖…

聊聊测试工程师的核心能力模型

这是鼎叔的第二篇原创文章。 行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 多年大厂技术总监和质量通道委员经验&#xff0c;横跨多个不同领域&#xff0c;微信公众号“敏捷测试转型”&#xff0c;欢迎多多交流。 鼎叔过往接触过各个团队的测试&#xff08;测试开发&…

对比学习有多火?文本聚类都被刷爆了…

文 | 花小花Posy 大家好&#xff0c;我是小花。 对比学习的大火???? 越来越旺了&#xff0c;已然从CV蔓延到NLP了。今天给大家介绍的正是一篇将对比学习应用到文本聚类上的工作&#xff0c;NAACL21新鲜出炉的paper——《Supporting Clustering with Contrastive Learning》…