[Seasar-user:456] Re: コンストラクタによるコンポーネント生成で問題
B isid.co.jp Yasuo Higa
higa
2004年 3月 10日 (水) 16:34:17 JST
<[E-MAIL ADDRESS DELETED]> の、
"[Seasar-user:451] Re: コンストラクタによるコンポーネント生成で問題" において、
"Masataka Kurihara <[E-MAIL ADDRESS DELETED]>"さんは書きました:
ひがです。
> 栗原です。
>
> > プロパティのメッセージが{0]のように}の閉じ忘れでした。(^^;
> > 後、***AssemblerでThrowableで受けて、Illegal*RuntimeExceptionを
> > 投げ返していたのを、ComponentNotFoundRuntimeExceptionだけを
> > キャッチするように変えようと思います。
>
> リソースファイルを手元で独自に直してみたのですが、うまくない
> ようで例外とまりませんでした。EA3まで時間あくようでしたら、修正
> 方法ご指示いただけませんか?
>
修正したメッセージ用のプロパティを添付します。
org.seasar.framework.util.messageのファイルを置き換えてください。
> 追加で、問題判別できてない現象ですが、報告いたします。継承関係に
> ある2つのインターフェイスについて、それぞれの実装クラスを設定登録
> して、それぞれgetComponent()します。子インターフェイスは正常に呼び
> 出せますが、親インターフェイスは、例外がでます。前記のようにリソー
> スを直せてないので、複合的な前回同様のエラー表示になりますが、きっ
> かけはこのインターフェイス呼び出しのようです。以下にソースを抜粋し
> ました。
> ・SpeakerImpl implements Speaker
> ・SpeakerExImpl extends SpeakerImpl implements SpeakerEx
> ・SpeakerEx extends Speaker
> という関係性です。基本的に、TooManyRegistrationRuntimeException が
> 出ているようです。こういう場合に、どのコンポーネントを返すか知りた
> くてやってみたのですが、なにも返らずに例外でした。これはそのような
> 仕様とも思えますが、いかがですか?
>
これは、仕様です。
SpeakerImpl SpeakerExImplがどちらもSpeakerをimplementsしている
ため、SpeakerでgetComponent()すると複数のコンポーネントが
対象になってしまうためです。
> #インターフェイス
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> http://lists.sourceforge.jp/mailman/listinfo/seasar-user
>
-------------- next part --------------
平文でない添付ファイルを取り除きました...
ファイル名: SSRMessages_ja.properties
型: application/octet-stream
サイズ: 6486 バイト
説明: 無し
URL: http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20040310/5042865b/SSRMessages_ja-0001.obj
-------------- next part --------------
平文でない添付ファイルを取り除きました...
ファイル名: SSRMessages.properties
型: application/octet-stream
サイズ: 4664 バイト
説明: 無し
URL: http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20040310/5042865b/SSRMessages-0001.obj
Seasar-user メーリングリストの案内