-
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.