-
Enhancement
-
Resolution: Done
-
Major
-
8.29.0.Final
-
None
-
2022 Week 44-46 (from Oct 31), 2022 Week 47-49 (from Nov 21)
-
3
-
NEW
-
NEW
-
---
-
---
Issue Description:
Currently we can use RuleEventListener and RuleRuntimeEventListener with code like this:
MeasurementUnit measurementUnit = new MeasurementUnit();
RuleUnitInstance<MeasurementUnit> instance = RuleUnitProvider.get().createRuleUnitInstance(measurementUnit);
ReteEvaluator evaluator = (ReteEvaluator)((AbstractRuleUnitInstance)instance).getEvaluator();
evaluator.getRuleEventSupport().addEventListener(new RuleEventListener() {
@Override
public void onBeforeMatchFire(Match match) {
LOG.info("onBeforeMatchFire : " + match);
}
@Override
public void onAfterMatchFire(Match match) {
LOG.info("onAfterMatchFire : " + match);
}
@Override
public void onDeleteMatch(Match match) {
LOG.info("onDeleteMatch : " + match);
}
@Override
public void onUpdateMatch(Match match) {
LOG.info("onUpdateMatch : " + match);
}
});
evaluator.getRuleRuntimeEventSupport().addEventListener(new DebugRuleRuntimeEventListener());
evaluator.getActivationsManager().getAgendaEventSupport().addEventListener(new DebugAgendaEventListener());
It requires some casts and is a little cumbersome.
Acceptance Criteria:
So I think it's better for RuleUnitInstance to have methods addEventListener, removeEventListener, getXXXEventListeners for 3 type listeners (AgendaEventListener, RuleRuntimeEventListener, RuleEventListener) just like StatefulKnowledgeSessionImpl
To make the eventListners immutable, introduce a RuleUnitProvider.get().createRuleUnitInstance() method's variant which takes List<EventListener> RuleConfig.
Also update docs.