[Seasar-user:18581] Re: 【S2Config】環境設定に依存した設定情報の読み込みがうまくいかない
Junichi Kato
[E-MAIL ADDRESS DELETED]
2009年 10月 6日 (火) 08:22:14 JST
黒瀬さん
加藤です。
お世話になっています。
いただいたサンプルで現象を把握できました。ありがとうございます。
原因はinstance="prototype"の指定がないため、初期化時に子どもの設定を管理するコンフィグコンテナが同一インスタンスで構築されていたためでした。instance="prototype"にするのはs2configの仕様です。
これは、こちらのs2config-exampleとドキュメント記述漏れでした。すみません。修正しておきます。
instance="prototype"を追記していただければ、この問題は回避できるのでそのようにお願いします。
<component class="org.seasar.config.core.container.impl.ConfigContainerImpl"
instance="prototype">
<property name="configName">"log4j"</property>
<initMethod name="loadToBeans"/>
</component>
よろしくお願いいたします。
2009年10月5日13:53 黒瀬健二 <[E-MAIL ADDRESS DELETED]>:
> 加藤さん
>
>
>
> 黒瀬です。お世話になっております。
> s2config-exampleをベースに、現象が再現する編集を加えた
> プロジェクトを添付いたします。
>
> 編集点は以下になります。
>
> ・src/resources/log4j.propertiesに以下を追記
> env=test
> ・src/resources/log4j_test.propertiesを追加
>
> 上記の変更のみで、Log4JConfigTestをJUnitで実行すると
> 処理が返ってこなくなります。
> (マシンの挙動からすると無限ループに陥っているように見えます。)
>
> ちなみに、Log4JConfigクラスをプロジェクトから削除し
> Log4JConfigTestクラスにコメントアウトしてある下記のメソッドを
> 有効にして実行すると期待通りの挙動をします。
>
> @Test
> public void test2() {
> ConfigContainer config = SingletonS2Container
> .getComponent(ConfigContainer.class);
> System.out.println(config.getConfigValue(String.class,
> "log4j.category.org.seasar"));
>
> ⇒期待通りにlog4j_test.propertiesの設定値「INFO, C」が取得できる。
> }
>
> もし私のほうに認識違いがあればご指摘頂けると幸いです。
> 以上、よろしくお願い致します。
>
> 2009年10月2日22:50 Junichi Kato <[E-MAIL ADDRESS DELETED]>:
>> 黒瀬さん
>> 加藤です。
>>
>> お待たせしてます。やっと時間がとれたので確認させてください。
>>
>> 2009年9月17日13:40 黒瀬健二 <[E-MAIL ADDRESS DELETED]>:
>>> お世話になっております。黒瀬と申します。
>>>
>>>
>>> S2Configを利用させて頂いています。
>>> 環境依存に対応した設定情報を扱いたかったので、マニュアルを
>>> 参照して動作確認を行ったのですが、うまく動作しない場合が
>>> ありました。
>>>
>>> コンフィグコンテナのみの利用で動作させると問題ないのですが
>>> コンフィグクラスを定義すると、当該クラスのコンポーネント定義
>>> から処理が返ってこなくなってしまいました。
>>>
>>> 関連ファイルの記述を下記に記します。
>>> (S2Configの設定自体はマニュアル通りに行っております。)
>>>
>>> ■設定ファイル1:app.properties
>>> env=test
>>> sample1=hoge1
>>> sample2=hoge2
>>>
>>> ■設定ファイル2:app_test.properties
>>> sample1=hoge11111
>>> sample2=hoge22222
>>>
>>> ■コンフィグクラス:AppConfigクラスの定義
>>>
>>> @Config(name = "app")
>>> public class AppConfig {
>>>
>>> @ConfigKey(name = "sample1", readOnly = true)
>>> public String sample1;
>>>
>>> @ConfigKey(name = "sample2", readOnly = true)
>>> public String sample2;
>>> }
>>>
>>> ■メインプログラム
>>> public static void main(String[] args) {
>>>
>>> SingletonS2ContainerFactory.init();
>>> ConfigContainer config = SingletonS2Container
>>> .getComponent(ConfigContainer.class);
>>> System.out.println(config.getConfigValue(String.class, "sample1"));
>>> }
>>>
>>> ■上記メインプログラムを実行した場合のログ
>>> 2009-09-17 12:43:54,125 [main] DEBUG org.seasar.framework.env.Env -
>>> 環境変数#Envにファイル(env.txt)から値(ct)が設定されました
>>> <<<<<<<< 途中省略 >>>>>>>>
>>> 2009-09-17 12:43:54,781 [main] DEBUG
>>> org.seasar.framework.container.util.S2ContainerUtil -
>>> クラス(org.s2.config.test.config.AppConfig[appConfig])のコンポーネント定義を登録します
>>> (ここから処理が返ってこなくなる)
>>
>> 上記のConfigContainerに対応するdicon上での定義はありますでしょうか?
>>
>>>
>>> ※ちなみに、AppConfigクラスの定義をプロジェクトから削除してプログラムを
>>> 実行すると、test環境の設定が適用され正常に「hoge11111」が表示されます。
>>
>> ちなみに、config.getConfigValue(String.class, "sample1")は、常にhoge1を返すはずなんですが、、、
>> envで上書きしたプロパティを取得するには、findAllConfigValueメソッドになります。
>>
>> 申し訳ありませんが、s2config-exampleを基に、再現する簡単なソース一式を送ってもらえないでしょうか?
>> それで確認したほうが早いと思います。
>> よろしくお願い致します。
>>
>>>
>>> 実行環境については以下の通りです。
>>> JDK: 1.6.0_14
>>> S2: 2.4.38 (Smart Deploy)
>>> S2Config: 1.0.1
>>>
>>> ご確認して頂けると幸いです。
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
--
/**
* name : Junichi Kato
* email : [E-MAIL ADDRESS DELETED]
*
* blog : http://d.hatena.ne.jp/j5ik2o/
*
* commiting projects :
* http://jiemamy.org/
* http://s2chronos.sandbox.seasar.org/
* http://s2config.sandbox.seasar.org/
*/
Seasar-user メーリングリストの案内