[Seasar-user:12876] Re: 【teedaExt】saveState/restoreStateの動作に関して

鈴木 順 [E-MAIL ADDRESS DELETED]
2008年 2月 14日 (木) 21:14:57 JST


ひがさん

返信の方ありがとうございます。

>メモリとパフォーマンスを失います。

なるほど。この点には非常に共感できますしすごく嬉しいです。
実際、楽に実装する為に多くのObjectをSessionに入れていましたので、
メモリに問題が発生していました。
TeedaExtにあるSubAppScopeで大分改善できると思い、
S2JSF->TeedaExt移行に踏み切った次第です。
このような基幹部分でも改善されるのは願っても無い事です。

> また、セッションに保存するときに、コンポーネントステートの
> オブジェクト(SerializedView)を作るので、動作も遅くなるでしょう。

この点気になるのですが、SerializedView自体は毎回作っていると思います。
作った後にTeedaStateManagerImplのsaveSerializedViewToServerで
既に保存済みか否かを確認しています。
保存済みか確認して無ければ作るのでは問題があるのでしょうか?
それとも全く違う部分の実装の事でしょうか?

> お勧めは、UIComponentをステートレスに作ることです。
> 直前の状態が復元されることを当てにしないという意味です。

なるほど。今回問題になったのは、
te:condition,te:forEachを組み合わせたようなコンポーネントです。
ループの件数やRenderしたかいなかを元に子コンポーネントを
Restore/Decodeしないと厳しいのでその状態を
saveState/restoreStateを使って保っていました。

と言う事で、
TForEach、TCondition中を見ました。非常に参考になります。
こちらもどちらかを参考にして実装を変更しようと思います。
TForEach:pageScopeにアクセスする
TCondition:ComponentStatesHolder.save/resotoreを利用
と方法違うのですね。
TForEachがRender時のデータ件数を覚えている方法の、
ComponentStatesHolder.save/resotoreを利用する方法は、
JSF通常の方法なのでしょうか?
どちらがお勧めでしょうか?どちらにしてもTeeda内部の実装を
利用するので、今後変更にならない方が嬉しいです。

以上

On Thu, 14 Feb 2008 20:48:10 +0900
Yasuo Higa <[E-MAIL ADDRESS DELETED]> wrote:

> ひがです。
> > > 
> > > お世話になっております。鈴木です。
> > > 
> > > UIComponentのsaveState/restoreStateの動作に関して教えていただきたいと思います。
> > > restoreStateに引数で渡ってくるコンポーネントの状態ですが、
> > > 直近にsaveStateされたものではなく、
> > > 始めてComponentTreeを作った時のものが渡ってきているような感じがします。
> > > そのような動作なのでしょうか?
> > > 
> > これは、意図したものです。
> > 
> > > これを直近のsaveStateされたものに変更する事はできませんでしょうか?
> > > (こうなるのがJSFの仕様だと思っていました)
> > > 
> > StateManagerを
> > org.seasar.teeda.core.application.implの
> > TeedaSessionStateManagerに変えれば、
> > 直前のものを保存するようになります。
> > 
> > ただし、そうすると、コンポーネントステートを
> > すべてセッションに保存するようになり、
> > 多くのメモリを必要とするようになります。
> > 
> > また、セッションに保存するときに、コンポーネントステートの
> > オブジェクト(SerializedView)を作るので、動作も遅くなるでしょう。
> 
> 説明が足らなかったので補足します。
> 確かに、TeedaSessionStateManagerを使えば、JSFの仕様どおりに動くの
> ですが、メモリとパフォーマンスを失います。
> 
> それを避けるために、Teedaでは、UIComponentをステートレス
> にすることで、セッションを使わないようにがんばっているのです。
> 
> お勧めは、UIComponentをステートレスに作ることです。
> 直前の状態が復元されることを当てにしないという意味です。
> 
> よろしくお願いします。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user





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