Seasar2始めました
いまやってる開発に、Seasar2を導入することにした。
導入の経緯
本当はRailsを使いたいのだが…。
- 既存のサービス(Struts製)への機能追加なんで、Javaで合わせた方が無難な気がする
- 既存のDBを使い回すのでActiveRecord使いづらい
- 周囲はJavaプログラマばっかり、Rubyistいねぇ(汗
…という理由から、見送り。でも、設定ファイル地獄はごめんだし、自動テストすることを考えるとDIも欲しい。そんなことを考えていたら、Seasar2がよいかなぁ、と。
ひがやすを氏がよくRailsの話に首を突っ込んでくることもあって、なんか親近感があったこともある。
そんなわけで、オンラインマニュアルに首っ引きになり、本も二冊ほど買い、さらにはSeasar Conference 2008 Autumnまで足を伸ばしたりして、短期間で集中的に勉強している次第である。
DI! DI!
自動バインディングに、いくつかのCoC的な仕組みのおかげで、少ない設定でDIできるのは実にいい感じ。最初はS2JDBCのJdbcManagerがどこからともなくインスタンス化されるのを見て、どういう魔法かと思ったものだ。Javaでここまでやれるってすごいな。
DIとAOPの強力さのおかげでMockも差し込みやすいから、テストコードもそれなりに楽に書けそうだ。
問題は、RESTfulなWebサービスを作りたいのだが、現在のSAStrutsではどーにもならん点。表現をXMLにしたいのだが、できない。JSPでXHTMLをレンダリングすればいけるかなー、と思っていたのだが、先頭に空行が挿入されてしまう関係で*1Well-FormedなXMLにならず、断念。S2RESTはまだsandboxだしなぁ。
そんなわけで、S2ContainerとS2JDBCのみを使うことにして、フロントエンドはRestlet、などという狂気のプランを練っている。うまく設計できるかな…。
素人にはおすすめできない
ドキュメントをなんとかしてほしいなぁ、Seasar2。初心者から見ると、なんか簡素すぎる気が。特に、サンプルソースコードが全然足りない。たぶん書いてる人間からすればわかりきっているから端折っているんだろうが、初心者としてはそこが知りたいんだよ!という点がいっぱいある。
おかげで大苦戦。フィールド・インジェクションがなかなか理解できない、aop.diconをincludeしなければならないことに気づかない、s2junit4.diconにs2jdbc.diconをincludeし忘れてDB関係のテストが全部Failed、@Mockのインジェクション先がよくわからん、assertEntityEqualsはNullPointerExceptionを投げてくる…。なにか一つ試すたびに、律儀に失敗する。死んで覚える感じ。どこのグラディウスだ。
逆に、サンプルソースコードが豊富なRestletは、ドキュメントが全文英語であるにもかかわらず、すらすらと読み進めて理解することができた。ソースコードは世界共通語だねぇ。まぁ、Restletのほうがやってることがシンプルなこともあるけど。
入門書籍もいいものがないと思う。購入した二冊の参考書は、斜め読みしただけで放置。情報が少なすぎるか、古すぎる。
Seasar2はある程度力のある人が自分で試しつつソースコード読みつつガリガリ使って覚えることはできるけど、あまりギーク的でない一般的技術者にはとても勧められない。「これ見ればわかるよ」っていうのが無い。
ただ、SAStruts周辺はドキュメントもチュートリアルもしっかりしている感じなので、今後改善されていくんだろうなー、とは思っている。