【发布时间】:2019-04-07 14:08:06
【问题描述】:
我知道 Drools 中的“显着性”在规则执行顺序下提供控制。但以上是我所面临的“显着性”无法再提供帮助时的问题示例。
这里我有三个规则一个接一个地执行:
rule "Rule 1"
salience 30
when
then
Resource resource1 = new Resource();
resource1.setName("Resource 1");
resource1.setAmount("5");
insert(resource1);
System.out.println("First");
end
rule "Rule 2"
salience 20
//no-loop (interesting, it doesn't lead to a loop)
when
$resource1: Resource(name == "Resource 1")
then
modify($resource1) {setAmount("20")};
System.out.println("Second");
end
rule "Rule 3"
salience 10
when
$resource1: Resource(name == "Resource 1",
Double.parseDouble(amount) > 10)
then
System.out.println("Rule is fired");
end
我预计第三条规则会被触发,并且控制台中有一条“规则被触发”行,但它没有被执行。
据我了解,问题在于规则评估阶段,当所有三个规则在执行前一次评估,然后才根据它们的“显着性”轮次执行。
并且在评估时 $resource1.amount 是 5,这就是为什么没有触发第三条规则的原因。如果您在第一条规则中输入大于 10 的数字,则 3d 规则将触发。如果您根本不设置金额 - 会导致异常。
如何解决此问题以触发 3d 规则?
【问题讨论】:
标签: drools execution rules evaluation