Genesis
Auhtor nari@seeds-man.com
Version 0.9
Last update 2001/09/05

INDEX

皆様からのご意見をお待ちしています。ご意見の送付先は、メールアドレス nari@seeds-man.comまでお願いします。

一般情報

概要
リリースについて
Genesisの概要
ドキュメントの変更点
 
バグ
既知の問題
 
リリースおよびダウンロード
Genesisのダウンロード
作者のホームページ
 
法律上の注意
再配布について
著作権およびライセンスに関する規約


APIに関するドキュメント

JavaDoc
Genesis API仕様  
 


機能ガイド

マニュアル
コンフィグファイルの読み込み
クラスの定義方法
インスタンスの作成
インスタンスメソッドの呼び出し
スタティックメソッドの呼び出し
生成済みインスタンスをメソッド引数に使用する


動作環境とインストール

動作環境
Genesisの動作に必要なソフトウエア
 
インストールとコンパイル方法
インストール
コンパイル
 


一般的な情報

概要
リリースついて
現在のリリースは、Version0.9です。
このバージョンは必要と思われる機能を一通り実装し、単純な単体テストを終えたという状態です。
したがって別のアプリケーションに組み込んで利用するなどの、「実戦配備」をまだ行っていません。
まだ潜在的なバグが多々存在している可能性があるため、それをご理解の上ご利用ください。

Genesisの概要
Genesisはアプリケーションの初期化時に行われるコンフィグファイルの読み込みとその値を特定のオブジェクトの特定のメソッドに設定するといった 処理を自動化するためのライブラリです。
具体的にはコンフィグファイル(XML文書)にオブジェクトの生成ルール、メソッドの呼び出しルール、メソッドの引数値などを定義し、 あとはGenesisにコンフィグファイルを読み込ませるだけで、ルールに従いオブジェクトを生成し、メソッドを呼び出します。

ドキュメントの変更履歴
・2001/9/5 初版


バグ
既知の問題
・引数のあるコンストラクタや、シングルトンパターンにおける引数のあるインスタンス化メソッドは呼び出すことができません。 これは既知の問題というより仕様です。


リリースおよびダウンロード
Genesisのダウンロード
Genesisは下記のURLからダウンロードできます。
http://www.seeds-man.com/~nari/v1/member/nari/lib/genesis/genesis0.9.tar.gz
作者のホームページ
作者のホームページは以下のURLに存在します。
http://www.seeds-man.com/~nari/v1/


法律上の注意
再配布について
問題ありません。

著作権およびライセンスに関する規約
本プログラムに関するあらゆる権利と責任を放棄します。



APIに関するドキュメント

Genesis API仕様
JavaDoc
Genesis API(パブリッククラスのみ)




機能ガイド

マニュアル
コンフィグファイルの読み込み
Genesisインスタンスを作成し、initメソッドの引数にファイルを示すURIを指定します。
有効はURIは「http://」と「file://」で始まるURIのみです。
URI接頭句を指定しない場合、Genesisはfile://で始まるURIと仮定し処理を行います。

Genesis gene = new Genesis();
gene.init("file:///tmp/foo.xml");
クラスの定義方法
以下のようにclassタグで囲った部分がそのクラスに関する記述を意味します。

<class name="java.util.HashMap">




</class>
インスタンスの作成
定義したクラスのインスタンスを作成したい場合は以下のように記述します。
下記の例では、classタグで指定されたクラスのインスタンスを引数なしコンストラクタをつかって生成します。
instanceタグのname属性の指定は任意でかまいません。
name属性にてインスタンス名を宣言しておくと、後にこのインスタンスを別のクラスのメソッドの引数に指定することができます。

<class name="java.util.HashMap">
<instance name="foo1">


</instance>
</class>

またシングルトンパターンのクラスのインスタンスを作成したい場合は以下のように記述します。
下記の例では、classタグで指定されたシングルトンパターンクラスのインスタンスをmethod属性で指定されたメソッドを引数なしで呼び出します。

<class name="com.seeds_man.genesis.samples.SingletonConfig">
<instance name="foo2" method="getInstance">


</instance>
</class>

インスタンスメソッドの呼び出し
生成したインスタンスのメソッドを実行する場合は以下のように記述します。

<class name="java.util.HashMap">
<instance name="foo1">
<method name="put(Object, Object)">
<param type="String" value="key1">
<param type="String" value="value1">
</method>
</instance>
</class>

上記の例では、java.util.HashMapクラスのインスタンスを生成し、putメソッドの第一引数にStringオブジェクト"key1"、 第二引数にStringオブジェクト"value1"を与え実行しています。
例では、methodタグのname属性に、「メソッド名+シグネチャ」を定義していますが、次行移行で定義しているparamタグの type属性とシグネチャが全く同じクラスである場合シグネチャの記述を省略することができます。
以下にその例を記述します。

<class name="java.util.HashMap">
<instance name="foo1">
<method name="put">
<param type="String" value="key1">
<param type="String" value="value1">
</method>
</instance>
</class>

