Hello,

I am fairly new to Drools and tried my first steps with Drools Fusion and
was running into the following problem:

According to the Drools Fusion User Guide Version 5.4.0.Final on page 32 the
following pattern should work and select events in between the last 10
minutes:
...
StockTick() over window:time( 2m )
...
I tried the following example, simulating RHQ EventComposite Events with a
simple Junit test:

...
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource("rhqrules.drl", getClass()),
ResourceType.DRL);
KnowledgeBaseConfiguration config =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
config.setOption(EventProcessingOption.STREAM);
nowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config);
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
KnowledgeSessionConfiguration conf =
KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
conf.setOption(ClockTypeOption.get("pseudo"));
ksession = kbase.newStatefulKnowledgeSession(conf, null);
...
inside the test method:
...
For-Loop inserts new Events and increases the pseudo clock in one minute
steps:
...
for (int i = 0; i < 100; i++) {
  timestamp = clock.advanceTime(1, TimeUnit.MINUTES);
  ksession.insert(new EventComposite("EventDetail" + i, resourceId,
  "resourceName" + i, "resourceAncestry" + i, resourceTypeId,
  eventId, severity, "sourceLocation" + i, timestamp));
}
...
ksession.fireAllRules();
...

The .drl definition should fire only events of the last 10 minutes, however
all inserted 100 events are fired:
declare EventComposite
    @role( event )
end
rule "Rule1 events in between last 10 minutes"
when
   $event : EventComposite() over window:time( 10m ) 
then
    System.out.println("Event in between the last 10 minutes:: " + $event);
end

On the other hand this rule works as expected and selects only events older
than 10 minutes:

rule "Rule2 events not in between the last 10 minutes"
when
        $eventA : EventComposite(  ) 
        not EventComposite( this.resourceId == $eventA.resourceId  ) over
window:time( 10m )
                
then
    System.out.println("Event not in between the last 10 minutes: " +
$eventA);
end


My question is:
What did I wrong in the definition of Rule-1, what is the correct statement
for finding the last 10 minutes events?

Background information:
I am doing some research on implementing using the drools framework inside
the RHQ framework for complex event processing. I would like to show that
this is possible and could be uses reasonable for RHQ event processing.

Any help is highly appreceated!

Thanks and kind regards 

Bernhard





 


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to