[Seasar-user:3914] Re: Teeda 1.0 beta3 リリース

Shinpei Ohtani [E-MAIL ADDRESS DELETED]
2006年 6月 20日 (火) 19:46:57 JST


shotです。

06/06/20 に Tsuyoshi FUKUI<[E-MAIL ADDRESS DELETED]> さんは書きました:
> フクイです。
>
> "Shinpei Ohtani" <[E-MAIL ADDRESS DELETED]>'s message
>         at Fri, 16 Jun 2006 13:46:46 +0900
> > Teeda 1.0 beta3 をリリースしました。
> >
> > 主な変更点は
> (略)
> >     * コンポーネントツリーをセッションで管理しないように修正しました。
>
> これは、コンポーネントツリーをセッションで管理していると
> セッションが切れたページのフォームをサブミットしたときに
> ユーザの予期せぬ動作になるという問題と関係が有る修正だと思うのですが、


メインの問題はメモリ使用量です。
JSFでは巨大なコンポーネントツリーが場合によっては出来てしまうため
それをセッションで管理させようとするとメモリ使用量は相当量かかってしまいます。
一方でコンポーネントツリーをすべてセッションで管理しておかないと
いけないのかというと、実はそうでもないのです。

> 具体的にはコンポーネトツリーをセッションではなくどのように
> 管理するようになったのか教えて頂けないでしょうか?

コンポーネントツリーはStateManagerの実装で
Mapで管理しています。
(org.seasar.teeda.core.application.impl.TeedaStateManagerImplです)
viewIdに対してひとつのコンポーネントツリーを管理します。

UIコンポーネントは状態をもっていますが、そのほとんどは
Tagにセットされたあとは変わらず、変わるのはsubmittedValue、
value関連くらいです。
他の状態は画面上に埋め込まれているか、
またはModel(Managed-Bean)のプロパティにセットされているので、
コンポーネントツリーは、viewIdに対して基本的にひとつあればよいと
いうことになります。


ちなみに、beta3以前のSessionにUIコンポーネントツリーを
管理するTeedaSessionStateManagerImplも用意してありますので
teeda.diconのStateManagerのところを入れ替えてあげれば、
セッションを使ってコンポーネントツリーを管理する方法へも対応可能です。



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