从 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>
我想创建一个 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>