It's getting closer now but still has one problem that it reports
for a
pattern match where there's an EventB with same index value in between.
The Testing events feed pattern that I use can be described as below:
EventA:0 EventB:1 EventA:0 EventB:1 EventA:1 EventB:0 EventA:0
here it reports for a pattern match where it shouldn't EventB:1
This works for me, i.e., no match is reported, using the rule
rule "three A"
when
$a1: EventA( $index : index )
$a2: EventA( index == $index, this != $a1 && after[0s] $a1 )
$a3: EventA( index == $index, this != $a1 && != $a2 && after[0s] $a2 )
## not PatternConsumer( id == "AAA", events contains $a1 || contains
$a2 || contains $a3 )
not EventB( this after[0ms] $a1 && before[0ms] $a3, index == $index )
then
System.out.println( "AAA match " + $index );
PatternConsumer pc = new PatternConsumer("AAA", $a1, $a2, $a3 );
insert( pc );
end
Best Regards,
Kevin Zhao
在 2010年10月26日 下午4:33,Wolfgang Laun <wolfgang.laun(a)gmail.xn--com>:-0s6m5392c
>
> If there may be two EventA with the same timestamp, additional
> constraints may be necessary, and
> after may have to be used with a start time of 0ms:
>
> $a1: EventA( $index : index )
> $a2: EventA( this != $a1 && after[0ms] $a1, index == $index )
> $a3: EventA( this != $a1 && != $a2 && after[0ms] $a2, index ==
$index )
>
> -W
>
>
> 2010/10/26 赵侃侃 <kevin223(a)gmail.com>:
> > 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(a)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(a)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(a)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(a)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(a)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(a)lists.jboss.org
> >>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
> >>>>>>
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> rules-users mailing list
> >>>>> rules-users(a)lists.jboss.org
> >>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
> >>>>>
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> rules-users mailing list
> >>>> rules-users(a)lists.jboss.org
> >>>>
https://lists.jboss.org/mailman/listinfo/rules-users
> >>>>
> >>>
> >>>
> >>> _______________________________________________
> >>> rules-users mailing list
> >>> rules-users(a)lists.jboss.org
> >>>
https://lists.jboss.org/mailman/listinfo/rules-users
> >>>
> >>
> >>
> >> _______________________________________________
> >> rules-users mailing list
> >> rules-users(a)lists.jboss.org
> >>
https://lists.jboss.org/mailman/listinfo/rules-users
> >>
> >
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users