[rules-users] Problem with simple Fusion test case

RobinMacharg robin.macharg at gmail.com
Tue Apr 17 04:59:31 EDT 2012


Thanks for your reply, Wolfgang.

I forgot to say yesterday I'm using Drools 5.3.0.Final, if that makes any
difference.


laune wrote
> 
> There is a fundamental misunderstanding on your side.
> 

I though as much!  What I'd like to do is clear my misunderstanding up.


laune wrote
> 
> An event's timestamp and duration are used for reasoning, relating
> events by means of temporal operators, e.g., A before B, A meets B,
> and so on.
> 

This implies that @timestamp, @duration etc. are only used to relate events
together, and that they do not relate the event to the clock.  I had
understood that Fusion would automatically retract expired events based on
the clock and these event attributes.


laune wrote
> 
> Your condition
>    Event()
> is just a test for a fact of type Event() being in WM, and it doesn't
> care for its timestamp and duration.
> 

OK, so my Event() condition just matches on all events, without any
reference to the internal clock or the Event() @timestamp.  That I think I
get.


laune wrote
> 
> For relating (real or psudo) with your events' times, look at
> window:time, timer() and the aforementioned temporal ops.
> 

I thought I'd looked at these, but I've revisited them at your suggestion. 
So I tried the following:

Setup as before: pseudo clock, STREAM processing etc.

I modified my rule match as follows:

rule "events"
when
	e : Event() over window:time(1s)
then
	System.out.println(e.name);
end

This I understand to mean match on any event in the last one second.  That
is, any event with (timestamp + duration) that overlapped the last second.

- I create and  assert an event timestamped at 0, duration 1000ms
- I advance the (pseudo) clock 5 seconds
- I fireAllRules()

Yet I still see the event matching the rule.  So I still appear to have a
fundamental misunderstanding of how Fusion deals with time.  Do I need a
heartbeat event stream to compare my real events to? Does the pseudo clock
work differently to the real one (and does it automatically start at 0)?  Is
there a difference between @timestamp and insertion time?  Perhaps a really,
REALLY simple example showing Fusion's automatic retraction of events -
without recourse to additional facts - would help me get it.

Some background may help.  The domain I'm dealing with is a social TV
schedule.  Programs are events with start and duration that are
bulk-inserted as the schedule is released (say, weekly).  As people log in
(a point event) they are informed what programs are currently showing.  As
programs expire (i.e. start-time + duration is in the past) they are
automatically retracted.  This last bit was what I was trying to emulate as
a proof-of-concept.

Any help you (or anyone!) can give would really be appreciated.

Thanks,
Robin


--
View this message in context: http://drools.46999.n3.nabble.com/Problem-with-simple-Fusion-test-case-tp3914358p3916643.html
Sent from the Drools: User forum mailing list archive at Nabble.com.



More information about the rules-users mailing list