[Seasar-user:17483] Re: [S2 Container, Tiger 2.4.36] S2JUnit4 + Cool Deployモードでテストが失敗してしまう問題について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 5月 19日 (火) 16:00:19 JST
小林 (koichik) です.
Date: Tue, 19 May 2009 15:17:03 +0900
From: Toshiaki Takashima <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17480] Re: [S2 Container, Tiger 2.4.36] S2JUnit4 + Cool Deployモードでテストが失敗してしまう問題について
> S2JUnit4を利用しない場合のCool Deploy(mainメソッド
> でSingletonS2ContainerFactory.init()を実行)は問題
> なく成功することを確認しているのですが、同じ問題
> (コンテナ初期化前のコンポーネント取得による処理失敗)
> が発生しないのは、なぜなのでしょうか?
通常は app.dicon がルートのコンテナに読み込まれ,
<include> の最後に COOL deploy の自動登録を行う
cooldeploy-autoregister.dicon の <include> が
追加されるので,
<include path="s2jdbc-internal.dicon"/>
<include path="cooldeploy-autoregister.dicon"/>
と書いたかのようになります.
この場合,s2jdbc-internal.dicon が初期化され,
EntityMetaFactory が登録された後に COOL deploy の
自動登録が行われるので,EntityUtil がロードされた
時点で EntityMetaFactory を取得することが出来ます.
しかし S2Unit4 ではルートのコンテナは対応する
dicon を持っていない空のコンテナで,作成された
時点で cooldeploy-autoregister.dicon の
<include> が追加され,その後に app.dicon の
<include> が追加されます.そのため,
<include path="cooldeploy-autoregister.dicon"/>
<include path="app.dicon"/>
と書いたかのようになります.
そのため,COOL deploy の自動登録が行われる
時点では app.dicon および s2jdbc-internal.dicon は
初期化されていません.
s2jdbc-internal.dicon は初期化時に AutoRegister で
EntityMetaFactory を自動登録するので,この時点では
まだコンテナに登録されていないことになります.
s2junit4.dicon で app.dicon をインクルードせずに,
@RootDicon アノテーションで app.dicon を指定すれば
[Seasar-user:17476] や [Seasar-user:17481] の
対応をしなくても動作するかもしれません.
http://s2container.seasar.org/2.4/ja/S2JUnit4.html#rootDiconAnnotation
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内