[Seasar-user:17480] Re: [S2 Container, Tiger 2.4.36] S2JUnit4 + Cool Deployモードでテストが失敗してしまう問題について
Toshiaki Takashima
[E-MAIL ADDRESS DELETED]
2009年 5月 19日 (火) 15:17:03 JST
中村様
高島です。ご教授ありがとうございました。
ご回答について、質問させて頂いてよろしいでしょうか?
> Cool deloyでは、コンポーネント対象のクラスかどうかを確認するために
> クラスをチェックしますが、その際にはクラスをロードしますので、
> static初期化子もそこで実行されます。
> 今回のケースでは、S2JUnit4で開始されたコンテナの初期化中にHogeUtilが
> ロードされ、HogeUtilのstatic初期化子が評価されます。
> つまり、コンテナの初期化が終わる前にコンポーネントの取得が行われています。
S2JUnit4を利用しない場合のCool Deploy(mainメソッド
でSingletonS2ContainerFactory.init()を実行)は問題
なく成功することを確認しているのですが、同じ問題
(コンテナ初期化前のコンポーネント取得による処理失敗)
が発生しないのは、なぜなのでしょうか?
以上よろしくお願いします。
> 中村(taedium)です。
>
> > 問題発生状況の詳細については後述しますが、本問題について、
> >
> > 1.こちらのモジュール構成がSMART Deploy機能を利用する
> > 上で好ましくない構成となっている
> >
> > 2.S2JUnit4の使い方(機能制限?)を良く理解していない
> >
> > のいづれによるものなのか判断できませんでしたので、アドバイス
> > を頂けないでしょうか?
>
> Cool deloyでは、コンポーネント対象のクラスかどうかを確認するために
> クラスをチェックしますが、その際にはクラスをロードしますので、
> static初期化子もそこで実行されます。
> 今回のケースでは、S2JUnit4で開始されたコンテナの初期化中にHogeUtilが
> ロードされ、HogeUtilのstatic初期化子が評価されます。
> つまり、コンテナの初期化が終わる前にコンポーネントの取得が行われています。
>
> static初期化子の使用はやめて
> HogeUtilをこんな感じにしてはどうでしょうか。
>
> public class HogeUtil {
>
> public static EntityMetaFactory getInstance() {
> return SingletonS2Container.getComponent("entityMetaFactory");
> }
>
> public static void main(String[] args) {
> SingletonS2ContainerFactory.init();
> }
> }
> --
> Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内