Правило Drools для обработки двух разных фактов, вставленных за определенное время.

Мне нужно справиться с ситуацией, когда я получаю уведомление, когда в моей рабочей памяти поступают 2 разных факта в течение 30 секунд друг от друга. Затем я хочу, чтобы система удаляла факты из рабочей памяти после того, как они были обработаны.

Например, скажем, я хочу получать уведомления, когда система увидит логин от Боба, а затем он проверит свою электронную почту в течение 30 секунд.

Я знаю, что это звучит банально, однако это пример использования для проверки концепции, и он предназначен для презентации очень высокого уровня.

Я пробовал это:

rule "Bob Login Rule" dialect "java"
when
    Login( username == "bob" ) over window:time(30s);
        UserAction (action == UserAction.CHECK_EMAIL) over window:time(30s)
then
    System.out.println("Bob logged in and checked his email");
end

Заранее спасибо.


person El Guapo    schedule 16.02.2014    source источник


Ответы (1)


В этом случае вы знаете, что логин ‹ проверка электронной почты, но это может быть не всегда так.

$login: Login( $uid: uid ) // a user logs in
$check: UserAction( uid == $uid, action == UserAction.CHECK_EMAIL, this after[0s,30s] $login)

Доступны другие операторы, для которых не требуется a ‹ b.

person laune    schedule 16.02.2014