[Seasar-user:7541] Re: SMART deploy と app.dicon でのコンポーネントについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 5月 8日 (火) 17:30:13 JST


小林 (koichik) です.

Date:    Tue, 08 May 2007 16:32:13 +0900
From:    "o.h." <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:7540] Re: SMART deploy と app.dicon でのコンポーネントについて

> 以下結果です.
> #これでいいんでしょうか?

ありがとうございました.
おかげで状況が理解できました.

今回の現象は S2TestCase が SMART deploy を
十分にサポートできていなかったことが原因です.

S2TestCase を使用すると,S2TestCase は空っぽの
コンテナをルートとして作成します.
setUp() メソッド等の中で include() メソッドを
使ってインクルードした dicon ファイルはルートの
コンテナの子コンテナに読み込まれます.
ですから,

ルート -> app.dicon

というコンテナ階層となります.
Web アプリケーション等での状況と異なり,
app.dicon を読み込んだコンテナがルートでは
ないことがポイントです.

一方,HOT/WARM deploy の場合,自動登録される
コンポーネントはルートのコンテナに登録されます.
ですから,問題の COMTableDao は app.dicon を
読み込んだコンテナではなく,S2TestCase が作成した
ルートコンテナに登録されます.

しかし,S2 の場合,あるコンポーネントから
見えるのはそのコンポーネントと同じコンテナまたは
その子孫コンテナに登録されているコンポーネント
のみとなります.

そのため,app.dicon に定義されている
コンポーネントからはルートコンテナに
登録されているコンポーネントは見えません.

そのため,WARM deploy によってコンポーネント
定義が作成されても,app.dicon に定義されている
コンポーネントからは見えず,同じコンポーネントが
必要となると,再び WARM deploy によって
コンポーネント定義が作成され...

という繰り返しで同じコンポーネントが何度も
登録されてしまったようです.

そしてテストクラスからはルートコンテナ以下の
コンポーネントが全て見えるため,TooMany〜に
なってしまった,というのが今回の現象の
全貌になります.


対応としては,app.dicon をルートのコンテナに
読み込ませる必要があります.
そこで,S2(Framework)TestCase のサブクラスで

public String getRootdiconXxx();

# Xxx は testXxx() メソッドの Xxx
または

public String getRootDicon();

というメソッドがある場合はその戻り値の
ルートコンテナが読み込む dicon ファイルとして
使用することにします.

テストクラス全体で app.dicon をルートにする場合は
テストクラスに

public String getRootDicon() {
  return "app.dicon";
}

というメソッドを用意してください.

以下に対応した SNAPSHOT を置いたので,
こちらでご確認いただけないでしょうか.

http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.4.13-rc2-SNAPSHOT/s2-framework-2.4.13-rc2-20070508.081624-1.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-extension/2.4.13-rc2-SNAPSHOT/s2-extension-2.4.13-rc2-20070508.081624-1.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-tiger/2.4.13-rc2-SNAPSHOT/s2-tiger-2.4.13-rc2-20070508.081817-1.jar

よろしくお願いします.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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