Visual Web ICEfacesのデフォルト設定

NetBeansICEfacesを使っているとすぐにあることに気がつく。


画面遷移をしてもどってきても、初期表示にもどっていないこと。VisualWebのページビーンはリクエストスコープ。まさかセッションスコープになっているんじゃないかとセッションの中身を調べたりも下がまったくそういうことはなかった。

じゃあどこで各ページの状態を保持しているんだ?

もしかしてJSFとはちがうところ、ICEfacesが独自に管理してるってことか?そこでいろいろと調べてみる。


web.xmlにそれらしいのがみつかった。説明部分にちょっと書き加えたところが注目すべきところ。

ここをtrueにすると他の画面遷移後もどってくると初期状態になるいわゆるJSFっぽいアプリとなる。


そもそも、通常のWindowアプリケーションとかのように基本的に以前表示していた画面を保持するのはおかしいことではない。

たとえば、業務アプリ系の場合検索結果を一覧に出力することはよくあると思う。そのあと別画面に画面遷移をして戻ってきた場合、その一覧画面はどのようになっているべきだろうか。通常のWindowアプリケーションならば以前検索した結果が残されているはず。どこかに「再検索」などというボタンがあってそこではじめて一覧が更新されるというアプリは非常に多いはずだ。

ところがWebアプリは毎回検索をして、常に最新状態を表示するものが多い。毎回検索するということはDBサーバーへの負担がものすごく多いことをあらわす。Webアプリケーションでもっとも負荷が増える理由はクライアントサーバーにくらべてべらぼうに多いDBアクセス回数が原因だと思っている。何も考えずステートレスにこだわるあまりクライアントサーバー時代の数十倍のDBアクセスが起きているのは紛れもない事実だろう。

サーバーのメモリ増強が容易でなかった時代ならばセッションの使用メモリにこだわるのもわからなくもないが、いまやローエンドサーバーであるx86も64bit化し、4GBの制限から開放され、2GBのメモリがECCつきであっても平均価格で1.5万をきるなど恐ろしいほど安くなった。

仮にセッションを多用しまくって1ユーザあたり1MBも使ったとしても8GBのフリーエリアがあればおおむね8000同時アクセスには耐えることが出来る計算だ。そしてそこまでの同時アクセスが求められるアプリばかりではなく、むしろほとんどのアプリはそこまで必要としていない。


セッションを多用するのは怖くない。怖いのは各自勝手にセッションを隠れて使われることだけだ。bean単位で管理してくれるシンプルなJSFはむしろ都合が良いはず。


なんか途中から「WebアプリケーションでもWindowアプリケーションと同様の使い勝手になっていくといいなぁ」という別エントリになった気がするが(゚ε゚)キニシナイ!!

だからGWTICEfacesには今後もっともっとがんばってもらいたい。あとアプレットやWebstartも社内やB2B、投資系のツール以外でも広く使われるといいなぁ。