上記の例では、methodタグのname属性のメソッドシグネチャの記述を省略しました。
この場合、Genesisは該当するメソッドをparamタグのtype属性に定義してある型を引数として持つメソッドを探しにいきます。
つまりこの例では、put(String, String)のメソッドを実行しようとするわけです。
(HashMapにはそのようなメソッドは存在しないのでエラーになってしまいますが。。。。)
スタティックメソッドの呼び出し
スタティックメソッドの呼び出し方の要領は、インスタンスメソッドの呼び出し方法と同じです。
違う点は、インスタンスメソッドのmethodタグはinstanceタグの内部に記述していますが、スタティックメソッドの methodタグはclassタグの直下に記述するという点です。

<class name="java.lang.System">
<method name="setProperty">
<param type="String" value="key1">
<param type="String" value="value1">
</method>
</class>

生成済みインスタンスをメソッド引数に使用する
Genesiでは、Genesis内で生成されたインスタンスを他のメソッドの引数に使用することができます。
インスタンスを生成する際に、instanceタグのname属性を与えておくことで、後にそのインスタンスを参照します。

<?xml version="1.0" encoding="UTF-8" ?>
<config>
  <sample1>
    <!--
      サンプル1.1
      Listオブジェクトに各種オブジェクトをaddする。
    -->
    <class name="java.util.ArrayList">
      <instance name="list1">
        <method name="add(Object)">
          <param type="Byte" value="1" />
        </method>
        <method name="add(Object)">
          <param type="Short" value = "2" />
        </method>
        <method name="add(Object)">
          <param type="Float" value="3" />
        </method>
        <method name="add(Object)">
          <param type="Double" value="0.1111111" />
        </method>
        <method name="add(Object)">
          <param type="Character" value="a" />
        </method>
        <method name="add(Object)">
          <param type="Integer" value="4" />
        </method>
        <method name="add(Object)">
          <param type="Long" value="11111111111" />
        </method>
        <method name="add(Object)">
          <param type="Boolean" value="true" />
        </method>
        <method name="add(Object)">
          <param type="Boolean" value="false" />
        </method>
      </instance>
    </class>

    <!--
      サンプル1.2
      サンプル1.1で作成したListオブジェクトをHashMapに追加する。
    -->
    <class name="java.util.HashMap">
      <instance name="map1">
        <method name="put(Object, Object)">
          <param type="String" value="samplelist" />
          <param type="java.util.List" value="list1" />
        </method>
      </instance>
    </class>
  </sample1>
</config>	

この例では生成済みのArrayListインスタンス(name=list1)を、後に、HashMapのインスタンスメソッド 「put(Object, Object)」の第二引数に使用しています。
Genesisでは生成済みのインスタンスをメソッドの引数に与える際のインスタンス名の表記方法が二種類あります。
上記の例では、ArrayListとそれを使用するHashMapの両クラスが同じ<sample1> 〜 </sample1>ノードの配下に定義されているため、単にインスタンス名を指定するだけで良いですが、もし別のノードで宣言されたインスタンスを参照したい場合は、/config/sample1/list1 のようにトップノードからフルパスで指定する必要があります。

下記がその例です。

<?xml version="1.0" encoding="UTF-8" ?>
<config>
  <sample1>
    <!--
      サンプル1.1
      Listオブジェクトに各種オブジェクトをaddする。
    -->
    <class name="java.util.ArrayList">
      <instance name="list1">
        <method name="add(Object)">
          <param type="Byte" value="1" />
        </method>
        <method name="add(Object)">
          <param type="Short" value = "2" />
        </method>
        <method name="add(Object)">
          <param type="Float" value="3" />
        </method>
        <method name="add(Object)">
          <param type="Double" value="0.1111111" />
        </method>
        <method name="add(Object)">
          <param type="Character" value="a" />
        </method>
        <method name="add(Object)">
          <param type="Integer" value="4" />
        </method>
        <method name="add(Object)">
          <param type="Long" value="11111111111" />
        </method>
        <method name="add(Object)">
          <param type="Boolean" value="true" />
        </method>
        <method name="add(Object)">
          <param type="Boolean" value="false" />
        </method>
      </instance>
    </class>
  </sample1>

    <!--
      サンプル2.1
      サンプル1.1で作成したListオブジェクトをHashMapに追加する。
    -->
  <sample2>
    <class name="java.util.HashMap">
      <instance name="map1">
        <method name="put(Object, Object)">
          <param type="String" value="samplelist" />
          <param type="java.util.List" value="/config/sample1/list1" />
        </method>
      </instance>
    </class>
  </sample2>
</config>
この機能はコンフィグファイルが肥大化した際にインスタンス名の衝突を防ぐために存在します。


動作環境とインストール

動作環境
Genesisの動作に必要なソフトウエア
  • JDK1.2以上のJava仮想マシン
  • JAXP(JavaTM APIs for XML Processing)


  • インストールとコンパイル方法
    インストール
    とくに変わったことは必要ありません。
    ダウンロードしたtar.gzパッケージを解凍すると、 bin/lib/genesis.jar というjarアーカイブがあるのでそれをCLASSPATHに追加してください。
    コンパイル
    ダウンロードしたtar.gzパッケージにはバイナリも含まれるため、コンパイルに必要はありません。

    Genesisでは、コンパイルにApacheのJakartaプロジェクトが提供するAntを利用しています。
    コンパイルするには別途antが必要です。
    (特に複雑なことをしていませんので、javacからでも問題なくコンパイルできます。)

    Genesisのディレクトリにて、 $ ant とコマンドを打つだけでコンパイルができます。
    詳しくはbuild.xml をご覧下さい。


    from SEEDS-MAN.COM