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

Swindells, Thomas TSwindells at nds.com
Tue Oct 26 04:16:22 EDT 2010


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: rules-users-bounces at lists.jboss.org [mailto:rules-users-bounces at lists.jboss.org] 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 <michael.anstis at gmail.com<mailto: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<mailto: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<mailto: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<mailto: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<mailto: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<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
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 postmaster at nds.com 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
**************************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20101026/19da5cda/attachment.html 


More information about the rules-users mailing list