我最近注意到一些奇怪的行为与口水规则。我有类HeartRate,它有以下字段:
int heartRate;
Date timeStamp;
String macAddress;我的规则文件如下:
import drools.HeartRate
import drools.Action
declare HeartRate
@role(event)
end
rule "HEARTRATE RULE 1"
when
$heartRate : HeartRate(heartRate >= 180) from entry-point "entryHeartRate"
then
Action.handleAction(1,"Heart rate is to high!");
end我希望将字段heartRate更改为heartrate,并更改规则中的字段名,以便我的新规则现在是:
rule "HEARTRATE RULE 1"
when
$heartRate : HeartRate(heartrate >= 180) from entry-point "entryHeartRate"
then
Action.handleAction(1,"Heart rate is to high!");
end但这会产生错误,即drools无法解析字段heartrate。但是,当我将规则更改回原始规则时,所以对于heartRate,它可以工作事件,尽管这样的字段已经不存在了。我得到以下错误:
[Unable to Analyse Expression heartrate >= 180:
[Error: unable to resolve method using strict-mode: drools.HeartRate.heartrate()]
Exception in thread "main" java.lang.RuntimeException: Unable to compile drl".
[Near : {... heartrate >= 180 ....}]
^
[Line: 26, Column: 4] : [Rule name='HEARTRATE RULE 1']
]
at drools.Main.initDrools(Main.java:53)
at drools.Main.main(Main.java:39)
C:\Users\Tim Deweert\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1发布于 2016-04-22 10:46:33
类应该遵循Java规范,如果在约束中使用getSomeField,Drools将尝试定位someField。如何调用私有实例字段本身并不重要。
如果该字段是公共的,则将在名称匹配时使用该字段。否则,如果getter的名称与上面给出的规则相匹配,则使用getter。
发布于 2016-04-22 10:45:00
我发现了我的错误,我忘了改变现场心痛的get/set方法。
https://stackoverflow.com/questions/36775676
复制相似问题