OverviewQBO3 provides many configuration classes and corresponding files as part of a standard install. These configuration classes are configured to merge configuration data from their corresponding configuration file with configuration data stored in a SQL 'ConfigurationEntry' table. The BaseConfiguration class provides the ability to monitor this ConfigurationEntry table on a time, allowing site owners to push real-time configuration updates to all servers participating in a server farm.
The key components involved with this include: - qbo.Application.ConfigurationEntry: a class file that manages interaction with the ConfigurationEntry table
- qbo.Application.Configuration.BaseConfiguration: a class that can apply ConfigurationEntry changes in real time
- qbo.Application.Configuration.BaseConfiguration<T>: a generic class that handles loading and caching of configuration sections
- qbo.ApplicationWeb.ConfigurationMonitor: a class that polls the ConfigurationEntry table for changes, calling BaseConfiguration.Monitor with any changes found
This is how it works: - ConfigurationMonitor calls ConfigurationEntry.Monitor() on a timer
- ConfigurationEntry.Monitor calls BaseConfiguration.Monitor()
- BaseConfiguration.Monitor matches the ConfigurationEntry.Source to a configuration section in memory, and if found, calls BaseConfiguration.Update()
- BaseConfiguration<T>.Load will 'register' a configuration section with BaseConfiguration.RegisteredConfigs as it loads
- BaseConfiguration.Update is overridden by derived classes, and process the ConfigurationEntry item passed to it
Using BaseConfiguration<T> and DbConfigurationElementCollectionGenerally, custom configuration classes in QBO3 follow this pattern: - {Handler}Configuration.cs: this handles the entire configuration section
- this should derive from BaseConfiguration<{Handler}Configuration>
- e.g. FileObjectConfiguration: BaseConfiguration<FileObjectConfiguration>
- e.g. CacheConfiguration: BaseConfiguration<CacheConfiguration>
- {HandlerProperty}Collection.cs: this handles repeating properties (e.g. DbStatements, FileObjects, Queues)
- this should derive from DbConfigurationElementCollection; this will load custom entries in the collection from the ConfigurationEntry table
- {HandlerProperty}.cs: this handle a custom properties
When creating a class based on BaseConfiguration<T>, ensure you: - override the Update method to handle your class-specific properties
- this will accept new ConfigurationEntry items, and update the appropriate configuration property in memory
- create a new SectionName, to establish the default section name for your class
- override the Initialize method, if your class needs to execute post-load processing to be ready for use
For examples, see: - qbo.Application.Configuration.CacheConfiguration
- qbo.Attachment.Configuration.FileObjectConfiguration
|
|