[jboss-jira] [JBoss JIRA] (DROOLS-1227) Drools cannot be configured to expire Events properly

Jochen Welle (JIRA) issues at jboss.org
Tue Dec 20 05:03:00 EST 2016


    [ https://issues.jboss.org/browse/DROOLS-1227?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13340578#comment-13340578 ] 

Jochen Welle edited comment on DROOLS-1227 at 12/20/16 5:02 AM:
----------------------------------------------------------------

I can confirm the issue for Drools 6.5.0.Final. 

I created an attachment for Scenario A (slightly modified) [^expire_without_temporal_constraint.drl]
and executed (in STREAM mode):
* fire-all-rules
* get-objects: ExpireEvent and ExpireEvent2 are there
* wait 15s
* fire-all-rules
* get-objects: ExpireEvent is gone but ExpireEvent2 remains in working memory

Since I do not have temporal constraints for all events this makes complex event processing rather difficult, because expiration must be dealt with manually.


was (Author: jwelle):
I can confirm the issue for Drools 6.5.0.Final. 

I created an attachment for Scenario A [^expire_without_temporal_constraint.drl]
and executed (in STREAM mode):
* fire-all-rules
* get-objects: ExpireEvent and ExpireEvent2 are there
* wait 15s
* fire-all-rules
* get-objects: ExpireEvent is gone but ExpireEvent2 remains in working memory

Since I do not have temporal constraints for all events this makes complex event processing rather difficult, because expiration must be dealt with manually.

> Drools cannot be configured to expire Events properly
> -----------------------------------------------------
>
>                 Key: DROOLS-1227
>                 URL: https://issues.jboss.org/browse/DROOLS-1227
>             Project: Drools
>          Issue Type: Bug
>    Affects Versions: 6.2.0.Final
>         Environment: Windows, Java SE 1.8
>            Reporter: Cristobal Arellano
>            Assignee: Mark Proctor
>            Priority: Critical
>         Attachments: expire_without_temporal_constraint.drl
>
>
> Hello,
> I want to configure Drools (CEP) to expire events when no longer needed. There are two scenarios:
> ==SCENARIO A==
> I configured Event with no explicit expires. In this scenario, if there is a rule with temporal constraints, the expiration is automatically calculated based on the constrains.  If there is a rule with no temporal constraints, the expiration is INFINITE. The following example shows the scenario:
> dialect "mvel"
> declare Event
> @role(event)
> end
> rule "ExampleRule1"
> when
> ( $a : Event(name == "event a") 
> then
> System.out.println("ExampleRule1Triggered");
> end
> rule "ExampleRule2"
> when
> ( $a : Event(name == "event a") ) and
> ( $b : Event((name == "event b") && (this after [1ms, 15s] $a)) )
> then
> System.out.println("ExampleRule2Triggered");
> end
> With the previous Event definition:
> * If only ExampleRule1 loaded, expires INFINITE. Expected expires 0. ERROR?
> * If ExampleRule1 loaded and ExampleRule2 loaded, expires 15s. Expected expires 15. OK!
> To solve this situation a tried the following scenario:
> == SCENARIO B==
> I configured Event with explicit expires. In this scenario, if there is a rule with temporal constraints, the expiration is not taken into account because it is overriden by the explicit expires. The following example shows the scenario:
> dialect "mvel"
> declare Event
> @role(event)
> @expires(0s)
> end
> rule "ExampleRule1"
> when
> ( $a : Event(name == "event a") 
> then
> System.out.println("ExampleRule1Triggered");
> end
> rule "ExampleRule2"
> when
> ( $a : Event(name == "event a") ) and
> ( $b : Event((name == "event b") && (this after [1ms, 15s] $a)) )
> then
> System.out.println("ExampleRule2Triggered");
> end
> With the previous Event definition:
> * ExampleRule1 is triggered and event removed. OK!
> * ExampleRule2 is not triggered inserting two events because the first one expires. ERROR?
> I suppose that SCENARIO B is not factible because explicit expires overrides implicit expires (according to issue DROOLS-586).
> Could you please help me to solve this situation? Should Drools set inferred expiration time to 1ms when there are rules with no temporal constraints?



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the jboss-jira mailing list