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

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 10月 17日 (水) 15:00:04 JST


小林 (koichik) です.

Date:    Wed, 17 Oct 2007 10:57:01 +0900
From:    "TAKEUCHI Shinichi / 竹内 伸一" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11052] Re: [Teeda]public transient xxClass xxField;

>   public 宣言していたのはPageクラスの共通の親となるAbstractクラス
> でして、TakeOver宣言はしていませんでした。

そうでしたか.

> 親クラスでのPublicは
> 自動的に引継ぎの対象となってしまうということでしょうか?

そんなことはないです.

>   また、引継がない場合は、Desirialize時にS2コンテナが再度
> DIしてくれるということですね。

ちょっと違います.
Page クラス自体はシリアライズ・デシリアライズの
対象ではなく,そのプロパティ (public field 含む) が
対象です.
ただし,Serializable でないプロパティは対象外です.
# プロパティに設定されているオブジェクトではなく
# プロパティの型で判断しているので,KSelectItemHelper が
# インタフェースの場合はこの KSelectItemHelper が
# Serializable を extends していないと対象になって
# しまいます.

Page クラスはリクエストの度に新しいインスタンスが
コンテナから取得されます.
Helper などはその際に DI されます.
なので,Page クラスは Serializable にする必要は
ありません.
# もし Serializable にしているなら外してください.

ひとまず,

[Seasar-user:11011]
>   HotDeployで実行しているのですが、単にpublic宣言だけですと、
> ページを遷移する時にNotSerializableExceptionが発生します。そこで、

この時のスタックトレースも見せてください.
# transient が無いケースです.
# 上の数行ではなく,丸ごと全部お願いします.

できれば,現可能な最低限のサンプルを提供して
いただくのがいいと思います.
その際は Teeda HTML Example に置くだけで
確認できるようだと助かります.


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