[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 メーリングリストの案内