throws Exception
{
Preconditions.checkState(!initialized, "Already initialized");
initialized = true;
Logging logging = null;
if (initializeLogging) {
logging = Logging.initialize();
}
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
log.error(e, "Uncaught exception in thread %s", t.getName());
}
});
Map<String, String> requiredProperties;
ConfigurationFactory configurationFactory;
if (requiredConfigurationProperties == null) {
// initialize configuration
log.info("Loading configuration");
ConfigurationLoader loader = new ConfigurationLoader();
requiredProperties = Collections.emptyMap();
String configFile = System.getProperty("config");
if (configFile != null) {
requiredProperties = loader.loadPropertiesFrom(configFile);
}
}
else {
requiredProperties = requiredConfigurationProperties;
}
SortedMap<String, String> properties = Maps.newTreeMap();
if (optionalConfigurationProperties != null) {
properties.putAll(optionalConfigurationProperties);
}
properties.putAll(requiredProperties);
properties.putAll(fromProperties(System.getProperties()));
properties = ImmutableSortedMap.copyOf(properties);
configurationFactory = new ConfigurationFactory(properties);
if (logging != null) {
// initialize logging
log.info("Initializing logging");
LoggingConfiguration configuration = configurationFactory.build(LoggingConfiguration.class);
logging.configure(configuration);
}
// create warning logger now that we have logging initialized
final WarningsMonitor warningsMonitor = new WarningsMonitor()
{