code: @Override
      protected void fireEvent(int type, String propName, Object propValue, boolean beforeUpdate) {
          if (listeners == null || listeners.size() == 0) {
              return;
          }        
          ConfigurationEvent event = createEvent(type, propName, propValue, beforeUpdate);
          for (ConfigurationListener l: listeners)
          {
              try {
                  l.configurationChanged(event);
              } catch (ValidationException e) {
                  if (beforeUpdate) {
                      throw e;
                  } else {
                      logger.error("Unexpected exception", e);                    
                  }
              } catch (Throwable e) {
                  logger.error("Error firing configuration event", e);
              }
          }
      }
docs: Creates an event and calls {@link ConfigurationListener#configurationChanged(ConfigurationEvent)}
  for all listeners while catching Throwable.