Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■HiveMind version1.0 - Configuration Point

Configuration Point

HiveMind では設定情報などを読み込むための仕組みとして Configuration Point というものが提供されています。
これ、具体的に何ができるのかというと

ことができます。
つまり、例によって例のごとく Configuration Point を使うにはひたすら XML の書き方を覚えれば良いわけです。

XML の記述とクラスへの変換ルールの定義

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 中で注目すべきところを順番に挙げていきます。

1. <configuration-point> タグ

Configuration Point は <configuration-point> に始まり、 </configuration-point> に終わります。
<configuration-point> は <schema> タグを内包することができ、この <schema> タグの中に XML とクラスとの対応を記述します。

2.<element> タグ

<element> タグには XML と Java のクラスとの対応情報を記述します。
name 属性で指定された値が、今後 XML で対応するクラスを操作する際の要素名になります。

3.<attribute> タグ

<attribute> タグには XML で記述する際の属性を定義します。 attribute はクラスのプロパティと対応します。
name 属性で指定された値が、今後 XML で対応するクラスのプロパティを操作する際の属性名になります。
required 属性は XML での記述の際に必須項目かどうかを表しています。

4.<conversion> タグ

<conversion> タグで XML から Java クラスへマッピングを定義します。
class 属性に変換先のクラス名を指定します。
今回はこれだけしか指定をしないので、XML からクラスオブジェクトへのデータの受け渡しには attribute の name 属性と一致する set メソッドが使われるようになります。
もちろん、より詳細な指定をすればより複雑なマッピングを行うことも可能です。

オブジェクトの生成

configuration-point の定義が終わったら、次は定義したクラスのオブジェクトを生成する記述をします。

    <contribution configuration-id="point1">
        <conf1 param1="A1" param2="A2"/>
        <conf1 param1="B1" param2="B2"/>
    </contribution>
オブジェクトの生成に関する記述は<contribution>タグ内に記述します。
属性 configuration-id には生成するクラスのスキーマを定義した configuration-point の id を指定します。
あとはスキーマで定義した通りにタグを記述していく感じになります。

Java コードからのアクセス

ここまでで 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());
}
手順としては、
  1. RegistryBuilder.constructDefaultRegistry() で Registry オブジェクトを取得
  2. Registry オブジェクトの getConfiguration(String) メソッドで List を取り出す
といった感じになります。
getConfiguration(String) メソッドの引数には取得するオブジェクトの configuration-point の id をフルで指定します。
オブジェクトは List に詰められた状態で返ってくるのであとは取り出すのみです。

ただ、この方法で取り出すことはあまりなさそうでマニュアル的には作成したオブジェクトは 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 ・・・本家。バイナリ、ソースコードやその他の情報が手に入ります。