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

Drools:动态输入的顺序规则触发

巫健柏
2023-03-14
    null
rule "1st rule"
salience 50
when
    $bean : Bean(a == 1)
then
    $bean.setB(10);
end

rule "2nd rule"
salience 40
when
    $bean : Bean(b == 10)
then
    System.out.println("2nd rule success");
end

我在上面试图指出的是,只有在执行第一个规则时,第二个规则才会执行。但是,正如我所理解的,规则的“如果”部分是在“然后”部分之前执行的,因此,第二条规则失败了。

共有1个答案

邰昀
2023-03-14

如果我理解正确的话,你的例子中的第二条规则不会被执行。这是因为你没有让发动机知道事情发生了变化。对此使用updatemodify

例如

// update
when
    $bean : Bean(a == 1)
then
    $bean.setB(10);
    update($bean);
end

// or with modify
when
    $bean : Bean(a == 1)
then
    modify($bean) {
      setB(10)
    };
end

更多信息可在文档中获得。

 类似资料:
  • 我是规则引擎新手,我的应用程序需要从文件系统动态加载xml文件中的规则,因为管理员可以在运行时创建规则。(Java) 我的问题是:有没有可能流口水?如果是,那么请分享知识,如果不是,那么还有其他选择吗?

  • 我有这样的情况,在规则文件中的所有规则必须检查执行。如果我的理解是正确的,文档所说的规则将由引擎任意执行。 我有一个或多个疑问。 > 我在许多地方得到了答案,我必须使用显著性功能来按顺序执行它们。如果我使用显著性,并且我有执行所有规则的要求,它真的会大规模地影响性能吗?如果是,它会如何影响性能,甚至规则引擎也会任意执行所有规则,比如一些随机顺序。 提前谢谢。

  • 我对口水很陌生,从基础开始。这是一个设置; > 有一些规则文件 不同文件中的规则属于不同的议程组 所有规则都基于同一事实 在我的单元测试中,我获得了一个特定的“议程组”,设置焦点(

  • 我有一个多用途的传感器,每个传感器发送计步器数据。我有一个基于macAddress的规则文件,触发规则: My User只有一个字段,Steps事件有以下字段: 现在,当我为每个macAddress插入一个事件时,如果在过去一小时内使用该macAddress的用户的步骤数少于50,则规则将触发。因此,如果满足此条件,则该规则将为每个macAddress触发。但我希望规则只能为插入的步骤事件的mac

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