Ciao, not really sure where is your problem exactly, but as I use often
similar use-case of yours, thought worthy to share what I usually find
useful:
1. check STREAM mode is activated
2. check in the .drl is clearly defined what is a Fact, and what is an
Event. In your case I would check TemperatureRead is declared as Event?
3. activate Audit log / runtime logger.
I find especially useful point #3 because you will see, as the session
clock advances, what is still in working memory and when rule is activated
you will see against which Event/Facts.
Hope this is helpful
Ciao
MM
On Fri, Dec 6, 2013 at 11:54 PM, martinzp <martinzp(a)gmail.com> wrote:
Hi, i am new in the forum, and a beginner user of Drools so forgive
me if
my
question isn't quite good.
I want to test the "over window:time" operand.
In order to do that i use the pseudo clock, but i have noticed that it
doesn't behave as i would expect.
The behaviour i think i observed, is that the rule is using the real clock
instead of the pseudo clock.
*Here is my drl file:*
rule "Fire Detected"
when
c : Number(intValue >= 3) from accumulate (
$tr : TemperatureRead(read > 40)
over window:time ( 1s )
from entry-point entryone ,
count ($tr)
)
then
System.out.println("Fire Detected!");
end
*and here is the portion of my main file that inserts the events:*
TemperatureRead temp1 = new TemperatureRead(33.2);
TemperatureRead temp2 = new TemperatureRead(38.7);
TemperatureRead temp3 = new TemperatureRead(39.5);
TemperatureRead temp4 = new TemperatureRead(42.5);
TemperatureRead temp5 = new TemperatureRead(43.1);
TemperatureRead temp6 = new TemperatureRead(47.8);
SessionPseudoClock clock = ksession.getSessionClock();
entryPoint1.insert(temp1);
clock.advanceTime((new Date()).getTime(), TimeUnit.MILLISECONDS);
fireRules();
entryPoint1.insert(temp2);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp3);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp4);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp5);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp6);
fireRules();
In my opinion, the rule shouldn't be fired, because as i am (supposedly)
using the pseudo clock, the events shouldn't fall into the same sliding
window (1 second.)
In general, the rule should fire when it detects 3 or more temperature
reads
with a temperature over 40.
Any idea about what i might be doing wrong?
Thanks in advance!
--
View this message in context:
http://drools.46999.n3.nabble.com/Problem-with-time-sliding-windows-and-p...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users