[Seasar-user:21348] s2configでの環境による設定切り替えについて

Kaiho Hiroshi [E-MAIL ADDRESS DELETED]
2012年 6月 12日 (火) 19:02:55 JST


海保と申します。
初めて投稿させていただきます。
よろしくお願いいたします。

http://ml.seasar.org/archives/seasar-user/2011-June/020807.html
http://ml.seasar.org/archives/seasar-user/2011-June/020828.html
http://ml.seasar.org/archives/seasar-user/2011-July/020844.html

上記のメーリングリストを参考に、env設定による環境切り替えを行おうとしており、
その際に、期待した結果にならなかったので、内容のご確認と対応をご教示いただければと思います。

下記のようなpropertiesファイルの設定をすると、
hoge1とhoge2の項目はhoge_st.propertiesの値で上書き(fuga1, fuga2)され、
hoge3はhoge.propertiesで設定した項目がそのまま利用(hoge3)され、

結果出力は、
「fuga1,fuga2,hoge3」
を期待していたのですが、

実際には、
「fuga1,fuga2,デフォルト3」
となります。

--hoge.properties--
env=st
hoge1=hoge1
hoge2=hoge2
hoge3=hoge3

--hoge_st.properties--
hoge1=fuga1
hoge2=fuga2


s2configのユーザガイドを読んだなかでは、
「hoge_st.propertiesで定義されていない項目は上書きされない」
つまり、
「hoge_st.proertiesに項目が無く、hoge.propertiesに項目があればその値、無ければデフォルト値」
となるのが自然だと思うのですが、いかがでしょうか?

ConfigContainerImpl#finadAllConfigValue()の中のConfigContainerTraversal#forEachParent()を見ると、
子コンテナ(hoge_st.propertiesの値を保持している)から順にpropertiesファイルの値を見ており、
この際に子コンテナに存在しないキーの場合はデフォルト値を返すようになっているようです。

よろしくお願いいたします。


【環境】
s2-frameworkのバージョン      2.4.42
s2-extensionのバージョン 2.4.42
s2config-coreのバージョン 1.0.3

【設定ファイル】
--configCustomize.dicon--

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
   "http://www.seasar.org/dtd/components24.dtd"<http://www.seasar.org/dtd/components24.dtd%22>>
<components>
   <!-- コンフィグの読み書きの実装を指定します -->
   <component
class="org.seasar.config.core.config.impl.ConfigPropertiesWriter" instance="prototype"/>
   <component class="org.seasar.config.core.config.impl.ConfigPropertiesReader" instance="prototype"/>
</components>

--config.dicon-

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
   "http://www.seasar.org/dtd/components24.dtd"<http://www.seasar.org/dtd/components24.dtd%22>>
<components>
   <include path="s2config-core.dicon"/>
   <component
       name="configContainer" class="org.seasar.config.core.container.impl.StrictConfigContainer">
       <arg><component class="org.seasar.config.core.container.impl.ConfigContainerImpl" autoBinding="none"/></arg>
       <property name="configName">"hoge"</property>
   </component>
</components>

--hoge.dicon-

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
   "http://www.seasar.org/dtd/components24.dtd"<http://www.seasar.org/dtd/components24.dtd%22>>
<components>
   <include path="config.dicon"/>
   <component class="jp.sample.Hoge">
       <arg>configContainer.findAllConfigValue(@java.lang.String @ class, "hoge1, "デフォルト1")</arg>
<arg>configContainer.findAllConfigValue(@java.lang.String @ class, "hoge2, "デフォルト2")</arg>
        <arg>configContainer.findAllConfigValue(@java.lang.String @ class, "hoge3, "デフォルト3")</arg>
   </component>
</components>

--Hogeクラス-

public class Hoge {

   /**
    * コンストラクタ
    */
   public Hoge(String h1, String h2, String h3) {
       System.out.println(h1 + “,” + h2 + “,” + h3);
   }
}


-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <https://www.seasar.org/archives/seasar-user/attachments/20120612/00d5b6d6/attachment.html>


Seasar-user メーリングリストの案内