HiveMind では設定情報などを読み込むための仕組みとして Configuration Point というものが提供されています。
これ、具体的に何ができるのかというと
Configuration Point を使うときには XML の記述からクラスを生成するので、その記述内容と XML から Java のオブジェクトを作る時の変換ルールなどを定義してやる必要があります。
まずは例です。
<module id="sample" version="1.0.0">
<configuration-point id="point1">
<schema>
<element name="conf1">
<attribute name="param1" required="true"/>
<attribute name="param2" required="true"/>
<conversion class="javademo.hivemind.CustomConfImpl"/>
</element>
</schema>
</configuration-point>
例の XML 中で注目すべきところを順番に挙げていきます。
configuration-point の定義が終わったら、次は定義したクラスのオブジェクトを生成する記述をします。
<contribution configuration-id="point1">
<conf1 param1="A1" param2="A2"/>
<conf1 param1="B1" param2="B2"/>
</contribution>
オブジェクトの生成に関する記述は<contribution>タグ内に記述します。ここまでで xml への記述は完了で、次は Java のコードから値を取り出す方法です。
Registry reg = RegistryBuilder.constructDefaultRegistry();
List list = reg.getConfiguration("sample.point1");
for(int i=0; i<list.size(); i++){
CustomConfImpl conf = (CustomConfImpl) list.get(i);
System.out.println("param1=" + conf.getParam1());
System.out.println("param2=" + conf.getParam2());
}
手順としては、
ただ、この方法で取り出すことはあまりなさそうでマニュアル的には作成したオブジェクトは service-point に渡す値として使うのが吉。といった感じで書かれています。
今回のサンプルソースの全コードです。
・hivemodule.xml
<module id="sample" version="1.0.0">
<configuration-point id="point1">
<schema>
<element name="conf1">
<attribute name="param1" required="true"/>
<attribute name="param2" required="true"/>
<conversion class="javademo.hivemind.CustomConfImpl"/>
</element>
</schema>
</configuration-point>
<contribution configuration-id="point1">
<conf1 param1="A1" param2="A2"/>
<conf1 param1="B1" param2="B2"/>
</contribution>
</module>
・目的のクラス
package javademo.hivemind;
public class CustomConfImpl {
private String param1;
private String param2;
public String getParam1() {
return param1;
}
public void setParam1(String param1) {
this.param1 = param1;
}
public String getParam2() {
return param2;
}
public void setParam2(String param2) {
this.param2 = param2;
}
}
・実行プログラム
package javademo.hivemind;
import java.util.List;
import org.apache.hivemind.Registry;
import org.apache.hivemind.impl.RegistryBuilder;
public class Run {
public static void main(String[] args) {
Registry reg = RegistryBuilder.constructDefaultRegistry();
List list = reg.getConfiguration("sample.point1");
for(int i=0; i<list.size(); i++){
CustomConfImpl conf = (CustomConfImpl) list.get(i);
System.out.println("param1=" + conf.getParam1());
System.out.println("param2=" + conf.getParam2());
}
}
}
◎参考
The Apache Jakarta Project
・・・本家。バイナリ、ソースコードやその他の情報が手に入ります。