[Seasar-user:11012] Re: [Teeda]public transient xxClass xxField;
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 10月 16日 (火) 03:00:44 JST
小林 (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 メーリングリストの案内