Xitrumについて調べてみた

ScalaのMLでXitrumという新しいWebフレームワークが紹介されていました。完全なドキュメントは以下のURLで公開されています。

READMEを翻訳してみた

Xitrum (ベトナムでは "Smurf") はNettyHazelcast上に構築された、非同期でクラスタ化可能なScalaベースのWebフレームワークとWebサーバです。

  • ScalatraLiftの間のギャップを埋めます: Scalatraより強力でLiftよりも簡単です。RESTful APIとポストバックの両方を簡単に作成することができます。XitrumはLiftと違いビューファーストではなくScalatraのようにコントローラファーストです。
  • URLのルーティングにはJAX-RS風のアノテーションを使用します。すべてのルーティングを一箇所に記述する必要はありません。
  • Scalaの思想に従ってタイプセーフです。
  • Nettyの思想に従って非同期です。
  • セッションはクッキーもしくはクラスタ化されたHazelcastに保存することができます。
  • クライアントサイドバリデーションとサーバサイドバリデーションにjQueryバリデーションが統合されています。
  • GNU gettextを使用したi18n(国際化)。
  • ETagを使用した条件付きGET

また、Hazelcastは以下の機能を提供します:

  • インプロセスかつクラスタ化可能なキャッシュ。キャッシュ専用のサーバは必要ありません。
  • インプロセスかつクラスタ化可能なComet。Comet専用のサーバは必要ありません。
+-----------------+
|    Your app     |
+-----------------+
|      Xitrum     |  <-- Hazelcast --> Other instances
| +-------------+ |
| | Action/View | |
| +-------------+ |
+-----------------+
|      Netty      |
| +-------------+ |
| | HTTP Server | |
| +-------------+ |
+-----------------+

Xitrumはオープンソースです。

ざっと見ての感想

ScalatraとLiftのギャップを埋めるというのは良い狙いどころだと思います。たしかにLiftは複雑すぎるし、逆にScalatraはシンプルすぎて実際に使うには拡張が必須です。
Xitrumのドキュメントの触りだけ眺めてみた感じでは、フレームワークそのものはあまりマジックな感じもなく素直に使えそうな感じです。ScalatraもLiftもURLのルーティングは集中管理するタイプなので、各アクションにアノテーションで書けるのはいいなと思いました。ビューはXMLリテラルで構築することが前提みたいだけどScalateなんかと組み合わせて使うことはできるのかな?
キャッシュやCometのクラスタ化に別のサーバがいらないというのは、クラスタ化されたサーバが相互にキャッシュを持つからXitrumをクラスタ化するだけで分散や冗長化できる、ということだと思いますが、Netty(非同期)といい、このへんの足回りはイマドキな感じ。まあ、異常時を含め本当にちゃんと動くのかどうかは実際に試してみないとわかりませんが。非同期だとデバッグも大変だし…。
面白そうなフレームワークではあるのですが、なんだかんだ言っても普通のAPサーバで動かせないもの(最終的にwarでデプロイできないもの)はまだ実戦投入しにくいのが現状なので(今までのJavaを使っていた部分をScalaで置き換えていくという使い方がメインなので…)、フロントのフレームワーク部分だけを使えるといいのになぁ…と思いました。