On 28 May 2012 19:30, Bernhard Unger <mail(a)bernhardunger.de> wrote:
Hello Wolfgang,
thanks for the answer.
Does that mean the description on page 32 of the Drools Fusion User Guide
is
not correct?
No, but possibly easy to misunderstand.
"...
2.6.1. Sliding Time Windows
Sliding Time Windows allow the user to write rules that will only match
events occurring in the
last X time units.
For instance, if the user wants to consider only the Stock Ticks that
happened in the last 2 minutes,
the pattern would look like this:
StockTick() over window:time( 2m )
Drools uses the "over" keyword to associate windows to patterns.
..."
The window:time() must be understood as something hooked on "now", as it is
understood by
the Engine, and it is evaluated once, at the time a fact/event is inserted.
Do you know a way for my simulation to get only the latest events in
between
10 minutes?
Do I need an additional constraint for the rule?
Event processing in real time should either be done with an Engine being run
by a thread executing "fireUntilHalt()", which needn't ever be called, or
by
calling fireAllRules() from the same thread doing the insertions.
The simple rule you posted isn't different from the same rule
without "over window:time(x)", because both are instantaneously fulfilled
due to an insert.
-W
Thanks,
Bernhard
-----Ursprüngliche Nachricht-----
Von: rules-users-bounces(a)lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] Im Auftrag von Wolfgang Laun
Gesendet: Montag, 28. Mai 2012 15:11
An: Rules Users List
Betreff: Re: [rules-users] Time Sliding Window Question
Whenever you insert an event, a simple rule like
ruel x when Event() over window:time(x) then...end
immediately results in an activation. Your for loop merely postpones
firings.
A selection of an event due to a window:time() is different from a
selection due to a constraint. The latter may result in cancelling the
activation if the fact is modified accordingly. But there's no
reevaluation due to the passage of time.
-W
On 28/05/2012, Bernhard Unger <mail(a)bernhardunger.de> wrote:
> Hello,
>
> I am fairly new to Drools and tried my first steps with Drools Fusion and
> was running into the following problem:
>
> According to the Drools Fusion User Guide Version 5.4.0.Final on page 32
> the
> following pattern should work and select events in between the last 10
> minutes:
> ...
> StockTick() over window:time( 2m )
> ...
> I tried the following example, simulating RHQ EventComposite Events with
a
> simple Junit test:
>
> ...
> KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
> kbuilder.add(new ClassPathResource("rhqrules.drl", getClass()),
> ResourceType.DRL);
> KnowledgeBaseConfiguration config =
> KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
> config.setOption(EventProcessingOption.STREAM);
> nowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config);
> kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
> KnowledgeSessionConfiguration conf =
> KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
> conf.setOption(ClockTypeOption.get("pseudo"));
> ksession = kbase.newStatefulKnowledgeSession(conf, null);
> ...
> inside the test method:
> ...
> For-Loop inserts new Events and increases the pseudo clock in one minute
> steps:
> ...
> for (int i = 0; i < 100; i++) {
> timestamp = clock.advanceTime(1, TimeUnit.MINUTES);
> ksession.insert(new EventComposite("EventDetail" + i, resourceId,
> "resourceName" + i, "resourceAncestry" + i, resourceTypeId,
> eventId, severity, "sourceLocation" + i, timestamp));
> }
> ...
> ksession.fireAllRules();
> ...
>
> The .drl definition should fire only events of the last 10 minutes,
however
> all inserted 100 events are fired:
> declare EventComposite
> @role( event )
> end
> rule "Rule1 events in between last 10 minutes"
> when
> $event : EventComposite() over window:time( 10m )
> then
> System.out.println("Event in between the last 10 minutes:: " +
$event);
> end
>
> On the other hand this rule works as expected and selects only events
older
> than 10 minutes:
>
> rule "Rule2 events not in between the last 10 minutes"
> when
> $eventA : EventComposite( )
> not EventComposite( this.resourceId == $eventA.resourceId ) over
> window:time( 10m )
>
> then
> System.out.println("Event not in between the last 10 minutes: " +
> $eventA);
> end
>
>
> My question is:
> What did I wrong in the definition of Rule-1, what is the correct
statement
> for finding the last 10 minutes events?
>
> Background information:
> I am doing some research on implementing using the drools framework
inside
> the RHQ framework for complex event processing. I would like to show that
> this is possible and could be uses reasonable for RHQ event processing.
>
> Any help is highly appreceated!
>
> Thanks and kind regards
>
> Bernhard
>
>
>
>
>
>
>
>
> _______________________________________________
> 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