[jboss-jira] [JBoss JIRA] (DROOLS-1478) Call ActivationUnMatchListener also when a rule rematches
Geoffrey De Smet (JIRA)
issues at jboss.org
Wed Mar 15 11:09:00 EDT 2017
Geoffrey De Smet created DROOLS-1478:
----------------------------------------
Summary: Call ActivationUnMatchListener also when a rule rematches
Key: DROOLS-1478
URL: https://issues.jboss.org/browse/DROOLS-1478
Project: Drools
Issue Type: Enhancement
Components: core engine
Reporter: Geoffrey De Smet
Assignee: Mario Fusco
ActivationUnMatchListener is part of kie-internal, so its *not public API*.
*ActivationUnMatchListener is only used by OptaPlanner* (probably):
jBPM and downstream drools module don't use it:
https://github.com/search?q=org%3Akiegroup+ActivationUnMatchListener&type=Code
Community users probably don't use it either, because no one mentions it on StackOverflow:
https://www.google.be/search?q=%2BActivationUnMatchListener+site:stackoverflow.com&*
The current behaviour of ActivationUnMatchListener is a pain because it doesn't unmatch if a RHS fires again, causing an imbalance. OptaPlanner works around this through a hack (that doesn't work for PLANNER-761).
For example, given this rule
{code}
global int score = 0;
rule R
when
Wine(age < 10, $age : age)
then
score += $age;
addUnmatchListener(() -> score -= $age);
end
{code}
This works for a normal match and unmatch event:
{code}
Wine w = new Wine(3);
insert(w);
fireAllRules(); => score = 7;
w.age = 50;
update(w);
fireAllRules(); => unmatch triggers => score = 0; // GOOD
{code}
So events are like this:
{code}
RHS
unmatch
{code}
However if we have a rematch:
{code}
Wine w = new Wine(3);
insert(w);
fireAllRules(); => score = 7;
w.age = 4;
update(w);
fireAllRules(); => no unmatch triggers => score = 13; // should be 6!
w.age = 50;
update(w);
fireAllRules(); => unmatch triggers => score = 7; // should be 0!
{code}
Because the events are unbalanced:
{code}
RHS
RHS
unmatch
{code}
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the jboss-jira
mailing list