[seasar-dev:555] Re: [S2JFace]TableItemのtextプロパティをBeanDescから取得できない

KOMORI Yusuke y-komori @ nifty.ne.jp
2006年 10月 5日 (木) 00:10:39 JST


bskuronekoさん

 小森です。

 BeanDescImplの件、パフォーマンス的には問題なかったのですが、仕様上別の
問題があることを、小林さんから指摘いただきました。

 以下、引用です。

> この対応をした場合,もし
> 
> public class Foo {
>     protected URL url;
>     public URL getUrl() {
>         return url;
>     }
>     public void setUrl(URL url) {
>         this.url = url;
>     }
>     public void setUrl(String url) {
>         this.url = new URL(null, url, new MyStreamHandler());
>     }
> }
> 
> というクラスがあって,
> 
> <component class="Foo">
>     <property name="url">"http://foo.com"</property>
> </component>
> 
> という dicon があった場合,利用者は setUrl(String) が
> 呼び出されることを期待してしまうと思うのですが,実際には
> setUrl(URL) が呼び出されることになります.
> これは利用者には気づきにくい落とし穴を用意することに
> ならないでしょうか?
> 
> 現在の仕様は url がプロパティとして認められないために
> 確実に例外がスローされるので,URL の設定が必要なら
> setUrl(URL) とは別に setUrlAsString(String) などを
> 用意して回避することになります.
> # S2Remoting がまさにそうしてます.
> 
> 今回の要望は S2Container による DI のためではなく,
> S2JFace が SWT (JFace) コンポーネントを組み立てる際に
> BeanDesc を使用していることから出てきてますよね?
> であるなら,BeanDesc を変更するのではなく,SwtDesc とか
> 別途作ったほうが安全ではないかと思ったりします.
> # EJB3Desc とか EntityDesc とか,用途に特化したものは
> # 他にもあります.

 今回のパターンだと、SwtDesc までは作らなくてもよいような気がするのです
が、ひとまずS2JFace側での対処としていただけないでしょうか。

 せっかく直していただいたのにすみませんが、よろしくお願いします。

On Wed, 04 Oct 2006 00:07:59 +0900, KOMORI Yusuke <y-komori @ nifty.ne.jp> wrote:

