Есть ли у Drools Fusion понятие «сейчас»? - PullRequest
6 голосов
/ 14 января 2011

Я пытаюсь написать правило, которое задерживает стрельбу до тех пор, пока, по крайней мере, не пройдет 15 минут с момента последней стрельбы. Однако временные операторы в Drools Fusion позволяют рассуждать только о двух событиях по отношению друг к другу, а не об одном событии по отношению к текущему времени.

Я бы хотел что-то вроде этого:

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

Я прибег к написанию правила, которое срабатывает каждую секунду и вставляет событие сердцебиения (также убирая предыдущий сердцебиение), которое я могу использовать в других правилах для определения текущего времени.

Я нахожу это довольно не элегантным; я что-то упустил или у Drools Fusion действительно нет чего-то для этого?

NB. Я не ищу отложенное срабатывание правил или правил, которые могут срабатывать только кратно 15 минутам; если за последние 17 минут ничего не произошло, правило должно немедленно сработать в ответ на новое событие.

1 Ответ

8 голосов
/ 17 января 2011

Хотя концепция «СЕЙЧАС» может показаться простой на первый взгляд, это не так, поскольку она неоднозначна и зависит от различной семантики, которую она может использовать в зависимости от рабочей среды.Drools Fusion имеет понятие «СЕЙЧАС» , когда вы запускаете его в режиме STREAM , но оно отличается от того, что вы спрашивали выше.Объяснение здесь немного длинное, поэтому давайте сосредоточимся на вашей проблеме.

Сначала вы говорите: «Я пытаюсь написать правило, которое задерживает увольнение ...», а затем вы говорите: «Я не ищу отложенного запуска правил ...», поэтому язапутался в том, что вам нужно.

Если вы хотите отложить правило, вы можете использовать атрибут таймера:

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

Если вы хотите запустить правило в случае, если событие произошло или нетпроизойти в течение интервала, вы можете использовать раздвижные окна.Например:

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

Надеюсь, это поможет.И кстати, попробуйте опубликовать свои вопросы в списке рассылки Drools, так как вам будет легче получить ответ.Я видел твой пост только потому, что друг мне об этом сказал.

Приветствия, Эдсон

...