私は最近、drools ルールの奇妙な動作に気付きました。クラス 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
しかし、これによりエラーが発生します。つまり、よだれがフィールドを解決できないというエラーが発生します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