Ich habe vor kurzem ein seltsames Verhalten mit drools Regeln bemerkt. Ich hatte Klasse Herzfrequenz und es hat folgende Felder:Drools Regelsprache: seltsames Verhalten mit Klassenfeldern
int heartRate;
Date timeStamp;
String macAddress;
Meine Regeldatei ist die folgende:
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
Ich mag das Feld heartRate
-heartrate
ändern und ich die Feldnamen in meiner Regel ändern auch so, dass meine neue Regel ist jetzt:
rule "HEARTRATE RULE 1"
when
$heartRate : HeartRate(heartrate >= 180) from entry-point "entryHeartRate"
then
Action.handleAction(1,"Heart rate is to high!");
end
Aber dies gibt Fehler nämlich, dass das Feld heartrate
nicht auflösen kann sabbert. Aber wenn ich die Regel wieder auf das Original zurückstelle, so funktioniert das mit heartRate
Event obwohl ein solches Feld nicht mehr existiert. Ich bekomme den folgenden Fehler:
[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