Drools中的knowledgeSession.fireAllRules()和knowledgeSession.fireAllRules(1)有什么区别?

时间:2016-02-03 14:01:45

标签: drools

我的用例是返回第一个匹配的规则,而不是匹配所有其他规则。有没有办法做到这一点? knowledgeSession.fireAllRules(max)有什么意义?

1 个答案:

答案 0 :(得分:2)

fireAllRules(max)方法基本上采用您想要的规则匹配量。它在内部所做的就是创建一个限制匹配量的AgendaFilter。 (参见AgendaFilter界面文档)。跳过参数意味着使用对每个可能的规则都返回true的过滤器,因此您将匹配所有内容。

如果您想要完全匹配1条规则,并且您想知道它是哪一条,则可以将此方法与AgendaEventListener结合使用。

你能做的是:

  1. 实施AgendaEventListener以存储已匹配的规则
  2. 调用fireAllRules(1)或编写自己的议程过滤器以将匹配数量限制为1
  3. 评估已匹配规则的监听器
  4. 但是,这并不能让您控制匹配的规则。使用过滤器时未匹配的所有规则将在下次触发所有规则时进行匹配(除非再次限制规则执行,依此类推)。