class DSpaceServiceManager implements ServiceManagerSystem {

    public void pushConfig(Map<String, Object> properties) {
        checkRunning();
        if (properties != null && !properties.isEmpty()) {
            // load in the new settings to the config service
            String[] changedNames = configurationService.loadConfiguration(properties);
            if (changedNames.length > 0) {
                // some configs changed so push the changes to the listeners in all known services and providers
                // make the list of changed setting names and map of changed settings
                ArrayList<String> changedSettingNames = new ArrayList<String>();
                Map<String, String> changedSettings = new LinkedHashMap<String, String>();
                for (String configName : changedNames) {
                    changedSettingNames.add(configName);
                    changedSettings.put( configName, configurationService.getProperty(configName) );
                }
                // notify the services that implement the mixin
                for (ServiceManagerSystem sms : serviceManagers) {
                    List<ConfigChangeListener> configChangeListeners = sms.getServicesByType(ConfigChangeListener.class);
                    for (ConfigChangeListener configChangeListener : configChangeListeners) {
                        // notify this service
                        try {
                            boolean notify = false;
                            String[] notifyNames = configChangeListener.notifyForConfigNames();
                            if (notifyNames == null || notifyNames.length == 0) {
                                notify = true;
                            } else {
                                for (String notifyName : notifyNames) {
                                    // check to see if the name matches one of those the listener cares about
                                    for (String changedName : changedNames) {
                                        if (notifyName != null && notifyName.equals(changedName)) {
                                            notify = true;
                                            break;
                                        }
                                    }
                                }
                            }
                            // do the notify if we should at this point
                            if (notify) {
                                configChangeListener.configurationChanged(changedSettingNames, changedSettings);
                            }
                        } catch (Exception e) {
                            log.error("Failure occurred while trying to notify service of config change: " + e.getMessage(), e);
                        }
                    }
                }
            }
        }
    }

    public  DSpaceServiceManager(DSpaceConfigurationService configurationService);
    protected  DSpaceServiceManager(DSpaceConfigurationService configurationService, String... springXmlConfigFiles);

}