Drools6:规则互斥

在Drools中,有的时候会出现一种情况,一个事实Fact,满足了两个规则。

比如Fact的POJO是下面的

public class Message {

    public static final int HELLO = 1;

    public static final int GOODBYE = 0;

    private String message;

    private int status;

    public String getMessage() {
        return message;
    }

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

    public int getStatus() {
        return status;
    }

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

}

而规则文件的定义是下面这样的:

package com.china.lxl.droolstest.entity

import com.china.lxl.droolstest.entity.Message

rule "Hello"
    when
        m : Message(status == Message.HELLO, myMessage : message)
    then
        System.out.println(myMessage);
        m.setMessage("GoodBye");
        m.setStatus(Message.GOODBYE);
        update(m);
end

rule "GoodBye"
    salience 1
    activation-group "Bye"
    when
       m : Message(status == Message.GOODBYE, myMessage : message)
    then
       System.out.println("GoodBye");
end

rule "GoodBye1"
    salience 2
    activation-group "Bye"
    when
       m : Message(status == Message.GOODBYE, myMessage : message)
    then
       System.out.println("GoodBye1");
end

假如rule "GoodBye"和rule "GoodBye1"中都没有设定activation-group,那么当发布一个事实,status=Message.HELLO时,就会先执行rule "Hello",再执行"GoodBye1",然后再执行"GoodBye",因为"GoodBye1"设定的优先级salience比"GoodBye"高。

而activation-group设定了规则的激活组,那么当出现一个事实造成规则冲突时,同一个激活组下只会执行优先级高的规则。

时间: 2024-08-04 23:26:16

Drools6:规则互斥的相关文章

UCML 2.0 For ASP.NET开发平台简介

互联网时代,我们能跟上网络变革的步伐吗?我们的产品领先于竞争对手吗?我们能够满足日益个性化的客户需求吗? 采用新的软件开发方法是我们的首要选择. 第一个全面支持ASP.NET的应用框架开发平台诞生了-UCML 2.0 For ASP.NET. UCML(Universal Component Modeling Logic),通用组件建模逻辑.是一个面向WEB的应用框架开发工具,它涵盖了一个应用系统业务开发的全过程,包括数据层定义(O/R映射及GUID技 术).业务组件.界面逻辑及报表设计.业务规

μCOS-II系统之事件(event)的使用规则及Semaphore的互斥量用法

*************************************************************************************************************************** 作者:EasyWave                                                时间:2014.05.31 类别:μC/OS-II-操作系统                                  声明:

【java规则引擎】drools6.5.0中kie的概论

什么是KIE? KIE是jBoss里面一些相关项目的统称,下图就是KIE代表的一些项目,其中我们比较熟悉的就有jBPM和Drools. 这些项目都有一定的关联关系,并且存在一些通用的API,比如说涉及到构建(building).部署(deploying)和加载 (loading)等方面的,这些API就都会以KIE作为前缀来表示这些是通用的API.前面看到的一些KieServices. KieContainer.KieSession类就都是KIE的公共API. 总的来说,就是jBoss通过KIE将

【java规则引擎】drools6.5.0版本中kmodule.xml解析

kmodule.xml文件存放在src/main/resources/META-INF/文件夹下. 1 <?xml version="1.0" encoding="UTF-8"?> 2 <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> 3 <kbase name="rules" packages="rules"> 4

Drools6.1规则引擎环境搭建

1.Drools官方网站下载Drools安装包, 官网链接:http://drools.org/download/download.html 下载安装包后,解压放到任意盘(比如D盘),解压之后该目录下包含如下的子目录: 其中: binaries: 存放所依赖的第三方jar包和Drools编译后的jar包. examples:Drools项目自带的例子. javadoc:Drools的Java API文档. osgi-binaries: ? reference_manual:Drools的用户文档

进程对临界资源的互斥访问

临界资源与临界区 临界资源(critical resource):一次只能供一个进程使用的资源.   如:硬件有打印机等,软件有变量,磁盘文件(写入的时候). 临界区(critical section):把进程中访问临界资源的那段代码成为临界区. 为了实现临界资源的互斥访问,只要做到进程互斥地进去自己的临界区,便可以实现进程对临界资源的互斥访问. 同步机制 为实现各进程互质地访问自己的临界区,操作系统需要同步机制来协调各进程的运行. 1.同步机制的规则 (1)空闲让进:当无进程处于临界区,表明临

同步和互斥

1.死锁 1.1 基本概念 死锁:死锁指的是系统中并发执行的多个线程(进程)由于无法获所需的资源而永久阻塞的状态.死锁产生的必要条件: A.排它性互斥:指的是资源在任意时刻只能由一个任务(线程或进程)使用.如果此时还有其它任务请求该资源,则请求者只能等待,直至占有资源的任务释放资源. B.不可抢占:指的是当一个任务拥有某种资源时,除非它主动释放它,否则无法让该任务失去该资源的拥有权. C.持有和等待:指的是任务已经拥有了至少一种资源,然后又等待其它资源可用. D.循环等待:指在发生死锁时,必然存

C++变量命名规则

转自:http://www.cnblogs.com/finallyliuyu/archive/2010/09/25/1834301.html 浅谈C++变量命名规则 不知道别的公司如何,反正我现在的公司对变量命名并没有一定的规范,唯一要求就是能简单易懂,但是,我想,这个多个程序员,大概每个人都有自己习惯的一套 命名规则吧,不过,要是并不通用的话,大概看别人的程序会很头疼吧,SO 为了别人看偶的程序不至于太头疼,偶决定找个通俗的命名法来参考下,于是,搜到了匈牙利命名法... 匈牙利命名法的来历和介

浅析线程间通信一:互斥量和条件变量

线程同步的目的简单来讲就是保证数据的一致性.在Linux中,常用的线程同步方法有互斥量( mutex ).读写锁和条件变量,合理使用这三种方法可以保证数据的一致性,但值得的注意的是,在设计应用程序时,所有的线程都必须遵守相同的数据访问规则为前提,才能保证这些同步方法有效,如果允许某个线程在没有得到访问权限(比如锁)的情况下访问共享资源,那么其他线程在使用共享资源前都获得了锁,也会出现数据不一致的问题.另外还有自旋锁.barrier和信号量线程同步方法.本文将讨论互斥量和条件变量的使用,并给出了相