2011-01-14 13 views
6

Estoy tratando de escribir una regla que retrase el disparo hasta que, al menos, hayan pasado 15 minutos desde el último disparo. Sin embargo, los operadores temporales en Drools Fusion solo permiten el razonamiento de dos eventos en relación uno con el otro y no un evento en relación con el tiempo actual.¿Drools Fusion tiene un concepto de "ahora"?

me gustaría algo como esto:

rule "some rule" 
when 
    not LastFiredEvent(this before[0m, 15m] NOW) 
    … 

he recurrido a escribir una regla que se activa cada segundo y se inserta un evento de latido (también retraer el latido anterior), lo que puedo usar en otras normas de servir como la hora actual.

Encuentro esto bastante poco elegante; ¿Me estoy perdiendo algo o Drools Fusion realmente no tiene algo para esto?

NB. Estoy no buscando el disparo retrasado de reglas o reglas que solo pueden disparar en múltiplos de 15 minutos; si nada ha sucedido en los últimos 17 minutos, la regla debe disparar inmediatamente en respuesta a un nuevo evento.

Respuesta

8

Aunque el concepto de "AHORA" puede parecer simple al principio, no lo es, ya que es ambiguo y depende de la semántica diferente que puede tomar en función del entorno en el que se ejecuta. Drools Fusion tiene un concepto de "AHORA" cuando lo ejecuta en modo STREAM, pero es diferente de lo que está pidiendo arriba. La explicación es un poco larga para hacer aquí, así que enfóquese en su problema.

Primero, diga: "Estoy intentando escribir una regla que retrase el disparo ..." y luego diga: "No estoy buscando un retraso en el disparo de las reglas ...", por lo que estoy confundido acerca de Que necesitas.

Si desea retrasar la regla se puede utilizar el atributo temporizador:

rule X 
    timer(int: 15m) 
... 

Si desea disparar una regla en caso de un evento tuvo o no ocurrió dentro de un intervalo, puede utilizar ventanas correderas . Por ejemplo:

rule "Event did not happen in the last 15m" 
when 
    not(SomeEvent() over time:window(15m)) 
... 

Espero que ayude. Y, por cierto, intente publicar sus preguntas en la lista de correo de Drools, ya que le será más fácil obtener una respuesta. Solo vi tu publicación porque un amigo me llamó la atención al respecto.

Saludos, Edson

+0

Su comentario de que 'ahora' es un concepto problemático es intrigante. ¿Puedes elaborar? –