如何在 IntelliJ 上调试 Drools 规则?

amy*_*amy 6 java drools

我们有一个使用 Drools 规则的遗留 Java/Spring 项目。有没有办法在 IntelliJ 上调试规则文件,例如添加断点和单步执行规则逻辑?

wal*_*ros 5

我所做的就是定义一个静态方法,它采用一个 Object 类型的参数。该方法稍后可以用作调试回调。这样您就可以调试规则的 LHS 和 RHS 端:

class DroolsUtils {
  public static boolean debugLhsValue(Object value) {
    log.debug(value.toString()); // you can set breakpoint here
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)

在 DRL 文件中,您可以使用以下技巧来使用它:

 import function com.bnymellon.ais.rei.dataexchange.brms.runtime.BrmsPluginHelper.debugLhsValue;


  rule "my rule"

  enabled true

  when
    $model : MyModel()
    MyModel(debugLhsValue($model) == true) from $model

    $mapInMyModel: Map() from $model.someMap; 
    MyModel(debugLhsValue($mapInMyModel) == true) from $model

    Entry(getKey() == "something", $myValue: getValue()) from $mapInMyModel.entrySet();
    MyModel(debugLhsValue($myValue) == true) from $model

  then
    debugLhsValue("in RHS");
    // do something 
  end
Run Code Online (Sandbox Code Playgroud)

如上所示,您可以在每条指令后调用此调试函数。您还可以在条件子句中使用它。剩下的唯一一件事就是在 debugLhsValue 中设置断点,然后您就知道这些值是什么。


Ton*_*ola 1

Drools项目有一个Eclipse插件,可以进行调试,但据我所知,Idea中没有这个插件。