[Seasar-user:9199] 継承したクラスとTooManyRegistrationRuntimeException

Nishioka Naoto [E-MAIL ADDRESS DELETED]
2007年 7月 18日 (水) 08:28:47 JST


お世話になっております、にしおかです。

class Aa
class Ab extends Aa

という2つのクラスをdiconで登録した後、
S2Container#getComponent(Aa.class)でAaオブジェクトを取得
使用とした場合、
TooManyRegistrationRuntimeException
が発生してしまいます。

クラスAaから見た場合、instanceof Aaがtrueを戻すのが
Aaのオブジェクト/Abのオブジェクトの2つ存在することが
原因だとは思うのですが、こういう場合、クラスではなく
コンポーネント名でgetComponentを行うしかないのでしょうか?

それとも、他に何か回避方法はありますでしょうか?

以下、テストに使用したソースで、2.4.13でテストしています。

【test3.dicon】
<components>
  <component class="test3.HogeParent">
    <interType>
      <component class="org.seasar.framework.aop.intertype.PropertyInterType"/>
    </interType>
  </component>
  <component class="test3.HogeChild">
    <interType>
      <component class="org.seasar.framework.aop.intertype.PropertyInterType"/>
    </interType>
  </component>
</components>

【HogeParent.java】
package test3;

public class HogeParent {
    public String fuga;
}

【HogeChild.java】
package test3;

public class HogeChild extends HogeParent {
    public String fugaChild;
}

【Hoge.java】
package test3;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class Hoge {
    public static void main(String[] args) throws Exception {
        S2Container container = S2ContainerFactory.create("test3.dicon");
        container.init();
        HogeParent parent = (HogeParent)container.getComponent(HogeParent.class);
        System.out.println(parent);
    }
}

これらを準備し、Hoge.javaを実行すると、

Exception in thread "main" org.seasar.framework.container.TooManyRegistrationRuntimeException:
 [ESSR0045]class test3.HogeParentに複数のコンポーネント(test3.HogeParent, test3.HogeChild)が登録されています
    at org.seasar.framework.container.impl.TooManyRegistrationComponentDefImpl.getComponent(TooManyRegistrationComponentDefImpl.java:45)
    at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:124)
    at test3.Hoge.main(Hoge.java:11)

といった例外が発生してしまいます。

--------------------------------------------------------
Nishioka Naoto


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