从Drools规则中调用Java方法

时间:2018-08-07 09:59:16

标签: java drools drools-fusion

我想创建一条Drools规则,说如果我使用HTTP请求从收集的数据中获得的CPU使用率超过特定阈值(例如20%),则调用位于类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。

1 个答案:

答案 0 :(得分: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>