ConfigurationFactory.java
package com.tradecloud.infrastructure.configuration;
import java.io.IOException;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.DynamicCombinedConfiguration;
import org.apache.commons.configuration.MultiFileHierarchicalConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.InvariantReloadingStrategy;
import org.apache.commons.configuration.tree.OverrideCombiner;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;
import org.apache.log4j.Logger;
import org.springframework.core.io.Resource;
/**
* Factory that creates a MultiTenant configuration
* {@link DynamicCombinedConfiguration} to support MultiTenant configuration.
*/
public final class ConfigurationFactory {
private static Logger logger = Logger.getLogger(ConfigurationFactory.class);
/**
* Base path of configuration resources.
*/
private Resource basePath;
public ConfigurationFactory(final Resource basePath) {
this.basePath = basePath;
}
/**
* @return combined configuration.
* @throws ConfigurationException
* when the configuration file can't be loaded.
* @throws IOException
* when the basePath can't be read.
*/
public Configuration createInstance() throws ConfigurationException, IOException {
DynamicCombinedConfiguration config = new DynamicCombinedConfiguration(new OverrideCombiner());
config.setKeyPattern("${ctx:client}");
config.setDelimiterParsingDisabled(true);
// config.setForceReloadCheck(true);
config.setForceReloadCheck(false);
config.setExpressionEngine(new XPathExpressionEngine());
MultiFileHierarchicalConfiguration multiFileonfig = new MultiFileHierarchicalConfiguration();
String clientPattern = basePath.getURL().toExternalForm() + "${ctx:client}.xml";
logger.debug("clientPattern:" + clientPattern);
multiFileonfig.setFilePattern(clientPattern);
multiFileonfig.setAutoSave(false);
InvariantReloadingStrategy reloadStrategy = new InvariantReloadingStrategy();
multiFileonfig.setReloadingStrategy(reloadStrategy);
config.addConfiguration(multiFileonfig, "clientConfig", null);
String defaultPattern = basePath.getURL().toExternalForm() + "default.xml";
XMLConfiguration defaultConfig = new XMLConfiguration(defaultPattern);
defaultConfig.setReloadingStrategy(reloadStrategy);
config.addConfiguration(defaultConfig, "defaultConfig", null);
return config;
}
}