• 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设定了规则的激活组,那么当出现一个事实造成规则冲突时,同一个激活组下只会执行优先级高的规则。

  • 相关阅读:
    Django目录介绍、路由系统、 ORM表的创建、XSS攻击、分页、 CBV & FBV
    正宗Django框架(Bootstrap 、Django母版、Cookie)
    索引快速查询
    前端学习之jquery
    关于vertical-align和line-height的真知灼见
    js BOM对象 DOM对象
    JS基础学习(一)
    html5实现尖角号
    装饰器
    Win8.1离线安装.Net Framework 3.5
  • 原文地址:https://www.cnblogs.com/ScorchingSun/p/6718430.html
Copyright © 2020-2023  润新知