小编use*_*447的帖子

Drools Core DRL - 只触发一条显着性最高的规则,跳过其他规则

我有两个 int 字段的简单 JAVA bean:'a' 和 'b'。

我有两个规则:

rule "First rule"
salience 10
when
    $bean : Bean ( a == 1)
then
    $bean.setB(10);
end

rule "Second rule"
salience 20
when
    $bean : Bean ( a == 1)
then
    $bean.setB(20);
end
Run Code Online (Sandbox Code Playgroud)

实际结果:首先触发“第二条规则”(更高的显着性),第二条触发“第一条规则”。

预期结果:仅触发一条规则(具有最高显着性)。其他规则被忽略。这该怎么做?在 Drools 中可能吗?我正在使用 Drools 6.0.0 Final。

要求: 1. 我不能使用“激活组”。2. 我不想在每个 bean 上使用 'retract'。

更新

真的很感谢你的回答。

也许我应该详细描述我的问题。我有一套 1500 条规则。每条规则:

  • 使用同一个 bean - 这个 bean 有很多字段(属性),
  • 有显着性,
  • 有很多条件,
  • 只有一个操作 - 在我的 bean 中设置一个(总是相同的)布尔标志。

我想得到什么? 当我有冲突(输入事实与两个或更多规则匹配)时,我只想触发一个具有最高显着性的规则。应该忽略这一事实的其他匹配规则。最重要的是性能 - 这应该尽可能快地工作。

我所做的? 目前我有两种解决方案,但我不知道哪个更好,或者我应该以不同的方式解决这个问题。

解决方案 1 …

java drools rule

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

drools ×1

java ×1

rule ×1