@Retention(value=CLASS)
@Target(value=METHOD)
public @interface ConfigurationDependency
In the following example, the "Printer" component depends on a configuration whose PID name is "sample.PrinterConfiguration". This service will initialize its ip/port number from the provided configuration.
First, we define the configuration metadata, using standard bndtools metatatype annotations (see http://www.aqute.biz/Bnd/MetaType):
Next, we define our Printer service which depends on the PrinterConfiguration:package sample; import aQute.bnd.annotation.metatype.Meta.AD; import aQute.bnd.annotation.metatype.Meta.OCD; @OCD(description = "Declare here the Printer Configuration.") public interface PrinterConfiguration { @AD(description = "Enter the printer ip address") String ipAddress(); @AD(description = "Enter the printer address port number.") int portNumber(); }
package sample; import aQute.bnd.annotation.metatype.*; @Component public class Printer { @ConfigurationDependency(pidClass = PrinterConfiguration.class) // Will use pid "sample.PrinterConfiguration" void updated(Dictionary props) { // load configuration from the provided dictionary, or throw an exception of any configuration error. PrinterConfig cnf = Configurable.createConfigurable(PrinterConfig.class, props); String ip = cnf.ipAddress(); int port = cnf.portNumber(); ... } }
Modifier and Type | Optional Element and Description |
---|---|
java.lang.String |
description
Deprecated.
use standard bndtools metatype annotations instead (see http://www.aqute.biz/Bnd/MetaType)
|
java.lang.String |
heading
Deprecated.
use standard bndtools metatype annotations instead (see http://www.aqute.biz/Bnd/MetaType)
|
PropertyMetaData[] |
metadata
Deprecated.
use standard bndtools metatype annotations instead (see http://www.aqute.biz/Bnd/MetaType)
|
java.lang.String |
name
The name for this configuration dependency.
|
java.lang.String |
pid
Returns the pid for a given service (by default, the pid is the service class name).
|
java.lang.Class<?> |
pidClass
Returns the pid from a class name.
|
boolean |
propagate
Returns true if the configuration properties must be published along with the service.
|
public abstract java.lang.String pid
public abstract java.lang.Class<?> pidClass
public abstract boolean propagate
public abstract java.lang.String name
Usage example of a Configuration dependency whose pid and propagate flag is configured dynamically from init method:
/** * A Service that dynamically defines an extra dynamic configuration dependency from its init method. */ @Component class X { private Dictionary m_config; // Inject initial Configuration (injected before any other required dependencies) @ConfigurationDependency void componentConfiguration(Dictionary config) { // you must throw an exception if the configuration is not valid m_config = config; } /** * All unnamed dependencies are injected: we can now configure our dynamic configuration whose dependency name is "global". */ @Init Map init() { return new HashMap() {{ put("global.pid", m_config.get("globalConfig.pid")); put("global.propagate", m_config.get("globalConfig.propagate")); }}; } // Injected after init, and dynamically configured by the init method. @ConfigurationDependency(name="global") void globalConfiguration(Dictionary globalConfig) { // you must throw an exception if the configuration is not valid } /** * All dependencies are injected and our service is now ready to be published. */ @Start void start() { } }
public abstract java.lang.String heading
public abstract java.lang.String description
public abstract PropertyMetaData[] metadata