[Seasar-user:451] Re: コンストラクタによるコンポーネント生成で問題

B gluegent.com Masataka Kurihara kurihara
2004年 3月 9日 (火) 15:20:26 JST


栗原です。

> プロパティのメッセージが{0]のように}の閉じ忘れでした。(^^;
> 後、***AssemblerでThrowableで受けて、Illegal*RuntimeExceptionを
> 投げ返していたのを、ComponentNotFoundRuntimeExceptionだけを
> キャッチするように変えようと思います。

  リソースファイルを手元で独自に直してみたのですが、うまくない
ようで例外とまりませんでした。EA3まで時間あくようでしたら、修正
方法ご指示いただけませんか?

  追加で、問題判別できてない現象ですが、報告いたします。継承関係に
ある2つのインターフェイスについて、それぞれの実装クラスを設定登録
して、それぞれgetComponent()します。子インターフェイスは正常に呼び
出せますが、親インターフェイスは、例外がでます。前記のようにリソー
スを直せてないので、複合的な前回同様のエラー表示になりますが、きっ
かけはこのインターフェイス呼び出しのようです。以下にソースを抜粋し
ました。
・SpeakerImpl implements Speaker
・SpeakerExImpl extends SpeakerImpl implements SpeakerEx
・SpeakerEx extends Speaker
という関係性です。基本的に、TooManyRegistrationRuntimeException が
出ているようです。こういう場合に、どのコンポーネントを返すか知りた
くてやってみたのですが、なにも返らずに例外でした。これはそのような
仕様とも思えますが、いかがですか?

#インターフェイス
public interface Speaker {
  public String say();
}

public interface SpeakerEx extends Speaker {
}

#実装クラス
public class SpeakerImpl implements Speaker {
  private String name;
  public SpeakerImpl(String name) {
    this.name = name;
  }
  public String say() {
    return "こんにちは、" + name + "さん!";
  }
}

public class SpeakerExImpl extends SpeakerImpl implements SpeakerEx {
  public SpeakerExImpl(String name) {
    super(name);
  }
}

#設定
<components>
  <component name="testAdvice"
    class="org.seasar.extention.TestAdvice"/>
  <component class="org.seasar.extention.SpeakerExImpl">
    <arg>'傑享'</arg>
    <aspect>testAdvice</aspect>
  </component>
  <component class="org.seasar.extention.SpeakerImpl">
    <arg>'栗原'</arg>
    <aspect>testAdvice</aspect>
  </component>
</components>

#コンテナ生成‐クライアントアクセス
public class Bootstrap {
  public static void main(String[] args) {
    S2Container container =
      S2ContainerFactory.create("org.seasar.extention.seasar");
    // こっちはOK
    Speaker speaker = (Speaker)container.getComponent(SpeakerEx.class);
    speaker.say();
    // こっちは例外
    speaker = (Speaker)container.getComponent(Speaker.class);
    speaker.say();
  }
}


--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--





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