У меня есть правила drools, где я сравниваю числовые значения из java-объекта с числом в правиле, и, если правило истинно, счетчик, который находится в java-объекте, увеличивается. Наконец, если счетчик превышает определенное число, следует выполнить другое правило. Это последнее правило никогда не оценивается.
Чтобы проверить, достаточно ли велик счетчик, я напечатал счетчик после его увеличения, что показало, что переменная счетчика должна быть достаточно высокой.
Когда я изменяю правило для оценки на true, когда счетчик равен 0, оно оценивается как true.
Кажется, он принимает значение, с которым был создан экземпляр.
Мой Java-объект выглядит так (упрощенно):
public class CTDSIRSNotification {
private double temperature;
private double heartRate;
private double respRate;
private double paCo2;
private double wbCellCount;
private double immatureBand;
private double counter;
public CTDSIRSNotification(double temperature, double heartRate, double respRate, double paCo2, double wbCellCount, double immatureBand) {
this.temperature = temperature;
this.heartRate = heartRate;
this.respRate = respRate;
this.paCo2 = paCo2;
this.wbCellCount = wbCellCount;
this.immatureBand = immatureBand;
}
//getters and setters
}
вот мои правила:
rule "temperature"
when
$n1 : CTDSIRSNotification( temperature > 38 || temperature < 36 )
then
$n1.setCounter($n1.getCounter()+1);
System.out.println($n1.getCounter()+", temperature");
end
rule "respRateAndPaCo2"
when
$n1 : CTDSIRSNotification( respRate > 20 || paCo2 < 32 )
then
$n1.setCounter($n1.getCounter()+1);
System.out.println($n1.getCounter()+", respRateAndPaCo2");
end
rule "wbCellCountAndimmatureBand"
when
$n1 : CTDSIRSNotification( wbCellCount > 12000 || wbCellCount < 4000 || immatureBand > 10 )
then
$n1.setCounter($n1.getCounter()+1);
System.out.println($n1.getCounter()+", wbCellCountAndimmatureBand");
end
rule "sirsNotification"
when
$n1 : CTDSIRSNotification( counter >= 3 )
then
System.out.println($n1.getCounter()+", Alert for SIRS");
end
и вывод показывает, что счетчик увеличивается:
1.0, temperature
2.0, respRateAndPaCo2
3.0, wbCellCountAndimmatureBand
когда я изменяю последнее правило для проверки на 0:
rule "sirsNotification"
when
$n1 : CTDSIRSNotification( counter >= 0 )
then
System.out.println($n1.getCounter()+", Alert for SIRS");
end
значение равно true, хотя счетчик, если напечатано, равен 3:
1.0, temperature
2.0, respRateAndPaCo2
3.0, wbCellCountAndimmatureBand
3, Alert for SIRS
Проблема в том, что я не могу проверить переменные, которые меняются во время выполнения правил?