[Seasar-user:11052] Re: [Teeda]public transient xxClass xxField;

"TAKEUCHI Shinichi / 竹 "TAKEUCHI Shinichi / 竹
2007年 10月 17日 (水) 10:57:01 JST


お世話になります、竹内です。

  ご回答ありがとうございます。
  public 宣言していたのはPageクラスの共通の親となるAbstractクラス
でして、TakeOver宣言はしていませんでした。親クラスでのPublicは
自動的に引継ぎの対象となってしまうということでしょうか?
  また、引継がない場合は、Desirialize時にS2コンテナが再度
DIしてくれるということですね。

On Tue, 16 Oct 2007 03:00:44 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:

> 小林 (koichik) です.
> 
> Date:    Tue, 16 Oct 2007 01:05:03 +0900
> From:    "TAKEUCHI Shinichi / 竹内 伸一" <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:11011]  [Teeda]public transient xxClass xxField;
> 
> >   HotDeployで実行しているのですが、単にpublic宣言だけですと、
> > ページを遷移する時にNotSerializableExceptionが発生します。
> 
> これは Page クラスの話でしょうか?
> Teeda の状態引継ぎは,デフォルトのスコープでは
> Serializable でないプロパティは引き継がないように
> なっているのですが,シリアライズされてしまうと
> いうことは TakeOver 等,スコープを制御する
> アノテーションを Page クラスの中で指定して
> いるのでしょうか?
> 
> > transient指定を追加すると、ClassNotFoundExceptionが発生し、探して
> > いるクラスがどうもDI/AOPされた拡張後のクラスのようです。
> 
> 今のところ,状態引継ぎの対象から transient
> フィールドを除外するようにはなっていません.
> これについては対応を検討しますが,それが
> 今回の問題の根本ではないように思われます.
> 
> > エラーとなる例1)
> > public KSelectItemHelper kSelectItemHelper;
> > 
> > エラーとなる例2)
> > public transient KSelectItemHelper kSelectItemHelper;
> 
> もし TakeOver アノテーションを使っているなら,
> 上記のフィールドは INCLUDE には含めないように,
> EXCLUDE には含めるようにしてください.
> TakeOver アノテーションが指定された時に
> Serializable でないプロパティを引き継ごうと
> してしまう問題は [TEEDA-384] で修正中です.
> https://www.seasar.org/issues/browse/TEEDA-384
> 
> TakeOver アノテーションを使っていないなら,
> 状況が把握できないので Page クラス全体を
> 見せてください.
> 
> 余談ですが,KSelect〜 のようにクラス名の先頭
> 2 文字がいずれも大文字の場合,コンポーネント名も
> 先頭が大文字となります.
> # JavaBeans の仕様に従っています.
> プロパティ名をコンポーネント名と一致させるなら,
> 
> public KSelectItemHelper KSelectItemHelper;
> 
> となっていないと微妙な問題を生じる場合が
> あるのでご注意ください.
> # プロパティ名とコンポーネント名が一致してなくても
> # 型による DI でうまくいく場合も多いですが.
> 
> > 動作する例)
> > private transient KSelectItemHelper kSelectItemHelper;
> > public void setKSelectItemHelper(KSelectItemHelper ikSelectItemHelper){
> > 	this.kSelectItemHelper = ikSelectItemHelper;
> > }
> 
> こちらは getter メソッドがないために引継ぎの
> 対象になってないようですね.
> public field では read only/write only を
> 表現できない (アノテーション使うとかすれば
> 不可能ではないけど未サポート) ので,状況に
> よってはgetter/setter メソッドを使う方がいい
> 場合もあるかもしれません.
> # 今回のケースは public field で大丈夫な
> # はずですが.
> 
> 
> -- 
> <component name="koichik">
>     <property name="fullName">"Koichi Kobayashi"</property>
>     <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>     <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 

-- 
TAKEUCHI Shinichi / 竹内 伸一 <[E-MAIL ADDRESS DELETED]>




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