Drools - 规则触发时并非所有操作都被执行

时间:2016-07-25 20:58:22

标签: java drools

目前,我有一个包含大量条件/操作的大型决策表。在我最近添加新操作之前,决策表一直有效。它似乎没有执行。

由于我无法显示整个文件,因此这是最重要的列的摘录(请注意,有更多条件): Partial list of conditions

以下是" orig"上定义的操作。宾语: enter image description here

以下字段通过setter更新:

  • PRM_LIB01
  • PRM_LIB09
  • PRM_LIB10

但是,PRM_LIB18未更新。即使我切换PRM_LIB10和PRM_LIB18的操作,它也只是更新的PRM_LIB10列。

当我通过代码调试时,我看到RuleBuildContext包含第一个规则的所有setter: enter image description here

基于此,我希望它能够执行setPRM_LIB18(" GC"),但这不会发生。

然后,我试图看到Drools实际生成的类文件,看看是否一切都很好,但是我无法正确查看生成的字节码。

我真的不知道为什么它不起作用。有没有人有线索或如何调试行动的实际调用,也许可以看出为什么它没有被执行?

1 个答案:

答案 0 :(得分:0)

这是不太可能的。你如何确定这个行动没有被执行?还有其他规则可能还会修改PRM_LIB18吗?

要进行快速调试,请添加另一个包含已修改对象的打印输出的操作列 - 至少是已修改的字段。

如果您仍然没有线索,请尝试使用此代码并使用完整/截断到必需输出进行报告。

private void testSpreadsheet(){
  File dtf = new File( dtPath );
  InputStream is;
  try {
    is = new FileInputStream( dtf );
    SpreadsheetCompiler ssComp = new SpreadsheetCompiler();
    String s = ssComp.compile( is, InputType.XLS );
    System.out.println( "=== Begin generated DRL ===" );
    System.out.println( s );
    System.out.println( "=== End generated DRL ===" );
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}