Las propiedades de configuración para cada
servicio pueden
describirse en metadatos que satisfagan la especificación
OSGi Metatype Service. Los metadatos pueden incluir valores predeterminados, nombres traducibles y descripciones
e información para permitir la validación de los valores de entrada. El archivo XML resultante se empaqueta en el
paquete que contiene su servicio, en el directorio OSGI-INF/metatype, según la
especificación.
Acerca de esta tarea
Es opcional proporcionar metadatos para describir la configuración,
pero proporciona las ventajas siguientes:
- Los valores predeterminados se pueden separar del código de implementación en el
archivo XML metatype donde son sencillos de ubicar.
- Se pueden especificar los tipos de datos adecuados y otros datos de validación para cada atributo, lo que permite que el analizador de configuración y las herramientas del desarrollador realicen la validación y se simplifica el código escrito para procesar los atributos;
- La configuración se incluirá en el esquema XML que describe la configuración disponible para las herramientas del desarrollador y otros programas de utilidad;
- Se pueden proporcionar nombres traducibles y descripciones para cada atributo y se mostrarán en las herramientas del desarrollador.
Procedimiento
- Cree un archivo xml en el directorio OSGI-INF/metatype
del paquete y añada una declaración de espacio de nombres para los espacios de nombres OSGi Metatype:
<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.1.0">
</metatype:MetaData>
- Añada un elemento de definición de clase de objeto (OCD) para contener
el conjunto de atributos, con un identificador y, de modo opcional, un nombre
y una descripción. Proporcione también un elemento Designate para
correlacionar el OCD con el PID utilizado en el código y el archivo server.xml.
<OCD name="b2c" description="bundle two config" id="b2c-id">
</OCD>
<Designate pid="testBundleTwo">
<Object ocdref="b2c-id" />
</Designate>
- Añada elementos de definición de atributo (AD) para cada propiedad de configuración,
en el OCD. Cada atributo necesita un identificador que se utiliza también
en el archivo server.xml y en el código que
recibe la configuración inyectada. Puede tener, de modo opcional, un nombre y una descripción, que las herramientas del desarrollador y otras herramientas gráficas pueden utilizar.
La especificación de un tipo de datos permite que el entorno de ejecución
valide la entrada de ese tipo y simplifique el código de procesamiento.
La especificación de un valor predeterminado de utilidad permite que la configuración suministrada
por el usuario sea mínima y contiene todos los valores predeterminados de configuración en una
ubicación conocida:
<AD name="boolProperty" description="a boolean property" id="boolProp"
type="Boolean" default="false" />
- A continuación, debe tener el siguiente archivo metatype.xml.
<?xml version="1.0" encoding="UTF-8"?>
<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.1.0">
<OCD name="b2c" description="bundle two config" id="testBundleTwo-2-id">
<AD name="textProperty" description="a text property"
id="textProp" type="String" default="default string" />
<AD name="boolProperty" description="a boolean property"
id="boolProp" type="Boolean" default="false" />
<AD name="intProperty" description="an integer property"
id="intProp" type="Integer" default="14" />
</OCD>
<Designate pid="testBundleTwo-2">
<Object ocdref="testBundleTwo-2-id" />
</Designate>
</metatype:MetaData>
- Codifique el servicio para recibir las propiedades de configuración.
Sin la descripción del metatype, se proporcionarán todas las propiedades
como valores de tipo String y se procesarán de este modo:
String textProp = (String) properties.get("textProp");
Boolean boolProp = Boolean.parseBoolean((String) properties.get("boolProp"));
int intProp = Integer.parseInt((String) properties.get("intProp"));
String textProp = (String) properties.get("textProp");
Boolean boolProp = (Boolean) properties.get("boolProp");
int intProp = (Integer) properties.get("intProp");
Además, el entorno de ejecución ya habrá validado que los valores de entrada
son de los tipos correctos.