当前位置: 首页 > 知识库问答 >
问题:

为什么Drools在使用议程筛选器激发specifc规则时验证所有其他规则?

邢飞雨
2023-03-14

我有一大堆规则,我正试图为它们编写一些单元测试。在我的测试中,我使用以下内容:

int rulesFired = kSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule name 1"));

我注意到的是,尽管触发返回的规则数量是1,但Drools仍然试图根据满足条件的任何其他规则进行验证。我有时会收到来自其他规则的错误消息,这些规则没有在我的规则名称等于议程筛选器中定义,因为根据我在单元测试的kSession中插入的内容,这些条件是匹配的。

rule "test1"
    when
        $var : Map(this["key"] == "gold")
    then
        do something
    end

rule "test2"
    when
        $var : Map(this["key"] == "gold" && this["other"] == "silver")
    then
        do something
    end

共有1个答案

姚棋
2023-03-14

用于评估规则条件的代码来自所有规则的组合,可能以减少总体工作量的方式组合相同的条件或部分条件,如模式或约束。因此,无法在运行时抑制对单个规则条件的评估。

 类似资料:
  • 我对drools和KIE服务器是新手。我遇到了一个问题,即如何通过触发规则RHS(then action)在工作记忆中插入新的事实,然后通过这些动态插入的事实激活其他规则。 我所期望的是,当BaseFeature从外部插入工作内存并激活RuleOne时,在RuleOne内部“然后”它将插入新的事实RuleResult,并希望激活RuleTwo,但它没有激活RuleTwo,只是RuleOne被激活了

  • 我是Drools Fusion的新手,我想知道为什么我的规则不总是被取消。我用的是Drools 6.3。以下是我要插入的事件: 这是我的规则文件: 这是我的输出: 我预计我的规则将触发2次,并给出以下输出: 我可能忽略了一些事情,但我没有找到关于我的问题的太多信息。有人能解释一下这里到底发生了什么吗?非常感谢。

  • 我在我的项目中使用drools,并假设它有100条规则。我有两个流程(通常它有开始节点- 现在我使用第一个进程流的kiesation和调用start进程,我看到它加载了所有100条规则而不是只有50条,并给我编译和运行时错误。所以请帮助我理解为什么来自不同规则流组的规则在一个流程中执行,这些规则与它的规则流组无关?我在加载条件时看到了所有这些。

  • 我正在尝试验证密码字段是否存在。我想允许某人编辑用户,他们可能想更改用户密码,也可能不想更改用户密码。所以我想我可以使用Laravels验证规则,特别是“有时”规则来实现这一点。我有一套规则: 例如,对于其他字段,通常会有其他规则,而对于密码,则会有更严格的规则。如果传递的数据中存在密码字段,我希望这只应用min:8规则,但是如果我将密码字段留空,则会出现一个验证错误,表明密码字段是必需的。 我不

  • 验证规则的定义通常有两种方式,如果你使用了验证器的话,通常通过rule属性定义验证规则,而如果使用的是独立验证的话,则是通过rule方法进行定义。 属性定义 属性定义方式仅限于验证器,通常类似于下面的方式: <?php namespace app\index\validate; use think\Validate; class User extends Validate { prot

  • 目前,我有一个很大的决策表,其中包含许多条件/操作。决策表一直有效,直到我最近添加了一个新操作。它似乎没有执行。 通过setter更新以下字段: PRM_LIB01 PRM_LIB09 PRM_LIB10 但是,未更新PRM\U LIB18。即使我切换PRM\u LIB10和PRM\u LIB18的操作,也只有PRM\u LIB10的列得到更新。 因此,基于此,我希望它也执行setPRM\u LI