[Seasar-user:17482] Re: [S2 Container, Tiger 2.4.36] S2JUnit4 + Cool Deployモードでテストが失敗してしまう問題について

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2009年 5月 19日 (火) 15:51:52 JST


中村(taedium)です。

> S2JUnit4を利用しない場合のCool Deploy(mainメソッド
> でSingletonS2ContainerFactory.init()を実行)は問題
> なく成功することを確認しているのですが、同じ問題
> (コンテナ初期化前のコンポーネント取得による処理失敗)
> が発生しないのは、なぜなのでしょうか?

mainメソッドから実行した場合、S2Containerの初期化処理は
EntityUtilのstatic初期化子で行われるからです。

一方、S2JUnit4から呼んだ場合は、S2Containerの初期化処理は、
S2JUnit4により行われます。
この場合、EntityUtilのstatic初期化子はS2Containerの初期化処理中
に呼び出されることになります。
(Cool Deployの処理が、対象コンポーネントかチェックするために
EntityUtilクラスをロードするため。その結果static初期化子が評価される)
EntityUtilのstatic初期化子にもS2Containerの初期化処理がありますが、
すでに初期処理中であるため、そこでは実質的に何も行われません。
そのすぐ後、entityMetaFactoryのコンポーネントを取得しようとしますが、
まだ登録されていないためエラーとなります。

問題は、S2Containerの初期化処理中にコンポーネントを
取得しようとするコードが実行されてしまうことにあります。

-- 
Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>



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