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