The "second" event hasn't happened at the time the first has happened. Thus, the negation (no Event coincides) *is* true.
Perhaps it helps to read "not" as "does not exist" (which is what it actually stands for) when looking at the rule. Indeed, there *is* no coinciding event at the time the Event is inserted. -W On 06/12/2013, IK81 <m...@kofler.me> wrote: > Yes, this was my assumption and it is also what I want. I don't care if > code C1 is reported before C2 or vice versa. They just have to happen > within 1 minute. > > However, the semantic of coincide in combination with not is unclear to > me. Why can the rule fire > at event insertion time when the engine does not know if the second > event will not happen without > waiting for an additional minute? > > Ingo > > On 2013-12-06 09:22, Wolfgang Laun wrote: >> Coincides is symmetric in time. You might want to use before or >> after. >> -W >> >> >> On 06/12/2013, IK81 <m...@kofler.me> wrote: >>> Dear all, >>> >>> I am currently stuck with a problem concerning the use of not and >>> conincide. I want to analyze a stream of error code events from a >>> set of >>> devices and detect the following situations. Every event has a >>> timestamp >>> (long), a device id (String) and an error code (String). >>> >>> What I want to detect is the following >>> - If I get two events, one with code C1 and one with C2 from a >>> single >>> device within 1 minute, it represents a special event combination. >>> The >>> order of their appearence is not relevant. >>> - If I just get C1 (without the C2 within the time frame), just >>> report >>> C1 >>> - If I just get C2 (without the C1 within the time frame), just >>> report >>> C2 >>> >>> >>> I can successfully detect the special event combination with the >>> following rule >>> >>> rule "Detect combination" >>> when >>> $e1 : Event ($d: device, code == "C1") >>> $e2 : Event (device == $d, code == "C2", this coincides [1m] >>> $e1) >>> then >>> ... do some output >>> end >>> >>> >>> Then I tried to implement the detection of C1 only as follows >>> >>> rule "Detect code C1" >>> when >>> $e1 : Event ($d: device, code == "C1") >>> not ( $e2 : Event (device == $d, code == "C2", this coincides [1m] >>> $e1)) >>> then >>> ... do some other output >>> end >>> >>> My understanding of the rule is that it should fire, if I get the >>> event >>> with code C1 and there is no other event with error code C2 for the >>> same >>> device that happens within one minute before and after the C1 event. >>> To >>> my surprise, the rule fires immediately when I insert an event with >>> error code C1. Shouldn't the implementation wait at least 1 minute >>> to be >>> sure that no C2 error event will be inserted? >>> >>> >>> BTW this is how I insert the events in my test case: >>> >>> clock.advanceTime(70, TimeUnit.SECONDS); >>> FactHandle handle1 = ksession.insert( new Event(65000, "A", "C1") >>> ); >>> ksession.fireAllRules(); >>> clock.advanceTime( 10, TimeUnit.SECONDS ); >>> FactHandle handle2 = ksession.insert( new Event(75000, "A", "C2") >>> ); >>> ksession.fireAllRules(); >>> clock.advanceTime( 2, TimeUnit.SECONDS ); >>> >>> And this is mainly the output I get: >>> >>> detected code C1 @ 70000 >>> event id=44b895e5-7287-404b-8204-3de5690b2360 timestamp=65000 >>> device=A code=C1 >>> detected combination @ 80000 >>> event id=44b895e5-7287-404b-8204-3de5690b2360 timestamp=65000 >>> device=A code=C1 >>> event id=fc89715b-fc30-4b12-ab31-a3884dcd4886 timestamp=75000 >>> device=A code=C2 >>> >>> Any ideas concerning an alternative solution are highly welcomed. >>> >>> Thanks, >>> Ingo >>> >>> >>> _______________________________________________ >>> rules-users mailing list >>> rules-users@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users