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