I think you have to follow the structure of accumulate function. Like
<result pattern> from accumulate(
<source pattern>,
init(
<init code> ),
action(
<action code> ),
reverse(
<reverse code> ), (optional)
result(
<result expression> ) )
examples are:
when
$order : Order()
$total : Number( doubleValue > 100 )
from accumulate( OrderItem( order == $order, $value : value ),
init( double total = 0; ),
action( total += $value; ),
result( total ) )
then
# apply discount to $order
end
As I understand from your code,
1.
Make List for Event class, because accumulate will loop through the elements of List<Event>
2.
Init (write action codes, i.e. initialize value so you will find how many time it got looped)
3.
Write code inside the block of action(//code here) and
4.
Update it in result block i.e. result(//update here);
Being said, follow the structure 1) init, 2) action, 3) result as above..
From: Sandhya Sree [via Drools] [mailto:ml-node+[hidden email]]
Sent: Tuesday, March 11, 2014 1:51 PM
To: Gopu Shrestha
Subject: [rules-users] sliding window problem
i have a class called Event which has the following members { name, source, timestamp } with getters ,setters and constructor. i have a rule file which creates Event objects whenever
a file is added / deleted in a particular folder. the rule file is as follows
rule "new file"
when
$p: RuleContext( $old : getOldContext().getContainedFiles(), $new :getNewContext().getContainedFiles())
RuleContext( $old != $new)
accumulate( $s : Object( this not memberOf $old ) from $new, $plus : collectList( $s ) )
events : Object() from $plus;
then
Event event = new Event("new file added",$p.getOldContext().getParent(),new Date());
end
rule " file deleted"
when
$p: RuleContext( $old : getOldContext().getContainedFiles(), $new:getNewContext().getContainedFiles())
RuleContext( $old != $new)
accumulate( $t : Object( this not memberOf $new ) from $old, $mins : collectList( $t ) )
events : Object() from $mins;
then
Event event = new Event("file deleted",$p.getOldContext().getParent(),new Date());
end
(do not confuse with RuleContext and other unknown identifiers.. they r just related with other classes in the project.. these two rules just works fine )..i need to use a sliding time
window and create another event if the number of file additions are > 5 over the past 1 minute. my rule file is :
declare Event
@role( event )
end
rule "More than 5 additions"
when
Number(intValue > 5)
from accumulate( $tick : Event ( name == "new file added" ) over window:time( 1m ),
count( $tick ) ) )
then
System.out.println("too many additions");
end
i have enabled stream mode processing too.. but it doesnt seem to work. what could be the problem?
_______________________________________________
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/rules-users-sliding-window-problem-tp4028639.html
To start a new topic under Drools: User forum, email
[hidden email]
To unsubscribe from Drools,
click here.
NAML