Drools6:规则互斥

Posted 烈日1990

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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设定了规则的激活组,那么当出现一个事实造成规则冲突时,同一个激活组下只会执行优先级高的规则。

以上是关于Drools6:规则互斥的主要内容,如果未能解决你的问题,请参考以下文章

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

drools6入门样例

LockSupport.java 中的 FIFO 互斥代码片段

drools6.3+spring+Drools Workbench+activemq搭建风险控制系统

在 Drools 6 中以编程方式创建新的 drools 规则的新接受方式是啥?

读写锁 与 互斥锁