事实插入时触发的规则 - Drools
Rules fired upon fact insert - Drools
我是 Drools 的新手,从基础开始。这是一个设置;
- 有几个规则文件
- 不同文件中的规则属于不同的议程组
- 所有规则都基于同一个事实
- 在我的单元测试中,我获得了一个特定的 "Agenda Group",设置焦点 (
session.setFocus
)
我插入事实(这是我注意到其他议程组中的规则正在接受评估的地方,即使重点不在他们身上)
我fireAllRules()
难道不应该触发与关注的特定议程组相关的规则,而不是所有组的所有规则吗?
在许多基于规则的系统中,尤其是那些遵循 Rete 或类似算法的系统中,这是一条基本法则,评估 条件(“t
when", "left hand side") 只要工作内存中有 更改 就会发生:插入、更新或删除。相反,规则触发或 执行 的后果 ("then", "right hand side") 发生在 fireAllRules
或 fireUntilHalt
被调用之后。
规则的触发 - 更准确地说:规则的激活 - 可以通过多种方式控制。在这里,确实是focused agenda组限制了引擎可以执行的内容。
记住这一点:评估不等于执行。
我是 Drools 的新手,从基础开始。这是一个设置;
- 有几个规则文件
- 不同文件中的规则属于不同的议程组
- 所有规则都基于同一个事实
- 在我的单元测试中,我获得了一个特定的 "Agenda Group",设置焦点 (
session.setFocus
) 我插入事实(这是我注意到其他议程组中的规则正在接受评估的地方,即使重点不在他们身上)
我
fireAllRules()
难道不应该触发与关注的特定议程组相关的规则,而不是所有组的所有规则吗?
在许多基于规则的系统中,尤其是那些遵循 Rete 或类似算法的系统中,这是一条基本法则,评估 条件(“t
when", "left hand side") 只要工作内存中有 更改 就会发生:插入、更新或删除。相反,规则触发或 执行 的后果 ("then", "right hand side") 发生在 fireAllRules
或 fireUntilHalt
被调用之后。
规则的触发 - 更准确地说:规则的激活 - 可以通过多种方式控制。在这里,确实是focused agenda组限制了引擎可以执行的内容。
记住这一点:评估不等于执行。