Package oracle.dbtools.plugin.api.conf
About Configuration Settings
Each plugin may contribute zero or more ConfigurationSetting
values. By declaring discoverable ConfigurationSetting
values a plugin enables two things:
- The plugin's settings may be managed in the same manner across all plugins. Configuration Tooling can operate on the plugin's settings automatically
- The plugin can inject the setting's value directly into an
javax.inject.Inject
injection site. This reduces coupling to the Plugin API, making it easier to re-use or share code in the plugin in other code bases and it also facilitates easier unit testing. Unit tests can just pass the the required values directly to the class under test, rather than having to pass values via theConfiguration
API
Declaring a Configuration Setting
Each setting is uniquely defined by it's name. It must have a data-type and may also have the following optional attributes:- A default value, used when no explicit value for the settings is provided in the
Configuration
- A flag indicating if the value is sensitive (such as a password) and should be stored/accessed securely
- A flag indicating if the setting is global and applies across the entire application, rather than being configurable per request
Best practice is to define a constant for the setting name and use that constant rather than a literal string. The ConfigurationSetting
should be defined as a final static
constant. The field must be annotated with javax.inject.Named
to indicate the unique name of the setting.
The field or it's enclosing type must be annotated with Provides
so that the field is discoverable.
Supported data types
ConfigurationSetting
data-types must be one of the following:
String
- A textual valueInteger
- An integer valueLong
- A large integer valueBoolean
- A boolean value. It is recommended that the default value for aBoolean
setting is alwaysBoolean.FALSE
- A subclass of
Enum
- Where the value of is one of the case insensitive name of enum value names TimeDuration
- A value representing a duration
Examples
Undocumented Integer Setting
public interface PluginSettings { static final String SETTING_FOO = "my.plugin.setting.foo"; } @Provides class PluginImpl { @Named(PluginSettings.SETTING_FOO) static final ConfigurationSetting FOO = ConfigurationSetting.setting(10); }
Documented Enum Setting
public interface PluginSettings { static final String ACCESS_MODE_SETTING = "my.plugin.accessMode"; } @Provides class PluginImpl { @Named(PluginSettings.ACCESS_MODE_SETTING) @ConfigurationSetting.Description(@TranslatableDescription(type = MyPluginMessages.class, id = MyPluginMessages.ACCESS_MODE_DESCRIPTION)) static final ConfigurationSetting ACCESS_MODE = ConfigurationSetting.setting(java.nio.AccessMode.class, java.nio.AccessMode.READ); }
Injecting Configuration Settings
When a ConfigurationSetting
is declared as outlined above, the Dependency Injection runtime is able to map each setting to a concrete value derived from the Configuration
instance applicable to the current scope. Thus instead of invoking Configuration.get(String)
(which is strongly discouraged) a plugin service can just declare a dependency on the configuration setting value via an appropriately typed and javax.inject.Named
parameter in it's constructor
For example to inject the my.plugin.setting.foo
configuration setting value into some service, one would do:
@Provides class MyPluginService implements SomeService { @Inject MyPluginService(final @Named(PluginSettings.FOO_SETTING) int foo) { ... } }
Boxing and Unboxing of Primitive Types
For ease of use, injection sites may use primitive types where applicable.
- Settings of type
Integer
can be injected asint
- Settings of type
Long
can be injected aslong
- Settings of type
Boolean
can be injected asboolean
Note in each case if no default value is specified for the setting and the Configuration
also lacks a value for the setting then a runtime error will occur during creation of the service and likely lead to the application not starting.
- Author:
- cdivilly
-
Interface Summary Interface Description Configuration Represents a set of configuration properties. -
Class Summary Class Description ConfigurationSetting Declares aConfigurationSetting
, specifying it's type, and default value.ConfigurationSetting.Builder BuildsConfigurationSetting
instancesTimeDuration Represents a specification of a time duration. -
Enum Summary Enum Description ConfigurationStatus Enumerates the status of a ConfigurationSettings. -
Annotation Types Summary Annotation Type Description ConfigurationSetting.Description Deprecated. since 20.3.0.