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

"TAKEUCHI Shinichi / 竹 "TAKEUCHI Shinichi / 竹
2007年 10月 16日 (火) 01:05:03 JST


お世話になります、竹内と申します。

  S2 2.4.17
  Teeda 1.0.11
にて開発しております。パブリックフィールド対応となり、コードが
すっきりしていいのですが、Serializableでないコンポーネントを
パブリックフィールドに置いた場合の仕様で質問があります。
  HotDeployで実行しているのですが、単にpublic宣言だけですと、
ページを遷移する時にNotSerializableExceptionが発生します。そこで、
transient指定を追加すると、ClassNotFoundExceptionが発生し、探して
いるクラスがどうもDI/AOPされた拡張後のクラスのようです。
  そこで、フィールドをprivate transient にして、setterでのInjection
にすると、キチンと動作します。
  というわけで、以下の質問なんですが、よろしくお願いします。
1)public transient はサポートされないのか?
    できれば、Deserializeで自動Injectがいい
2)private transient の場合、S2コンテナがDeserializeの時点で
    自動Injectし、独自の回復処理は不要(実際に使えていますが確認のため)

エラーとなる例1)
public KSelectItemHelper kSelectItemHelper;

エラーとなる例2)
public transient KSelectItemHelper kSelectItemHelper;

動作する例)
private transient KSelectItemHelper kSelectItemHelper;
public void setKSelectItemHelper(KSelectItemHelper ikSelectItemHelper){
	this.kSelectItemHelper = ikSelectItemHelper;
}

Caused by: java.lang.ClassNotFoundException: net.korabo.dreambox.helper.KSelectItemHelper$$EnhancedByS2AOP$$1d92803
	at java.lang.ClassLoader.findClass(ClassLoader.java:358)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

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




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