ひがやすを技術ブログ

電通国際情報サービスのプログラマ

ポストStruts

今は、Strutsが出た頃と違って、Web + DI + O/R Mapperの三種の神器で使われることが多いと思うので、ポストStruts三種の神器の組み合わせで考える必要があると思います。まず、基準になるのは、

  • Struts + Spring + Hibernate2

今、一番ポピュラーな組み合わせでしょう。
この組み合わせを牽引したのは、Hibernate2だという風に思っています。Hibernate2をよりよく使うために、Springは良い女房役だったのではないでしょうか。
ただ3つのフレームワークとも設定ファイルの肥大化という問題を抱えていて、Next Generationがまちのぞまれているわけです。

上記のフレームワークの良い点を取り入れ、問題点を解決すべく登場したのが、JSF + EJB3です。Java EE 5の標準でもあり、多くのベンダーにサポートされています。正直、JSFEJB3もいろいろ不満点はありますが、結構使えるレベルに達していると思っています。
SpringとEJB3を比較すると

という点で、EJB3に軍配があがるのではないでしょうか。立場上、Seasar2はSpringと比較したりしますが、私としては、EJB3のほうが怖い存在だと思っています。Springが今、世界的にシェアがあるといっても比較的早くEJB3に逆転されるというのが私の読みです。
Seasar2EJB3との比較は後ほど行います。その前に、EJB3の動向を見てみましょう。EJB3は、JBossOracleが先頭を走っています。この2つは、EJB3が正式にリリースされたら、ほとんど間をおかずに正式対応版をリリースしてくるのではないかと予想します。EDRの時もそうだったからです。
それでは、リリース後、どれくらいで安定するのかですが、それは正直良く分かりません。ただ、オープンソースであることなどもふまえて、JBossは比較的早期に安定版を出してくるのではないかと予想します。
それでは、Seasar2EJB3を比較してみます。ほとんど設定がいらないというのが、Seasar2の売りで、EoDについては、Seasar2のほうが優位ですが、EJB3もそれなりに使いやすいので、EoDはさほど大きな優位にはなりません。私が重要だと思っているのは、テストのし易さと自動テストの範囲をできるだけ増やすことです。EJB3は、モックベースのテストは簡単に行えますが、実際にデプロイされた状態でのテストを行うのは、かなり面倒です。その点、Seasar2(Springも)は、デプロイされた状態でのテストも簡単に行えます。この点は、Seasar2のほうが優位になります。整理すると、

になります。じゃ、結局どうなるかというと、よほどテストにこだわらない限り、それなりに簡単で標準のEJB3になるのではないでしょうか。JBossは、Embeddable EJB 3.0というアプリケーションサーバ無しで動く、EJB3も出しています。これなら、テストも簡単です。というわけで、Seasar2もSpringも現状のままだと、EJB3に負けてしまうでしょう。
そこで、Seasar2では、JSFの実装であるTeedaとPersistence APIの実装であるKuinaを用意して、Java EE 5の標準に対応します。EJB3のSimplified APIの仕様についても、S2Containerで対応する予定です。
つまり、標準を重要視する場合でも、Seasar2ファミリーですべて揃います。しかも、アプリケーションサーバなしで動かすことができるので、テストも簡単です。Teedaについては、ブラウザを使ったテストも自動化するTeedaUnitを投入します。Kuinaについては、データベースのテストを自動化するKuinaUnitを投入します。おそらく、ほとんどの部分のテストを自動化できることでしょう。
JSFEJB3の仕様に不満がある場合には、Seasar2拡張機能を使うこともできます。
Teedaについては、JSPのかわりにHTMLをつかったり、KuinaにおいてはエンティティにDIやAOPを適用できるようにしたり、S2Daoのようにインターフェースだけで、EJBQLやEntityManagerへのアクセスコードを自動生成したりするような機能です。
既存との互換性ももちろん保ちます。商用サポートについても、弊社で提供するので、その点でも安心して使ってもらえると思います。なにかあれば、ホットフィックスで修正しますから。