各サービスの構成プロパティーは、OSGi Metatype Service 仕様に従ったメタデータで記述することができます。
メタデータには、デフォルト値、翻訳可能な名前と説明、
および、入力値の検証を可能にする情報を含めることができます。結果の XML ファイルは、仕様に従って、OSGI-INF/metatype ディレクトリー内の、サービスを含むバンドルにパッケージ化されます。
このタスクについて
構成を記述するためのメタデータの指定はオプションですが、
以下のような利点があります。
- デフォルト値を実装コードと分離してメタタイプ XML ファイルに入れることができ、デフォルト値を見つけやすくなります。
- 各属性ごとに、適切なデータ型および他の妥当性検査データを指定することができ、
構成パーサーおよび開発者ツールによる妥当性検査が可能になり、属性を処理するために作成するコードがシンプルになります。
- 開発者ツールおよび他のユーティリティーに対して使用可能な構成を記述する XML スキーマに、構成が含まれるようになります。
- 翻訳可能な名前および説明を各属性に指定でき、それが開発者ツールで表示されます。
手順
- バンドルの OSGI-INF/metatype ディレクトリー内に XML ファイルを作成し、OSGi Metatype 名前空間のための名前空間宣言を追加します。
<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.1.0">
</metatype:MetaData>
- オブジェクト・クラス定義 (OCD) エレメントを追加して、属性セットを ID、名前、および説明 (名前と説明はオプションです) と共に
組み込みます。また、コードおよび server.xml ファイル内で使用される PID に OCD をマップするため、Designate エレメント
も指定します。
<OCD name="b2c" description="bundle two config" id="b2c-id">
</OCD>
<Designate pid="testBundleTwo">
<Object ocdref="b2c-id" />
</Designate>
- OCD 内で、各構成プロパティーの属性定義 (AD) エレメントを追加
します。各属性には ID が必要です。その ID は、server.xml ファイル内と、注入された構成を受け取るコード内でも使用されます。また、開発者ツール
および他のグラフィック・ツールが使用できる名前および説明をオプションで
指定できます。データ型を指定すると、ランタイム環境
がその型について入力を検証することが可能になり、処理コード
が簡単になります。有用なデフォルト値を指定することによって、ユーザー指定の構成を最小にすることができ、既知の場所に構成のすべてのデフォルト値を格納することができます。
<AD name="boolProperty" description="a boolean property" id="boolProp"
type="Boolean" default="false" />
- 以下の 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>
- 構成プロパティーを受け取るサービスをコーディングします。
メタタイプ記述がない場合、すべてのプロパティー
が String 値として提供され、次のように処理されます。
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");
ランタイム環境は、入力値が正しい型であることを検証済みの状態になります。