> bskuroneko さん
> 
>  小森です。
>  ありがとうございます!
> 
>  こちらでパフォーマンス計測してみますね。
> 
> On Tue, 3 Oct 2006 22:15:57 +0900, bskuroneko <bskuroneko @ gmail.com> wrote:
> 
> > 小森さん。
> > 
> > bskuronekoです。
> > 
> > BeanDescImpl.java528行目に試しに入れていた戻り型void判定が残っていました。
> > 今回の対応では必要ありませんので削除してください。
> > 
> > 
> > 06/10/02 に bskuroneko<bskuroneko @ gmail.com> さんは書きました:
> > > 小森さん。
> > >
> > > bskuronekoです。
> > >
> > > BeanDescImplとその単体テストの修正版を添付します。
> > > 単体テストはとりあえずカバレッジを見て通してある程度です。
> > > ただClass#getMethodsの出現順に左右されてしまうので、
> > > jdkのバージョンなど環境によってカバレッジをカバーできないかもしれません。
> > >
> > > 確かにパフォーマンスが気になりますね。
> > > 計測して遅ければ無理に入れていただくてもかまいません。
> > > # S2JFace側で対処してもそれほど面倒ではなさそうなので。
> > >
> > > よろしくお願いします。
> > >
> > >
> > > 06/10/02 に KOMORI Yusuke<y-komori @ nifty.ne.jp> さんは書きました:
> > > > bskuroneko さん
> > > >
> > > > 小森です。
> > > >
> > > > ひがさんに確認してみましたが、パフォーマンス劣化が心配とのことですので、
> > > > 修正案のコードがあれば送っていただけませんか?
> > > >
> > > > パフォーマンス計測してみて問題がなければそれで、駄目そうならばS2JFace
> > > > 側で対処としたいと思いますが、どうでしょうか?
> > > >
> > > > On Sun, 1 Oct 2006 23:52:27 +0900, bskuroneko <bskuroneko @ gmail.com> wrote:
> > > >
> > > > > 小森さん。
> > > > >
> > > > > bskuronekoです。
> > > > >
> > > > > > > > 原因を調べたところ、TableItemが引数1つのsetTextメソッドを
> > > > > > > > 複数もっているためにBeanDescImplがプロパティとして扱ってくれず、
> > > > > > > > BeanDesc#getPropertyDescがPropertyNotFoundRuntimeExceptionを投げます。
> > > > > >
> > > > > > なるほど、steText(String) と setText(int, String) ですね。
> > > > >
> > > > > たぶんsetText(String)とsetText(String[])です。
> > > > > 引数が2つのものはセッターとして扱っていないみたいなので。
> > > > >
> > > > > > たぶん問題ないような気がするんでが、BeanDescImplはS2Containerの中でも
> > > > > > 根幹の部分なので、ほんとうに問題がないかどうか他のコミッタの方にもちょっ
> > > > > > と相談してみますね。
> > > > >
> > > > > よろしくお願いします。m(_ _)m
> > > > >
> > > > >
> > > > > 06/10/01 に KOMORI Yusuke<y-komori @ nifty.ne.jp> さんは書きました:
> > > > > > bskuronekoさん
> > > > > >
> > > > > > 小森です。
> > > > > >
> > > > > > > > 原因を調べたところ、TableItemが引数1つのsetTextメソッドを
> > > > > > > > 複数もっているためにBeanDescImplがプロパティとして扱ってくれず、
> > > > > > > > BeanDesc#getPropertyDescがPropertyNotFoundRuntimeExceptionを投げます。
> > > > > >
> > > > > > なるほど、steText(String) と setText(int, String) ですね。
> > > > > >
> > > > > > > > この型チェック部分を以下のような仕様に変更するのは問題があるでしょうか?
> > > > > > > > ・引数1つのsetterが複数存在し、そのうち1つはgetterの戻り値と同じ型
> > > > > > > > →getter,setterともに存在するプロパティ
> > > > > >
> > > > > > たぶん問題ないような気がするんでが、BeanDescImplはS2Containerの中でも
> > > > > > 根幹の部分なので、ほんとうに問題がないかどうか他のコミッタの方にもちょっ
> > > > > > と相談してみますね。
> > > > > >
> > > > > > On Fri, 29 Sep 2006 23:24:08 +0900, bskuroneko <bskuroneko @ gmail.com> wrote:
> > > > > >
> > > > > > > 小森さん。
> > > > > > >
> > > > > > > bskuronekoです。
> > > > > > >
> > > > > > > 変更後の仕様案に抜けがあったので一つ追加です。
> > > > > > > ・setterが複数あるがgetterはない
> > > > > > > →invalidPropertyでNG
> > > > > > >
> > > > > > > 06/09/29 に bskuroneko<bskuroneko @ gmail.com> さんは書きました:
> > > > > > > > 小森さん。
> > > > > > > >
> > > > > > > > bskuronekoです。
> > > > > > > >
> > > > > > > > 小森さんに相談すべきか、直接[S2Container]としてメールを投げるか
> > > > > > > > 迷ったのですが、ひとまず小森さんに相談します。
> > > > > > > > #小森さんは s2containerのコミッタでもありますしね(^^;
> > > > > > > >
> > > > > > > > org.eclipse.swt.widgets.TableItemのtextプロパティを
> > > > > > > > org.seasar.jface.renderer.RendererSupportUtilを使ってセットしようとしても、
> > > > > > > > textプロパティが見つからず、エラーになります。
> > > > > > > >
> > > > > > > > 原因を調べたところ、TableItemが引数1つのsetTextメソッドを
> > > > > > > > 複数もっているためにBeanDescImplがプロパティとして扱ってくれず、
> > > > > > > > BeanDesc#getPropertyDescがPropertyNotFoundRuntimeExceptionを投げます。
> > > > > > > >
> > > > > > > > 今のBeanDescImplの実装を見ると以下のような仕様に見えます。
> > > > > > > > ・getterのみ存在
> > > > > > > > →getterのみのプロパティ
> > > > > > > > ・getterがなく、引数1つのsetterが1つだけ存在
> > > > > > > > →setterのみのプロパティ
> > > > > > > > ・getterとsetterの型が違う
> > > > > > > > →invalidPropertyとなりNG
> > > > > > > > ・引数1つのsetterが複数存在(getterの有無は関係なし)
> > > > > > > > →同じ型ではありえないので結果的にinvalidPropertyとなりNG
> > > > > > > >
> > > > > > > > この型チェック部分を以下のような仕様に変更するのは問題があるでしょうか?
> > > > > > > > ・引数1つのsetterが複数存在し、そのうち1つはgetterの戻り値と同じ型
> > > > > > > > →getter,setterともに存在するプロパティ
> > > > > > > > ・getterとsetter全ての型が違う
> > > > > > > > →getterのみのプロパティ
> > > > > > > > (こちらはinvalidPropertyでNGという仕様でもS2JFaceは困りません)
> > > > > > > >
> > > > > > > > 問題がなければ仕様を変更していただけるとありがたいところです。
> > > > > > > > 実装はある程度見えているので私が修正して送って確認していただく形でもかまいません。
> > > > > > > >
> > > > > > > > 仕様変更に問題があるならS2JFace側で対処しようと思っています。
> > > > > > > >
> > > > > > > > 確認よろしくお願いします。
> > > > > > > >
> > > > > > > _______________________________________________
> > > > > > > Seasar-dev mailing list
> > > > > > > Seasar-dev @ ml.seasar.org
> > > > > > > https://www.seasar.org/mailman/listinfo/seasar-dev
> > > > > >
> > > > > > ----------------------------------------------
> > > > > >  小森 裕介 / Yusuke Komori
> > > > > >
> > > > > >  E-Mail : y-komori @ nifty.ne.jp
> > > > > >    Blog : http://d.hatena.ne.jp/y-komori/
> > > > > >     URL : http://www.littleforest.jp/
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > Seasar-dev mailing list
> > > > > > Seasar-dev @ ml.seasar.org
> > > > > > https://www.seasar.org/mailman/listinfo/seasar-dev
> > > > > >
> > > > > _______________________________________________
> > > > > Seasar-dev mailing list
> > > > > Seasar-dev @ ml.seasar.org
> > > > > https://www.seasar.org/mailman/listinfo/seasar-dev
> > > >
> > > > ----------------------------------------------
> > > >  小森 裕介 / Yusuke Komori
> > > >
> > > >  E-Mail : y-komori @ nifty.ne.jp
> > > >    Blog : http://d.hatena.ne.jp/y-komori/
> > > >     URL : http://www.littleforest.jp/
> > > >
> > > >
> > > > _______________________________________________
> > > > Seasar-dev mailing list
> > > > Seasar-dev @ ml.seasar.org
> > > > https://www.seasar.org/mailman/listinfo/seasar-dev
> > > >
> > >
> > >
> > >
> > _______________________________________________
> > Seasar-dev mailing list
> > Seasar-dev @ ml.seasar.org
> > https://www.seasar.org/mailman/listinfo/seasar-dev
> 
> ----------------------------------------------
>  小森 裕介 / Yusuke Komori
> 
>   E-Mail : y-komori @ nifty.ne.jp
>     Blog : http://d.hatena.ne.jp/y-komori/
>      URL : http://www.littleforest.jp/
> 
> 
> _______________________________________________
> Seasar-dev mailing list
> Seasar-dev @ ml.seasar.org
> https://www.seasar.org/mailman/listinfo/seasar-dev

----------------------------------------------
 小森 裕介 / Yusuke Komori

  E-Mail : y-komori @ nifty.ne.jp
    Blog : http://d.hatena.ne.jp/y-komori/
     URL : http://www.littleforest.jp/




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