[rules-users] Help with event not found over window query

Wolfgang Laun wolfgang.laun at gmail.com
Tue Feb 18 13:37:19 EST 2014


On 18/02/2014, daveor <dump at daveor.com> wrote:
> Thanks for your email below. I needed to refactor my code somewhat to get
> this technique to work but it solved the problem that I had.

You're welcome. - That happens.

>
> I was previously using fireAllRules() but I refactored the code to use
> fireUntilHalt() instead, which required some additional work to make a
> couple of other supporting features behave properly. I know you don't
> strictly need to do this, but it needed to be done anyway and it made sense
> to do it now.
>

[snip]

> I would have thought it was quite a common scenario where someone wanted to
> implement business logic such as:
>
> - Something happens
> - It is expected that something else will happen within a certain time
> period of the first thing happening
> - If the second thing doesn't happen within the time period, generate an
> alert

Yes, it is, and you are in good company. - A thorough study of the
temporal operators or reading Hawking's A Short History of Time helps,
either one ;-)

>
> I ran into trouble because my various rules (from my original email)
> wouldn't fire an alert as expected when I fed in simulated events.
>
> I'm curious as to why you think it's interesting that the four rules below
> fail to meet my expectation? I suppose it's the fact that I'm a drools
> newbie and the issue here is probably just my inexperience mapping business
> logic into drools rules.

The word is "illuminative" rather than "interesting". Take this one:

    $e1: Event($location: properties["location"] && ...)
    not Event(...., this after $e1)

The $e1 Event is here, Time is Now. It's most certainly true that
nothing is here after Now! - And the next one:

    $e1: Event($location: properties["location"] && ...)
    not Event(...., this after[0, 1m] $e1)

Again, Event $e1 is here, Time is Now, and nothing is here after Now.
The operator does not instruct the Engine to wait!

Cheers
Wolfgang






>
> daveor
>
> On 15 Feb 2014, at 09:49, laune [via Drools] wrote:
>
>> It would be interesting to discuss why each of these four rules fails to
>> meet you expectation. Mostly it's due to the engine not evaluating
>> exactly one minute after the "certain event" arrives.
>>
>> The following rule fires 1 minute after the evaluation of the arrival
>> of an Event according to constraints and when no second Event
>> (according to constraints not shown) has arrived since then.
>>
>> rule "Something Else" dialect "mvel"
>>     timer ( int: 1m )
>> when
>>     $e1: Event($location: properties["location"] && ...)
>>     not Event(..., this after $e1)
>> then
>>    ...
>> end
>>
>> -W
>>
>> On 14/02/2014, daveor <[hidden email]> wrote:
>>
>> > Hi there,
>> >
>> > I'm a drools newbie and I wonder if someone could help me. I'm using
>> > drools
>> > 6.0.1 and I'm trying to write a rule that fires when:
>> >
>> > 1) a certain event is seen and
>> > 2) a second event is not seen within a certain period of time (1 minute
>> > in
>> > the examples below) after the first event is seen
>> >
>> > I have tried the following LHS patterns:
>> >
>> > rule "Something" dialect "mvel"
>> > when
>> >     $e1: Event($location: properties["location"] && ...)
>> >     not Event(...., this after $e1)
>> > then
>> >     //do stuff
>> > end
>> >
>> > rule "Something" dialect "mvel"
>> > when
>> >     $e1: Event($location: properties["location"] && ...)
>> >     not Event(...., this after[0, 1m] $e1)
>> > then
>> >     //do stuff
>> > end
>> >
>> > rule "Something" dialect "mvel"
>> > when
>> >     $e1: Event($location: properties["location"] && ...)
>> >     List (size == 0) from collect (Event(..., this after $e1) over
>> > window:time(1m))
>> > then
>> >     //do stuff
>> > end
>> >
>> >
>> > rule "Something" dialect "mvel"
>> > when
>> >     $e1: Event($location: properties["location"] && ...)
>> >     List (size == 0) from collect (Event(...) over window:time(1m))
>> > then
>> >     //do stuff
>> > end
>> >
>> > The unwanted behaviours are as follows:
>> >
>> > In the first case, the rule fires immediately after the first event is
>> > inserted.
>> > In the second case, the rule fails to fire if the second event is seen
>> > (as
>> > expected) but the rule does not fire if the second event is not seen
>> > within
>> > 1 minute.
>> > In the third and fourth cases, the rule fires immediately after the
>> > first
>> > event is inserted.
>> >
>> > Event is a java class with a hash map of properties, defined with the
>> > following metadata:
>> >
>> > declare Event
>> > @role(event)
>> > end
>> >
>> > I would really appreciate if someone could help me out here.
>> >
>> > Thanks and let me know if you need any more info.
>> >
>> > Dave
>> >
>> >
>> >
>> >
>> > --
>> > View this message in context:
>> > http://drools.46999.n3.nabble.com/Help-with-event-not-found-over-window-query-tp4028129.html
>> > Sent from the Drools: User forum mailing list archive at Nabble.com.
>> > _______________________________________________
>> > rules-users mailing list
>> > [hidden email]
>> > https://lists.jboss.org/mailman/listinfo/rules-users
>> >
>> _______________________________________________
>> rules-users mailing list
>> [hidden email]
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>> If you reply to this email, your message will be added to the discussion
>> below:
>> http://drools.46999.n3.nabble.com/Help-with-event-not-found-over-window-query-tp4028129p4028131.html
>> To unsubscribe from Help with event not found over window query, click
>> here.
>> NAML
>
>
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Help-with-event-not-found-over-window-query-tp4028129p4028171.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list