<div dir="ltr">Hi, everyone,<br><br> I just find that, insert an event into a entry point or insert it directly into session will cause different behaviour, is this expected?<br><br> Here is the details:<br><br>1. drools run in stream mode and use pseudo clock<br>
2. insert a MyEvent into entry-point "stream" and a MyEvent into session directly every 1 seconds, start at 500ms.<br>3. call fireAllRules every 1seconds, at second 1, second 2, etc<br>4. drools version 5.5.0.Final<br>
<br>Below is the rule:<br><br>package me.ycy.drools.test1.data<br><br>import java.util.List<br><br>declare MyEvent<br> @role(event)<br> @timestamp(timestamp)<br>end<br><br>rule "over 0.3s"<br> when<br> $list: List() from collect(MyEvent() over window:time(300ms))<br>
then<br> System.out.println("Rule: with in 0.3s --> " + $list);<br>end<br><br>rule "over 1s"<br> when<br> $list: List() from collect(MyEvent() over window:time(1s))<br> then<br>
System.out.println("Rule: with in 1s --> " + $list);<br>end<br><br>rule "over 3s"<br> when<br> $list: List() from collect(MyEvent() over window:time(3s))<br> then<br> System.out.println("Rule: with in 3s --> " + $list);<br>
end<br><br>rule "over 0.3s ep"<br> when<br> $list: List() from collect(MyEvent() over window:time(300ms) from entry-point "stream")<br> then<br> System.out.println("Rule: with in 0.3s use ep --> " + $list);<br>
end<br><br>rule "over 1s ep"<br> when<br> $list: List() from collect(MyEvent() over window:time(1s) from entry-point "stream")<br> then<br> System.out.println("Rule: with in 1s use ep --> " + $list);<br>
end<br><br>rule "over 3s ep"<br> when<br> $list: List() from collect(MyEvent() over window:time(3s) from entry-point "stream")<br> then<br> System.out.println("Rule: with in 3s use ep --> " + $list);<br>
end<br><br>// ------- end of rule <br><br>Finally, the output(just run 5 seconds)<br><br>-------------- fire at 1000 ---------------<br>Rule: with in 3s use ep --> [MyEvent(event 0,500)]<br>Rule: with in 1s use ep --> [MyEvent(event 0,500)]<br>
Rule: with in 0.3s use ep --> [MyEvent(event 0,500)]<br>Rule: with in 3s --> [MyEvent(event 0,500)]<br>Rule: with in 1s --> [MyEvent(event 0,500)]<br>Rule: with in 0.3s --> []<br>-------------- fire at 2000 ---------------<br>
Rule: with in 3s use ep --> [MyEvent(event 0,500), MyEvent(event 1,1500)]<br>Rule: with in 1s use ep --> [MyEvent(event 0,500), MyEvent(event 1,1500)]<br>Rule: with in 0.3s use ep --> [MyEvent(event 0,500), MyEvent(event 1,1500)]<br>
Rule: with in 3s --> [MyEvent(event 0,500), MyEvent(event 1,1500)]<br>Rule: with in 1s --> [MyEvent(event 1,1500)]<br>Rule: with in 0.3s --> []<br>-------------- fire at 3000 ---------------<br>Rule: with in 3s use ep --> [MyEvent(event 0,500), MyEvent(event 1,1500), MyEvent(event 2,2500)]<br>
Rule: with in 1s use ep --> [MyEvent(event 0,500), MyEvent(event 1,1500), MyEvent(event 2,2500)]<br>Rule: with in 0.3s use ep --> [MyEvent(event 0,500), MyEvent(event 1,1500), MyEvent(event 2,2500)]<br>Rule: with in 3s --> [MyEvent(event 0,500), MyEvent(event 1,1500), MyEvent(event 2,2500)]<br>
Rule: with in 1s --> [MyEvent(event 2,2500)]<br>Rule: with in 0.3s --> []<br>-------------- fire at 4000 ---------------<br>Rule: with in 3s use ep --> [MyEvent(event 1,1500), MyEvent(event 2,2500), MyEvent(event 3,3500)]<br>
Rule: with in 1s use ep --> [MyEvent(event 1,1500), MyEvent(event 2,2500), MyEvent(event 3,3500)]<br>Rule: with in 0.3s use ep --> [MyEvent(event 1,1500), MyEvent(event 2,2500), MyEvent(event 3,3500)]<br>Rule: with in 3s --> [MyEvent(event 1,1500), MyEvent(event 2,2500), MyEvent(event 3,3500)]<br>
Rule: with in 1s --> [MyEvent(event 3,3500)]<br>Rule: with in 0.3s --> []<br>-------------- fire at 5000 ---------------<br>Rule: with in 3s use ep --> [MyEvent(event 2,2500), MyEvent(event 3,3500), MyEvent(event 4,4500)]<br>
Rule: with in 1s use ep --> [MyEvent(event 2,2500), MyEvent(event 3,3500), MyEvent(event 4,4500)]<br>Rule: with in 0.3s use ep --> [MyEvent(event 2,2500), MyEvent(event 3,3500), MyEvent(event 4,4500)]<br>Rule: with in 3s --> [MyEvent(event 2,2500), MyEvent(event 3,3500), MyEvent(event 4,4500)]<br>
Rule: with in 1s --> [MyEvent(event 4,4500)]<br>Rule: with in 0.3s --> []<br><br><br><br>-- <br>Best regards,<br>Changyuan
</div>