Changed how the builtin JServices (JParameterManager, JComponentManager, JLoggingService, JPluginLoader) get initialized. Previously, app.SetParameterValue() sometimes didn't have an effect depending the Service that used the parameter had already been initialized. This meant that:
Setting logging levels via JApplication::SetParameterValue() never had an effect.
If the user called JApplication::GetService() before JApplication::Initialize(), this would trigger a wave of JService initializations, which would cause the services to load parameter values, possibly before the user was finished setting them.
Now, the JApplication constructor sets up the services, but doesn't initialize any of them. All Services are meant to be initialized during JApplication::Initialize(). JApplication::SetParameter() and ProvideService() will throw an exception if the user attempts to call them after Initialize() finishes. Calling JApplication::GetService() before Initialize() starts will print a warning message. Currently we still need to be able to call GetService() before Initialize() for the sake of the "custom topologies" used by SubeventExample, TopologyTest, and SubeventTest. However, we will be changing this at two different levels in the near future: Firstly, users will be able to provide multiple instances of a JService and choose which one to use via a parameter. Secondly, SubeventExample won't even require a custom topology.
Changed how the builtin JServices (JParameterManager, JComponentManager, JLoggingService, JPluginLoader) get initialized. Previously,
app.SetParameterValue()
sometimes didn't have an effect depending the Service that used the parameter had already been initialized. This meant that:Now, the JApplication constructor sets up the services, but doesn't initialize any of them. All Services are meant to be initialized during JApplication::Initialize(). JApplication::SetParameter() and ProvideService() will throw an exception if the user attempts to call them after Initialize() finishes. Calling JApplication::GetService() before Initialize() starts will print a warning message. Currently we still need to be able to call GetService() before Initialize() for the sake of the "custom topologies" used by SubeventExample, TopologyTest, and SubeventTest. However, we will be changing this at two different levels in the near future: Firstly, users will be able to provide multiple instances of a JService and choose which one to use via a parameter. Secondly, SubeventExample won't even require a custom topology.