[rules-users] clock.advanceTime behaviour?

Edson Tirelli tirelli at post.com
Sat Aug 29 19:26:50 EDT 2009


   Hi Barry,

   First thing, make sure you configured the engine in STREAM mode. Check
KnowledgeBaseConfiguration for that.

   Second, if you are not using trunk, i.e., you are using for instance
5.0.1, set an expiration policy for your event that is >= your sliding
window:

declare MarketDataEvent
       @role(event)
       @expires( 10s )
end

    Run your test and you should be fine.

    Additional info: in 5.0.1, there was a bug on expiration offset
calculation for sliding windows. The work around is explicitly setting the
expiration policy as above. That was fixed some time ago and will be in next
release.
    Also, in 5.0.1 we don't have batch windows. Only sliding windows. We are
adding batch windows for the next release.

    Let me know how it goes.

    []s
    Edson

2009/8/29 Barry Kaplan <groups1 at memelet.com>

>
> I've been using esper for some time with great success. But the appeal of
> having integrated rules is overwhelming. To get familiar with Fusion, I'm
> trying to implement the esper patterns, yet I and am stuck on the very
> first
> one:
>
> How do I measure the rate of arrival of events in a given time period?"
>  -> "select count(*) as cnt from MarketDataEvent.win:time_batch(1 second)"
>
> For now I'm just trying to get my rule to fire at all, so its not really
> trying to count just trigger when the number events in the window exceeds a
> certain number. (But I admit, I'm not sure how to just the get running
> count
> over the window, so if anybody knows...):
>
> declare MarketDataEvent
>        @role(event)
> end
>
> rule "How do I measure the rate of arrival of events in a given time
> period?"
> when
>    $count : Long( longValue > 5) from accumulate (
>        $e: MarketDataEvent() over window:time(1s) from entry-point
> "stream", count($e))
> then
>    System.out.println("***** > 5");
> end
>
> My test driver is just inserting events every 10ms:
>
>    (1..10).each {
>        drools.clock.advanceTime(10, TimeUnit.MILLISECONDS)
>        drools.entryPoint.insert(new MarketDataEvent(it as String))
>        drools.session.fireAllRules()
>    }
>
>
> If I do /not/ advance the clock, then I rule fires each time after the 5th
> insert. But if the clock /is/ advanced (at any increment) then the rule
> never fires.
>
> Any clues what I might be missing?
>
> thanks!
> --
> View this message in context:
> http://www.nabble.com/clock.advanceTime-behaviour--tp25205578p25205578.html
> Sent from the drools - user mailing list archive at Nabble.com.
>

-- 
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090829/6111020d/attachment.html 


More information about the rules-users mailing list