[rules-users] How to write a rule like this

赵侃侃 kevin223 at gmail.com
Tue Oct 26 04:07:51 EDT 2010


Hello,
Hello,

I just tried this rule, but it doesn't seem to work as expected.
What I have now is every time I have an EventA received then a pattern is
reported matched no matter whether any of the other constrains is met.

Any ideas?

Best Regards,
Kevin Zhao

2010/10/26 Michael Anstis <michael.anstis at gmail.com>

> You could try this too; if you don't want lots of new attributes for your
> model:-
>
>
> rule "three A"
> when
>   $a1: EventA( $index : index )
>   $a2: EventA( index == $index )
>   $a3: EventA( index == $index )
>   not PatternConsumer( name == 'AAA', events contain $a1 || contais $a2 ||
> contains $a3)
>
>   not EventB( this after[0ms] $a1 && before[0ms] $a3, index == $index )
> then
>   // ... match
>   PatternConsumer pc = new PatternConsumer("AAA", $a1, $a2, $a3 );
>   insert(pc);
> end
>
>
>
> 2010/10/25 Wolfgang Laun <wolfgang.laun at gmail.com>
>
>> Giving those other rules a higher salience is one way, but I think
>> it is better to add a boolean field "usedForAAA" to class EventA.
>>
>> rule "three A"
>> when
>>   $a1: EventA( $index : index, usedForAAA == false )
>>   $a2: EventA( index == $index, usedForAAA == false )
>>   $a3: EventA( index == $index, usedForAAA == false )
>>
>>   not EventB( this after[0ms] $a1 && before[0ms] $a3, index == $index )
>> then
>>   // ... match
>>   modify( $a1 ){ setUsedForAAA( true ) }
>>   modify( $a2 ){ setUsedForAAA( true ) }
>>   modify( $a3 ){ setUsedForAAA( true ) }
>>
>> end
>>
>> -W
>>
>>
>> 2010/10/25 赵侃侃 <kevin223 at gmail.com>
>>
>>> Thanks Wolfgang,
>>>
>>> It now starts to make sense to me. However, is it possible that I don't
>>> retract those matched eventA? All those events might be used to evaluate
>>> against other rules.
>>>
>>> Thanks again,
>>> Kevin Zhao
>>>
>>> 2010/10/25 Wolfgang Laun <wolfgang.laun at gmail.com>
>>>
>>>> I assume you are using Fusion, using a session clock so that temporal
>>>> operators are available.
>>>>
>>>> rule "three A"
>>>> when
>>>>   $a1: EventA( $index : index )
>>>>   $a2: EventA( index == $index )
>>>>   $a3: EventA( index == $index )
>>>>   not EventB( this after[0ms] $a1 && before[0ms] $a3, index == $index )
>>>> then
>>>>   // ... match
>>>>   retract( $a1 );
>>>>   retract( $a2 );
>>>>   retract( $a3 );
>>>> end
>>>>
>>>> -W
>>>>
>>>> 2010/10/25 赵侃侃 <kevin223 at gmail.com>
>>>>
>>>>> Hello,
>>>>>
>>>>> I'm still quite new to the drools stuffs just getting the examples
>>>>> running. I'm sorry if my question is too basic.
>>>>> I have a system that will continuously to receive events sent from some
>>>>> other system. Basically I have two types of events, eventA and eventB.
>>>>> Both eventA and eventB have two properties, index and timestamp.
>>>>>
>>>>> What I want is to capture a pattern to meet the following conditions
>>>>>
>>>>> 1. every 3 consecutive eventsA without any eventB in between having a
>>>>> same index value ordering by their timestamp.
>>>>>
>>>>> 2. all events in a matched pattern will have the same value of property
>>>>> index.
>>>>>
>>>>> 3. if a pattern is matched, any of the events in this pattern should
>>>>> not be used again for a new matching.
>>>>>
>>>>> there are some examples below, the number after a colon stands for the
>>>>> value of its index number and assume those events are already ordered by
>>>>> their timestamp.
>>>>>
>>>>> eventB:2    eventA:1     eventA:1     eventA:1  eventB:3      ---------
>>>>> one successful match, we have three eventA with same index value 1 in a row
>>>>>
>>>>> eventB:2    eventA:1     eventA:1     eventB:1  eventA:1      ---------
>>>>> no match because there's an eventB in between
>>>>>
>>>>> eventB:2    eventA:1     eventA:1     eventB:2  eventA:1      ---------
>>>>> one successful match because the in-between eventB has a different index
>>>>> value
>>>>>
>>>>> eventA:1    eventA:1     eventA:1     eventA:1  eventA:1      ---------
>>>>> only one match, because once matched, the events can not be used for a
>>>>> second match again.
>>>>>
>>>>>
>>>>> I just don't know how to write a rule like this. Is there anyone who
>>>>> can shed some lights on?
>>>>>
>>>>> Best Regards,
>>>>> Kevin
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20101026/fe28bc35/attachment.html 


More information about the rules-users mailing list