首页 > 代码库 > Drools6:规则互斥
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.entityimport com.china.lxl.droolstest.entity.Messagerule "Hello" when m : Message(status == Message.HELLO, myMessage : message) then System.out.println(myMessage); m.setMessage("GoodBye"); m.setStatus(Message.GOODBYE); update(m);endrule "GoodBye" salience 1 activation-group "Bye" when m : Message(status == Message.GOODBYE, myMessage : message) then System.out.println("GoodBye");endrule "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:规则互斥
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。