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