Whenever you insert an event, a simple rule like
ruel x when Event() over window:time(x) then...end
immediately results in an activation. Your for loop merely postpones firings.
A selection of an event due to a window:time() is different from a
selection due to a constraint. The latter may result in cancelling the
activation if the fact is modified accordingly. But there's no
reevaluation due to the passage of time.
-W
On 28/05/2012, Bernhard Unger <mail(a)bernhardunger.de> wrote:
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(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users