Google App Engine でJSF 2.0を動かす

やっとGAE /Jでうごいた。使用するライブラリや基本的な設定、パッチ部分は問題はなかった。

どうやらjavax.faces.STATE_SAVING_METHODをclientにしないとだめなようだ。web.xmlに忘れないように書こう。この辺いじらなくても完全に動くようになることに期待したい。


とりあえずECHO Helloと足し算、足し算+Ajaxの3種類のサンプル上げときました。Javaのコードとテンプレートも見れるようにしています。

以下のリンクにおいときますね。

http://shinsan-jsf2.appspot.com/

見てわかるとおり必要なのは本当に単純なPOJOなクラスとテンプレートだけ。全部リクエストスコープです。

Viewスコープ等問題なく動くかはまだ確認していないので検証したらこのサンプルに追加していきたいと思う。


ちなみに開発とローカルでのテスト、デプロイは全てNetBeans 6.8βにて行っています。6.8βは起動時のフリーズが多いのが厄介ですのでM2のほうがいいかもしれません。


GAEはスケールするんでしょうけど、レスポンスの速度は速くないですね。細かいリクエストたくさんするタイプのはつらいかも。



これでとりあえずMixiアプリ等のインフラの準備は出来たかな。

ただGAEの制限が問題になりそうなのがリクエスト回数。ストレージとかCPUとか転送量等は課金していけばいいだけのはなしだし、そもそもそんなに問題はないけど、リクエスト回数だけは最大課金状態でもすぐに制限がきてしまいそうだ。

ということはストリームやソケット通信はできないので、真っ当なネトゲのように細かくユーザーの入力とレスポンスをやっていると金が無制限だったとしてもすぐに限界が来てしまう。実装上の妥協が必要かもしれない。

やはり牧場のような放置系のシステムがいいのだろう。


割り振られるマシンパワーが遅いためにスタートアップが遅い(6秒から10秒くらいかかってる。Core 2 Duo/1GHzクラスか?)が、これは2分起動のcronと空servlet用意することで回避。CPU時間を見るとおおむね1〜4cpu_msしか消費していないので、ここが問題になることは絶対にないはず…。むしろスタートアップ時の消費CPU時間を考えると空cronのほうがいいと思う。1時間で1回のリクエスト程度のCPU時間しかくっていないのだから。



あとネックはやはり画像処理。GAEではJava2Dがないので、バイト配列を直接操作してBMP形式とかを生成してその後にPNGJPEGへ変換というのをやる必要がある。

ここまで聞いて「おいおい、いったいいつの時代のプログラミングだよ」と思った人も多いのではないだろうか。Windows 3.1でもそんなことはなかったぜ。NT3.5あたりでCreateDibSectionが新機能として搭載された古の時代を思い出した。WinGとかいっても今の人には通じにくいかもしれない。GameSDKとか。DirectXのベースなんだけどね。おかげでDirectXはバージョン2から始まっていた、はず。

ICO形式ならすぐ作れるが、BMPとかだとちょっとたるいなぁ。ICO形式サポートしてるんでもう面倒なんで内部演算をICOファイルの集合体として扱うか。確かICOファイルは256*256まであつかえるはずなんで、1024*768の画像を作ろうと思うと12個必要になるという変態的なものになりそうではあるが。

…と思ったけどリーダ作るわけじゃないし特定フォーマットのべたのみ書き出せればいいからまぁBMPでもいいのかな。


まださわって2日しかたっていないので間違いだらけだと思うけど、今のところの感覚はこんな感じ。