protected virtual void DoInitApplication() { ConfigAttribute.Apply(this, m_ConfigRoot); m_Name = m_ConfigRoot.AttrByName(CONFIG_NAME_ATTR).ValueAsString(GetType().FullName); var appid = m_ConfigRoot.AttrByName(CONFIG_ID_ATTR).Value; if (appid.IsNotNullOrWhiteSpace()) { m_AppId = Atom.Encode(appid); } m_CloudOrigin = m_ConfigRoot.AttrByName(CONFIG_CLOUD_ORIGIN_ATTR).ValueAsAtom(Atom.ZERO); m_NodeDiscriminator = m_ConfigRoot.AttrByName(CONFIG_NODE_DISCRIMINATOR_ATTR).ValueAsUShort(0); Debugging.DefaultDebugAction = Debugging.ReadDefaultDebugActionFromConfig(); Debugging.TraceDisabled = Debugging.ReadTraceDisableFromConfig(); //20200616 DKh Serialization.Bix.Bixer.RegisterFromConfiguration(m_ConfigRoot[Serialization.Bix.Bixer.CONFIG_AZOS_SERIALIZATION_BIX_SECTION]); //the order of root component boot is important: InitLog(); //1. must be the first one so others can log InitModule(); //2. other services may use module references InitTimeSource(); //3. start accurate time asap InitSecurityManager(); //4. security context InitEventTimer(); //5. event scheduler/bg jobs InitInstrumentation(); //6. instrumentation InitDataStore(); //7. data store InitObjectStore(); //8. object store InitGlue(); //9. glue InitDependencyInjector(); //10. custom dep injector last //After all inits apply the behavior top the root try { Behavior.ApplyConfiguredBehaviors(this, m_ConfigRoot); Behavior.ApplyBehaviorAttributes(this); } catch (Exception error) { var msg = StringConsts.APP_APPLY_BEHAVIORS_ERROR + error.ToMessageWithType(); WriteLog(MessageType.CatastrophicError, INIT_FROM, msg, error); throw new AzosException(msg, error); } }
protected virtual void DoInitApplication() { ConfigAttribute.Apply(this, m_ConfigRoot); m_Name = m_ConfigRoot.AttrByName(CONFIG_APP_NAME_ATTR).ValueAsString(GetType().FullName); Debugging.DefaultDebugAction = Debugging.ReadDefaultDebugActionFromConfig(); Debugging.TraceDisabled = Debugging.ReadTraceDisableFromConfig(); //the order of root component boot is important: InitLog(); //1. must be the first one so others can log InitModule(); //2. other services may use module references InitTimeSource(); //3. start accurate time asap InitSecurityManager(); //4. security context InitEventTimer(); //5. event scheduler/bg jobs InitInstrumentation(); //6. instrumentation InitDataStore(); //7. data store InitObjectStore(); //8. object store InitGlue(); //9. glue InitDependencyInjector(); //10. custom dep injector last //After all inits apply the behavior top the root try { Behavior.ApplyConfiguredBehaviors(this, m_ConfigRoot); Behavior.ApplyBehaviorAttributes(this); } catch (Exception error) { var msg = StringConsts.APP_APPLY_BEHAVIORS_ERROR + error.ToMessageWithType(); WriteLog(MessageType.CatastrophicError, INIT_FROM, msg, error); throw new AzosException(msg, error); } }
protected virtual void DoInitApplication() { const string FROM = "app.init"; ConfigAttribute.Apply(this, m_ConfigRoot); m_Name = m_ConfigRoot.AttrByName(CONFIG_APP_NAME_ATTR).ValueAsString(GetType().FullName); Debugging.DefaultDebugAction = Debugging.ReadDefaultDebugActionFromConfig(); Debugging.TraceDisabled = Debugging.ReadTraceDisableFromConfig(); var node = m_ConfigRoot[CONFIG_LOG_SECTION]; if (node.Exists) { try { m_Log = FactoryUtils.MakeAndConfigure(node, typeof(LogService)) as ILogImplementation; if (m_Log == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Log made"); BeforeLogStart(m_Log); if (m_Log is Service) { if (((Service)m_Log).StartByApplication()) { WriteLog(MessageType.Info, FROM, "Log started, msg times are localized of machine-local time until time source starts"); } } } catch (Exception error) { throw new NFXException(StringConsts.APP_LOG_INIT_ERROR + error.ToMessageWithType(), error); } } node = m_ConfigRoot[CONFIG_TIMESOURCE_SECTION]; if (node.Exists) { try { m_TimeSource = FactoryUtils.MakeAndConfigure(node, null) as ITimeSourceImplementation; if (m_TimeSource == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "TimeSource made"); BeforeTimeSourceStart(m_TimeSource); if (m_TimeSource is Service) { if (((Service)m_TimeSource).StartByApplication()) { WriteLog(MessageType.Info, FROM, "TimeSource started"); } } WriteLog(MessageType.Info, FROM, "Log msg time is time source-supplied now"); m_StartTime = LocalizedTime; WriteLog(MessageType.Info, FROM, "App start time is {0}".Args(m_StartTime)); } catch (Exception error) { var msg = StringConsts.APP_TIMESOURCE_INIT_ERROR + error.ToMessageWithType(); WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } else { WriteLog(MessageType.Info, FROM, "Using default time source"); m_StartTime = LocalizedTime; WriteLog(MessageType.Info, FROM, "App start time is {0}".Args(m_StartTime)); } node = m_ConfigRoot[CONFIG_EVENT_TIMER_SECTION]; //20150827 DKh event timer must allocate even if it is absent in config //// if (node.Exists) { try { m_EventTimer = FactoryUtils.MakeAndConfigure(node, typeof(EventTimer)) as IEventTimerImplementation; if (m_EventTimer == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "EventTimer made"); BeforeEventTimerStart(m_EventTimer); if (m_EventTimer is Service) { if (((Service)m_EventTimer).StartByApplication()) { WriteLog(MessageType.Info, FROM, "EventTimer started"); } } } catch (Exception error) { var msg = StringConsts.APP_EVENT_TIMER_INIT_ERROR + error.ToMessageWithType(); WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } node = m_ConfigRoot[CONFIG_SECURITY_SECTION]; if (node.Exists) { try { m_SecurityManager = FactoryUtils.MakeAndConfigure(node, typeof(ConfigSecurityManager)) as ISecurityManagerImplementation; if (m_SecurityManager == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Security Manager made"); BeforeSecurityManagerStart(m_SecurityManager); if (m_SecurityManager is Service) { if (((Service)m_SecurityManager).StartByApplication()) { WriteLog(MessageType.Info, FROM, "Security Manager started"); } } } catch (Exception error) { var msg = StringConsts.APP_SECURITY_MANAGER_INIT_ERROR + error; WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } try { Behavior.ApplyConfiguredBehaviors(this, m_ConfigRoot); } catch (Exception error) { var msg = StringConsts.APP_APPLY_BEHAVIORS_ERROR + error; WriteLog(MessageType.Error, FROM, msg, error); throw new NFXException(msg, error); } node = m_ConfigRoot[CONFIG_INSTRUMENTATION_SECTION]; if (node.Exists) { try { m_Instrumentation = FactoryUtils.MakeAndConfigure(node, typeof(InstrumentationService)) as IInstrumentationImplementation; if (m_Instrumentation == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Instrumentation made"); BeforeInstrumentationStart(m_Instrumentation); if (m_Instrumentation is Service) { if (((Service)m_Instrumentation).StartByApplication()) { WriteLog(MessageType.Info, FROM, "Instrumentation started"); } } } catch (Exception error) { var msg = StringConsts.APP_INSTRUMENTATION_INIT_ERROR + error; WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } node = m_ConfigRoot[CONFIG_THROTTLING_SECTION]; if (node.Exists) { try { m_Throttling = FactoryUtils.MakeAndConfigure(node, typeof(ThrottlingService)) as IThrottlingImplementation; if (m_Throttling == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Throttling made"); BeforeThrottlingStart(m_Throttling); if (m_Throttling is Service) { if (((Service)m_Throttling).StartByApplication()) { WriteLog(MessageType.Info, FROM, "Throttling started"); } } } catch (Exception error) { var msg = StringConsts.APP_THROTTLING_INIT_ERROR + error; WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } node = m_ConfigRoot[CONFIG_DATA_STORE_SECTION]; if (node.Exists) { try { m_DataStore = FactoryUtils.MakeAndConfigure(node) as IDataStoreImplementation; if (m_DataStore == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "DataStore made"); BeforeDataStoreStart(m_DataStore); if (m_DataStore is Service) { if (((Service)m_DataStore).StartByApplication()) { WriteLog(MessageType.Info, FROM, "DataStore started"); } } } catch (Exception error) { var msg = StringConsts.APP_DATA_STORE_INIT_ERROR + error; WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } node = m_ConfigRoot[CONFIG_OBJECT_STORE_SECTION]; if (node.Exists) { try { m_ObjectStore = FactoryUtils.MakeAndConfigure(node, typeof(ObjectStoreService)) as IObjectStoreImplementation; if (m_ObjectStore == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "ObjectStore made"); BeforeObjectStoreStart(m_ObjectStore); if (m_ObjectStore is Service) { if (((Service)m_ObjectStore).StartByApplication()) { WriteLog(MessageType.Info, FROM, "ObjectStore started"); } } } catch (Exception error) { var msg = StringConsts.APP_OBJECT_STORE_INIT_ERROR + error; WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } node = m_ConfigRoot[CONFIG_GLUE_SECTION]; if (node.Exists) { try { m_Glue = FactoryUtils.MakeAndConfigure(node, typeof(NFX.Glue.Implementation.GlueService)) as IGlueImplementation; if (m_Glue == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Glue made"); BeforeGlueStart(m_Glue); if (m_Glue is Service) { if (((Service)m_Glue).StartByApplication()) { WriteLog(MessageType.Info, FROM, "Glue started"); } } } catch (Exception error) { var msg = StringConsts.APP_GLUE_INIT_ERROR + error; WriteLog(MessageType.CatastrophicError, FROM, msg, error); throw new NFXException(msg, error); } } WriteLog(MessageType.Info, FROM, "Common application initialized in '{0}' time location".Args(this.TimeLocation)); WriteLog(MessageType.Info, FROM, "Component dump:"); foreach (var cmp in ApplicationComponent.AllComponents) { WriteLog(MessageType.Info, FROM, " -> Component: {0} '{1}' '{2}' ".Args(cmp.ComponentSID, cmp.GetType().FullName, cmp.ComponentCommonName)); } }
protected virtual void DoInitApplication() { ExecutionContext.__SetApplicationLevelContext(this, null, null, NOPSession.Instance); const string FROM = "app.init"; ConfigAttribute.Apply(this, m_ConfigRoot); m_Name = m_ConfigRoot.AttrByName(CONFIG_APP_NAME_ATTR).ValueAsString(GetType().FullName); Debugging.DefaultDebugAction = Debugging.ReadDefaultDebugActionFromConfig(); Debugging.TraceDisabled = Debugging.ReadTraceDisableFromConfig(); var node = m_ConfigRoot[CONFIG_LOG_SECTION]; if (node.Exists) { try { m_Log = FactoryUtils.MakeAndConfigure(node, typeof(LogService)) as ILogImplementation; if (m_Log == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Log made"); BeforeLogStart(m_Log); if (m_Log is Service) { ((Service)m_Log).Start(); WriteLog(MessageType.Info, FROM, "Log started, msg times are localized of machine-local time until time source starts"); } } catch (Exception error) { throw new NFXException(StringConsts.APP_LOG_INIT_ERROR + error); } } node = m_ConfigRoot[CONFIG_TIMESOURCE_SECTION]; if (node.Exists) { try { m_TimeSource = FactoryUtils.MakeAndConfigure(node, null) as ITimeSourceImplementation; if (m_TimeSource == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "TimeSource made"); BeforeTimeSourceStart(m_TimeSource); if (m_TimeSource is Service) { ((Service)m_TimeSource).Start(); WriteLog(MessageType.Info, FROM, "TimeSource started"); } WriteLog(MessageType.Info, FROM, "Log msg time is time source-supplied now"); } catch (Exception error) { throw new NFXException(StringConsts.APP_TIMESOURCE_INIT_ERROR + error); } } try { m_StartTime = LocalizedTime; WriteLog(MessageType.Info, FROM, "App start time is {0}".Args(m_StartTime)); } catch (Exception error) { throw new NFXException(StringConsts.APP_TIMESOURCE_INIT_ERROR + error); } node = m_ConfigRoot[CONFIG_EVENT_TIMER_SECTION]; if (node.Exists) { try { m_EventTimer = FactoryUtils.MakeAndConfigure(node, typeof(EventTimer)) as IEventTimerImplementation; if (m_EventTimer == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "EventTimer made"); BeforeEventTimerStart(m_EventTimer); if (m_EventTimer is Service) { ((Service)m_EventTimer).Start(); WriteLog(MessageType.Info, FROM, "EventTimer started"); } } catch (Exception error) { throw new NFXException(StringConsts.APP_EVENT_TIMER_INIT_ERROR + error); } } node = m_ConfigRoot[CONFIG_SECURITY_SECTION]; if (node.Exists) { try { m_SecurityManager = FactoryUtils.MakeAndConfigure(node, typeof(ConfigSecurityManager)) as ISecurityManagerImplementation; if (m_SecurityManager == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Security Manager made"); BeforeSecurityManagerStart(m_SecurityManager); if (m_SecurityManager is Service) { ((Service)m_SecurityManager).Start(); WriteLog(MessageType.Info, FROM, "Security Manager started"); } } catch (Exception error) { var msg = StringConsts.APP_SECURITY_MANAGER_INIT_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg); } } try { Behavior.ApplyConfiguredBehaviors(this, m_ConfigRoot); } catch (Exception error) { var msg = StringConsts.APP_APPLY_BEHAVIORS_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg, error); } node = m_ConfigRoot[CONFIG_INSTRUMENTATION_SECTION]; if (node.Exists) { try { m_Instrumentation = FactoryUtils.MakeAndConfigure(node, typeof(InstrumentationService)) as IInstrumentationImplementation; if (m_Instrumentation == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Instrumentation made"); BeforeInstrumentationStart(m_Instrumentation); if (m_Instrumentation is Service) { ((Service)m_Instrumentation).Start(); WriteLog(MessageType.Info, FROM, "Instrumentation started"); } } catch (Exception error) { var msg = StringConsts.APP_INSTRUMENTATION_INIT_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg); } } node = m_ConfigRoot[CONFIG_THROTTLING_SECTION]; if (node.Exists) { try { m_Throttling = FactoryUtils.MakeAndConfigure(node, typeof(ThrottlingService)) as IThrottlingImplementation; if (m_Throttling == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Throttling made"); BeforeThrottlingStart(m_Throttling); if (m_Throttling is Service) { ((Service)m_Throttling).Start(); WriteLog(MessageType.Info, FROM, "Throttling started"); } } catch (Exception error) { var msg = StringConsts.APP_THROTTLING_INIT_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg); } } node = m_ConfigRoot[CONFIG_DATA_STORE_SECTION]; if (node.Exists) { try { m_DataStore = FactoryUtils.MakeAndConfigure(node) as IDataStoreImplementation; if (m_DataStore == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "DataStore made"); BeforeDataStoreStart(m_DataStore); if (m_DataStore is Service) { ((Service)m_DataStore).Start(); WriteLog(MessageType.Info, FROM, "DataStore started"); } } catch (Exception error) { var msg = StringConsts.APP_DATA_STORE_INIT_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg); } } node = m_ConfigRoot[CONFIG_OBJECT_STORE_SECTION]; if (node.Exists) { try { m_ObjectStore = FactoryUtils.MakeAndConfigure(node, typeof(ObjectStoreService)) as IObjectStoreImplementation; if (m_ObjectStore == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "ObjectStore made"); BeforeObjectStoreStart(m_ObjectStore); if (m_ObjectStore is Service) { ((Service)m_ObjectStore).Start(); WriteLog(MessageType.Info, FROM, "ObjectStore started"); } } catch (Exception error) { var msg = StringConsts.APP_OBJECT_STORE_INIT_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg); } } node = m_ConfigRoot[CONFIG_GLUE_SECTION]; if (node.Exists) { try { m_Glue = FactoryUtils.MakeAndConfigure(node, typeof(NFX.Glue.Implementation.GlueService)) as IGlueImplementation; if (m_Glue == null) { throw new NFXException(StringConsts.APP_INJECTION_TYPE_MISMATCH_ERROR + node .AttrByName(FactoryUtils.CONFIG_TYPE_ATTR) .ValueAsString(CoreConsts.UNKNOWN)); } WriteLog(MessageType.Info, FROM, "Glue made"); BeforeGlueStart(m_Glue); if (m_Glue is Service) { ((Service)m_Glue).Start(); WriteLog(MessageType.Info, FROM, "Glue started"); } } catch (Exception error) { var msg = StringConsts.APP_GLUE_INIT_ERROR + error; WriteLog(MessageType.Error, FROM, msg); throw new NFXException(msg); } } WriteLog(MessageType.Info, FROM, "Common application initialized"); WriteLog(MessageType.Info, FROM, "Time localization information follows"); WriteLog(MessageType.Info, FROM, " Application: " + this.TimeLocation.ToString()); WriteLog(MessageType.Info, FROM, " Log: " + this.Log.TimeLocation.ToString()); WriteLog(MessageType.Info, FROM, " Glue: " + this.Glue.TimeLocation.ToString()); WriteLog(MessageType.Info, FROM, " Instrumentation: " + this.Instrumentation.TimeLocation.ToString()); WriteLog(MessageType.Info, FROM, " ObjStore: " + this.ObjectStore.TimeLocation.ToString()); }