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