JSF 2.0 RI Mojarra 正式版リリース

https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList?folderID=11852

RIというと品質が低いイメージがありますが、今のRIは商用品質ですのでご安心を。


MojarraはもともとGlassfishJSF実装さらに前はSunのJSF実装です。Mojarraとして独立させた理由はGlassfish以外のプロダクトで使えるようにという意味があります。実際現在の商用アプリケーションサーバーのJSF実装はMojarraがほとんどです。

JSF 1.1くらいまではApache MyFacesもそれなりのシェアがあったようですが、1.2になってからMojjaraの一人がちですね。パフォーマンスがまったく違いますから、当たり前かもしれません。MyFacesJSFと思ってる人はパフォーマンスがものすごく低く感じるかもしれませんね。

Mojarraとしてしっかりと独立したプロジェクトなのでもちろんTomcat等で使えます。


ソースを見てみたところ以下の記述があります。

Map<String,? extends ServletRegistration> existing = servletContext.getServletRegistrations();
for (ServletRegistration registration : existing.values()) {
    if (FACES_SERVLET_CLASS.equals(registration.getClassName())) {
        // FacesServlet has already been defined, so we're
        // not going to add additional mappings;
        return;
    }
}
if (LOGGER.isLoggable(Level.FINE)) {
    LOGGER.log(Level.FINE,
               "Registering FacesServlet with mappings '/faces/*', '*.jsf', and '*.faces'.");
}
ServletRegistration reg =
      servletContext.addServlet("FacesServlet",
                                "javax.faces.webapp.FacesServlet");
reg.addMapping("/faces/*", "*.jsf", "*.faces");

見てわかるように、JSFサーブレットの動的登録です。つまり、「JavaEE 6時代のフレームワークのセットアップはWEB-INF/libフォルダにjarファイルを置くだけということになります」といったのが実現されました。

web.xmlがなくてもよいというのはこちらのエントリを参考に。
NetBeans 6.7RCで先取り Servlet 3.0の動的サーブレット登録



といいつつMojarraはJava EE 6 のServlet 3.0に直接的に依存していません。Java EE 5のサーブレットコンテナで動きます。つまり、Tomcat 6でJSF 2.0が動かせることをあらわします。この場合非常に便利なEJB 3.1が使えませんが自前でトランザクション管理したい場合はそれでもいいでしょう。

実際にTomcat 6で起動してみましたが、問題ないようです。ただし、ELがJavaEE 5のバージョンですのでELメソッドは使えません。また、Tomcat 6だとweb.xmlを消すともちろん起動はできません。


AjaxなWebアプリをscriptを書くことなく手軽に使えるのはかなりの魅力ですね。JSF2.0の特徴であるfaces-configを一切必要としないというのもすばらしいです。

JSF 2.0の新機能まとめも参考に。