获取导致规则执行的所有条件

时间:2016-12-30 08:26:53

标签: java logging drools rule-engine

我希望获得导致执行规则的所有个别条件。

例如,如果我有以下规则:

package app1;

rule 'rule1'
when
    MyObjectType1( booleanPredicate1() )
    or
    (
      MyObjectType2( booleanPredicate2() )
      and
      MyObjectType3( booleanPredicate3() )
    )
    or
    MyObjectType4( booleanPredicate4() )
then
    System.out.println("In rule - " + drools.getRule().getName());
end

booleanPredicate1()booleanPredicate2()booleanPredicate4() true ,然后我想获得以下输出:

  • booleanPredicate1() resulted in rule execution.
  • booleanPredicate4() resulted in rule execution.

到目前为止我所尝试的是在所有这些谓词方法的实现中,我添加了一个日志语句,仅当该方法将返回 true时才会执行

boolean booleanPredicate1()
{
  boolean ret = false;
  ...
  ...
  if (<business-logic-defined-predicate>)
  {
    ret = true;
  }
  if(ret)
  {
    addToLog("booleanPredicate1 became true.");
  }
  return ret;
}

但是使用此解决方案,我还会得到输出 booleanPredicate2() resulted in rule execution. ,这是错误的。

有什么方法可以获得正确的记录结果吗?

1 个答案:

答案 0 :(得分:0)

咨询my paper on rule design patterns它有一个部分回答你的问题。

总结一下:你需要对个别真值进行规则来记录某些事实或某些事实组合的真实情况。您现在拥有的规则将合并来自注册表的布尔值,并且注册表包含您的问题的答案。