JJUGセッションまとめ その3 Slim3 on GAE

まとめその3は今日の本命、 Slim3 on GAE、ひがさんのセッション。
http://www.java-users.jp/contents/events/ccc2009spring/sessions.html#A4

自分は不勉強にもGAEというものをほとんど知らない状態で臨んだが、ひがさんのセッションはとてもわかりやすく、こちらが知りたいと思うことを的確に話してくれるのでとてもよかった。
GAEについて理解したことは、(この前のセッションの内容も含む)

BigTableについて

  • EntityのLocalityという概念がある
  • Entityの総件数とか取得できない
  • EntityGroupという概念がある(親子関係=リファレンス)
  • トランザクションはEntityGroup単位でロック(実際にはロックじゃない)
  • KeyによるgetとQueryによるget (keyのほうが断然早い)
  • Queryに OR や IN や NOT EQUAL などが使えない。。(え、、、まじ。)

■制限されたJava環境

  • Thread使えない
  • Socket使えない
  • ファイルにアクセスできない(Strutsのファイルアップロードはそのままでは動かない。)
  • publicじゃないフィールドに(Reflection等で?)アクセスできない(ほぼDIとかAOPは無理)
  • mavenは使わないほうがよさそう。(嵌りたくなければ)

■プラス面、その他

  • セッションをどんどん使ったほうがいいんじゃないか。(BigTableに永続化される)
  • DBのテストが簡単。(メモリ上でテストできるスタブがあるし、そもそもRDBMSじゃないので)
  • GAEのEclipseプラグインで、禁止されたクラスやメソッドは赤く表示してくれる

こんなところ。また、本題のSlim3については、

■Slim3Struts

  • 前提として、JSPServletはほぼ問題なく動くんじゃないか。 >> 暗に肝はBigTableだということか。
  • SAStrutsをベースに動かないところを直していっただけなので完成度は高いとのこと

(終了後に質問させてもらった)

  • HotDeployはControllerクラスに限る。

SAStrutsになれていれば違和感なく作れそう。
終了後にVelocityと連携できるかどうか質問したところ、VelocityがGAEで禁止されているAPIを使っていなければ問題ないのではないかとのこと。
SAStrutsは確かpublicフィールドまわりで問題があったように記憶していたが、こちらはその懸念はなさそう。サンプルコードをvelocitiy化するなどして早速試してみたい。

■Slim3JDO

  • GAEにはJDOまたはJPABigTableにアクセスできるが、JDOのほうがより親和性は高い
  • 出来ることが限られているのでメソッドせいぜい6つぐらい覚えればすむ。
  • Slim3JDOはJDOをラップしてタイプセーフ、流れるインターフェースを実現できる
  • java.sql.* のプロパティは使えない。(使わないほうがよい)
  • aptという技術を使ってコンパイル時にMetaデータを生成 >> タイプセーフを実現

 ※aptはこれからのフレームワークの重要技術というコメントあり

結局BigTableをプラスと捉えるかマイナスと捉えるかでGAE使用の是非が決まってくると思われるが、

  • RDBMSの設計しなくていい!
  • テストが楽
  • Slim3JDO使えばこれまでと違和感無く開発できる

そして、

  • インフラ、ミドルの設計もしなくていい!

という部分は大きなメリットに感じる。
ちょっと何かWebサービス作ってみようって時に、MySQLインストールして、テーブル定義作って、、といったことが必要なくなるのはいい。

逆にマイナス面としては、複雑なクエリーができないという点がやはり気になる。分析、帳票系の処理はコード量が増えそうだ。(SQLというのはやはり便利なもので、S2Daoとかで外だしSQL書いてロジックはシンプルに保つっていうのはかなりアドバンテージだった。SQL単体でテストできるし。)

しかしそこは、RDBMSから離れた思考でいいロジックを考えていくのが我々の仕事なんだと思う。