2011-01-14 3 views
6

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

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

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

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

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

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

ответ

8

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

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

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

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

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

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

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

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

+0

Ваш комментарий, что «сейчас» является проблематичным понятие интригующим. Можете ли вы уточнить? –

Смежные вопросы