/// <summary> /// changes settings on the fly if needed /// </summary> /// <param name="stateInfo">parameter required by callback signature</param> public void CheckSettingsVersionAndReloadIfNeeded(Object stateInfo) { log.Info("CheckSettingsVersionAndReloadIfNeeded()..."); try { // To avoid Timer Event Reentrance settingsReloadTimer.Change(Timeout.Infinite, Timeout.Infinite); if (!IsReloadNeeded()) { return; } // restart quartz scheduler.Shutdown(true); IDictionary settings = null; try { settings = GetSettingsFromDatabase(); projectIdsByCronExpressions = GetProjectIdsByCronExpressions(); log.Info("Trying to apply new settings. Version: " + settings[AppSettings.SettingsVersion]); } catch (Exception ex) { log.Info("Can't get service settings from database", ex); log.Info("Trying to restore previous settings. Version: " + AppSettings.GetSettingsVersion()); settings = AppSettings.AppSettingsMap; } configFileChanged = false; foreach (string s in new string[] { "appSettings", "connectionStrings", "log4net", "common/logging" }) { ConfigurationManager.RefreshSection(s); } LogManager.Adapter = null; log = LogManager.GetLogger(AppSettings.GetCommonLoggerName()); InitializeSettings(settings); InitializeSchedulerAsync(); scheduler.Start(); } catch (Exception e) { // we can't get settings String failureMessage = e.Message + "\n" + e.StackTrace; log.Error("CheckSettingsVersionAndReloadIfNeeded", e); Emailer.SendEmail(failureMessage, Emailer.generalFailureSubject, AppSettings.GetCommonRecipientEmailAddresses()); Stop(); } finally { settingsReloadTimer.Change(TIMER_DUE, TIMER_PERIOD); } }