我是Drools的新手,并从基础开始 . 这是一个设置;
-
有一些规则文件
-
不同文件中的规则属于不同的议程组
-
所有规则都是基于相同的事实
-
在我的单元测试中,我获得了一个特定的"Agenda Group",设置了焦点(
session.setFocus
) -
我插入事实( Here is where I notice the rules within the other agenda group are getting evaluated even though the focus is not on them)
-
我
fireAllRules()
是否应该解除与重点关注的特定议程小组有关的规则,而不是所有小组的所有规则?
1 回答
许多基于规则的系统中的基本定律 - 特别是那些遵循Rete或类似算法的系统 - 只要工作内存发生变化,就会发生条件评估("t when","left hand side"):插入,更新或删除 . 相反,规则触发或后果执行("then","right hand side")发生在
fireAllRules
或fireUntilHalt
被调用之后 .规则的制定 - 更确切地说:规则的激活 - 可以通过多种方式加以控制 . 在这里,它确实是一个集中的议程组,限制了引擎可以执行的内容 .
记住这一点: evaluation 不等于 execution .