Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-7230

Add event listners to RuleUnitInstance

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Done
    • Major
    • 8.32.0.Final
    • 8.29.0.Final
    • core engine
    • None

    Description

      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.

      Attachments

        Activity

          People

            rhn-support-tkobayas Toshiya Kobayashi
            rhn-support-tkobayas Toshiya Kobayashi
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: