@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):
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();
}
Next, we define our Printer service which depends on the PrinterConfiguration:
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