That’s because $a1 can equal $a2 which can equal $a3.
The following should ensure that the events are distinct and processed in the 
right order (there didn’t seem to be anything stopping $a2 from being matched 
totally out of sequence.

  $a1: EventA( $index : index )
  $a2: EventA( index == $index, this after $a1  )
  $a3: EventA( index == $index, this after $a2 )
  not PatternConsumer( name == 'AAA', events contain $a1 || contais $a2 || 
contains $a3)

  not EventB( this after[0ms] $a1 && before[0ms] $a3, index == $index )

From: [email protected] 
[mailto:[email protected]] On Behalf Of ???
Sent: 26 October 2010 09:08
To: Rules Users List
Subject: Re: [rules-users] How to write a rule like this

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 
<[email protected]<mailto:[email protected]>>
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 
<[email protected]<mailto:[email protected]>>
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 赵侃侃 <[email protected]<mailto:[email protected]>>
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 
<[email protected]<mailto:[email protected]>>
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 赵侃侃 <[email protected]<mailto:[email protected]>>
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
[email protected]<mailto:[email protected]>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
[email protected]<mailto:[email protected]>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
[email protected]<mailto:[email protected]>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
[email protected]<mailto:[email protected]>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
[email protected]<mailto:[email protected]>
https://lists.jboss.org/mailman/listinfo/rules-users


________________________________

**************************************************************************************
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
[email protected] and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**************************************************************************************
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to