从 Drools 规则调用 java 方法

Call java method from Drools rules

我想创建一个 Drools 规则,规定如果我使用 HTTP 请求收集的数据的 CPU 使用率超过特定阈值(例如 20%),则调用位于class Netdata 也传递给 Drools Fusion。所以我到现在为止写的是:

rule "CPU usage over 20% once"
    when
        $cpu : Netdata(cpuUsagePerc > 0)
        from entry-point Netdata
    then
        System.out.println("CPU usage is now over 20%");
        $cpu.setCpuOverCount();
end

但问题是,我得到了这个错误:java.lang.RuntimeException: wrong class format。如果我删除此行 $cpu.setCpuOverCount(); 规则执行,并打印 CPU usage is now over 20% 没有任何问题。

我尝试调用的方法是这个:

public void setCpuOverCount() {
    cpuOverCount++;
}

有没有办法首先调用一个方法,如果可以,我该怎么做?如果没有,我该如何克服这些问题? 我正在使用 Drools 版本 5.1.1。

可能是因为 ECJ 版本不支持您的 Java 版本 per this answer。您可以尝试手动更新 ECJ 版本:

<dependency>
  <groupId>org.eclipse.jdt.core.compiler</groupId>
  <artifactId>ecj</artifactId>
  <version>>4.5.1</version> <!-- latest is 4.6.1 -->
</dependency>