With the rules you gave, in STREAM mode and with a pseudo clock and
running 5.2.0:
SessionPseudoClock clock;
private void advance( Date eventDate ){
long currentTime = clock.getCurrentTime();
long eventTime = eventDate.getTime();
clock.advanceTime( eventTime - currentTime, TimeUnit.MILLISECONDS );
}
private void makeFacts(){
clock = kSession.getSessionClock();
WorkingMemoryEntryPoint eventStream =
kSession.getWorkingMemoryEntryPoint( "EventStream" );
InhibitEvent inhibit;
TriggerEvent trigger;
inhibit = new InhibitEvent( new GregorianCalendar(2011,
Calendar.DECEMBER, 6,
12, 0, 0).getTime() );
advance( inhibit.getTimestamp() );
eventStream.insert( inhibit );
kSession.fireAllRules();
// proceed likewise with events at 1300, 1400, 1410, 1420
Output:
SingleEvent TriggerEvent [timestamp=Tue Dec 06 13:00:00 CET 2011]
Found TriggerEvent [timestamp=Tue Dec 06 13:00:00 CET 2011]
SingleEvent TriggerEvent [timestamp=Tue Dec 06 14:10:00 CET 2011]
On 07/12/2011, MarcoMojana <marco.mojana(a)exmachina.ch> wrote:
laune wrote
>
> Do you really set the pseudo clock to the values in the timestamps?
> set the clock
> insert the event
> fire all rules
>
Now, if I do:
set the clock
fire all rules
insert the event
i.e., something like this:
nextEventTime = new GregorianCalendar(2011, Calendar.DECEMBER, 6, 12, 10,
0).getTime();
advanceSessionClock(ksession, nextEventTime.getTime());
System.err.println("Firing rules");
ksession.fireAllRules();
System.err.println("Inserting event");
eventStream.insert(new InhibitEvent(nextEventTime));
everything works unexpectedly correctly. It works even when the clock is
updated in one single step (instead of once per second). Doing the three
steps in the sequence you suggested, i.e.
nextEventTime = new GregorianCalendar(2011, Calendar.DECEMBER, 6, 12, 10,
0).getTime();
advanceSessionClock(ksession, nextEventTime.getTime());
System.err.println("Inserting event");
eventStream.insert(new InhibitEvent(nextEventTime));
System.err.println("Firing rules");
ksession.fireAllRules();
never triggers the rule. Have you an idea why this happens?
Does it exists a configuration option that implicitly updates the session
clock with that of the last inserted event if the latter is in the future?
--
MM
--
View this message in context:
http://drools.46999.n3.nabble.com/Sliding-window-behavior-in-stream-mode-...
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