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