[Seasar-user:1656] Re: S2Unit で同一インターフェースを持つ複数のコンポーネントの使用について
his@hamal.freemail.ne.jp
his
2005年 3月 21日 (月) 18:11:35 JST
古賀です。
すがさん、ひがさんありがとうございました。
> TooManyRegistrationRuntimeException は、コンポーネント間で発生している
> ということはありませんか?
> その interface を自動で受け取るようになっているコンポーネントが登録
> されている場合、通常の利用と同じで、例外が発生します。
> もしそうなら、マニュアル設定すれば回避できます。
>
原因はこれでした。
DICONで以下のコンポーネントを登録していました。
1.ArrayList
2.ArrayList
3.上のコンポーネントのうちいずれか(もしくは両方)を自動取得するコンポーネント
で、3のコンポーネントを取得したときにエラーが発生していました。
以下の内容で上の現象を確認しました。
こういう場合ではコンポーネントの自動取得できないのでしょうか?
【DICON】
<component name="list1" class="java.util.ArrayList" instance="request"/>
<component name="list2" class="java.util.ArrayList" instance="request"/>
<component name="pluralList1" class="examples.PluralList1Impl" instance="request"/>
【pluralList1】
public class PluralList1Impl implements PluralList1 {
private List list1;
public void hoge() { list1.add("要素1"); }
public List getList1() { return list1; }
public void setList1(List list1) { this.list1 = list1;}
}
===
古賀久司 (Hisashi KOGA)
e-mail : his @ hamal.freemail.ne.jp
suga <suga_k @ rmail.plala.or.jp>さん:
> suga です。
>
> On Sun, 20 Mar 2005 19:14:02 +0900
> his @ hamal.freemail.ne.jp wrote:
>
> > S2Unitを使用してテストする際に、
> > 同一インターフェースを複数のコンポーネントとして登録すると、
> > TooManyRegistrationRuntimeExceptionが発生してしまいます。
> > この現象を回避する方法はあるのでしょうか?S2のバージョンは2.2.3です。
> >
> >
> > 1.TestCaseのstaticでもないfinalでもないフィールドがあり、
> > その名前からアンダースコア(_)を除いた名前のコンポーネントが
> > コンテナに存在すれば自動的にセットされます。
> > 2.TestCaseのフィールドにインターフェース型の変数が定義されていれば
> > S2Containerから取り出して自動的にセットされます。
> >
> > と、サイトのドキュメントにありますが、名前を併せても同型のインターフェースでは
> > 無理のようです。
>
> CVS 最新版で動作確認しました。
> ちゃんと動作しますね。
>
> IBar という interface を実装している BarOne, BarTwo があり、dicon には
> 以下のように記述。
> <component name="bar1" class="test.BarOne" />
> <component name="bar2" class="test.BarTwo" />
>
> TestCase ではフィールドに宣言
> private IBar bar1;
> private IBar bar2;
>
> これで正しくインジェクションされます。
>
> public void setUp() {
> include("Test.dicon");
> }
> public void testHoge() {
> System.out.println(bar1.getClass().getName());
> System.out.println(bar2.getClass().getName());
> }
> 結果
> test.BarOne
> test.BarTwo
>
>
>
> TooManyRegistrationRuntimeException は、コンポーネント間で発生している
> ということはありませんか?
> その interface を自動で受け取るようになっているコンポーネントが登録
> されている場合、通常の利用と同じで、例外が発生します。
> もしそうなら、マニュアル設定すれば回避できます。
>
> --------------------------------------------------------------
> e-mail: suga_k @ rmail.plala.or.jp
> suga
> --------------------------------------------------------------
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ lists.sourceforge.jp
> http://lists.sourceforge.jp/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内