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