La regla de Drools no se evalúa, las reglas anteriores funcionan bien

Tengo reglas de babeo donde estoy comparando valores numéricos de un objeto java con un número en la regla y si la regla es verdadera, se incrementa un contador que está en el objeto java. Finalmente, si el contador excede un número particular, se debe ejecutar otra regla. Esta última regla nunca se evalúa.

Para verificar si el contador es lo suficientemente alto, imprimí el contador después de que se incrementó, lo que mostró que la variable del contador debería ser lo suficientemente alta.

Cuando cambio la regla para evaluar a verdadero cuando el contador es 0, se evalúa a verdadero.

Parece tomar el valor con el que fue instanciado.

Mi objeto Java se ve así (simplificado):

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
}

Estas son mis reglas:

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

y la salida muestra que el contador se está incrementando:

1.0, temperature
2.0, respRateAndPaCo2
3.0, wbCellCountAndimmatureBand

cuando cambio la última regla para verificar contra 0:

rule "sirsNotification"
    when
    $n1 : CTDSIRSNotification( counter >= 0 )
    then 
    System.out.println($n1.getCounter()+", Alert for SIRS");
end

se evalúa como verdadero aunque el contador si está impreso es en realidad 3:

1.0, temperature
2.0, respRateAndPaCo2
3.0, wbCellCountAndimmatureBand
3, Alert for SIRS

¿Es el problema que no puedo verificar las variables que cambian durante el tiempo de ejecución de ejecución de reglas?

Respuesta 1

hola a todos, no puedo recibir mensajes asincrónicos usando mq activo, debajo del código que estoy usando para publicar mensajes y suscribirme. publicMessage de clase pública extiende HttpServlet {...

Esta es una parte de mi código a continuación. Cuando uso el bucle for (comentado), funciona. Cuando uso esta transmisión, funciona un poco, pero luego se comporta mal en un método que nunca esperaría. ...

Todas las guías por ahí me dicen cómo eliminar las etiquetas HTML del texto para extraer el texto entre ellas. Lo que busco es la extracción de los datos que están dentro de las etiquetas HTML. p.ej ...

Estoy creando un efecto de desenfoque de movimiento deficiente para mi motor de juego, y tengo un conjunto de imágenes de cinco índices que llamé MotionBlur []. Cada vez que mi objeto gráfico termina de dibujar en la pantalla, necesito almacenar ...