JavaServer Faces 2.0の仕様策定開始

JSF(JavaServer Faces)はJSPとServletの仕組みを利用してWebアプリケーションを作成するためのフレームワークであり、昨年リリースされたJava EE 5にも含まれるAPIだ。現行バージョンはJSF 1.2で、これはJSR 252として仕様がまとめられている。

現在、JSFのエキスパートグループは次期バージョンにあたる「JavaServer Faces 2.0」の仕様策定に取りかかっており、この春にJava Community Processに対してJSRを提出、5月25日より2週間に渡ってJSR Review Ballotが行われている。今回は提出されたJSRを元にJSF 2.0の概要を紹介したい。

まず同エキスパートグループは、JSF 2.0仕様のコンセプトとして次のような内容を掲げている。

  • Webアプリケーションの生産性を最大限向上させる
  • Webアプリケーションのメンテナンスを容易にする
  • Ajaxを活用したリッチなインタフェースを容易に作成できるようにする
  • JavaScriptを使用しなくても同様にリッチなWebアプリケーションを作成できるようにする
  • モジュール化を進め、JSFフレームワークと、他のクライアントやサーバサイドアプリケーションとの親和性を確保する
  • Java Persistence APIによってデータの表示を簡単にする

これを見る限り、JSF 2.0では開発の容易性とリッチクライアントアプリケーションを強く意識しているのがわかる。

少し話が逸れるが、スペックリードであるEd Burns氏のブログこのエントリに「Menu of JSF 2.0 Features available for purchase」と題された表が掲載されている。この表はJSF 2.0の主要な新機能を実現するために必要なコストを、トータルが1000USドルとなるように評価したものだ。FaceletsやZero Deployment Time、EZComp、Ajaxなどに対して高いコストが見積もられているのが興味深い。

JSF 2.0の主な要件

さて、JSR 314ではJSF 2.0の主な要件を「Ease of Development」「New Features」「Runtime Performance and Scalability」「Adoption」の4つのカテゴリに分けてまとめている。現時点ですでに非常に多くの要件が挙げられており、JSF 1.2に対して大幅な変更が加えられることになりそうだ。

Ease of Development

Ease of Development(EoD)はJava EEにおける重要なコンセプトであり、JSFもJava EEの一部なので当然この点は重視されることになる。EoD実現のための要件としては主に次のようなものが挙げられている。

  • 最小限のJavaコーディングでカスタムコンポーネントを作成できるようにする
  • アノテーションを利用した"ゼロ-コンフィギュレーション"の実現
  • エラーメッセージの改善
  • デフォルトの例外処理の提供
  • JSFコンポーネントを自作した際、JSPタグハンドラまで自作する必要をなくす
  • JSFコンポーネントやManaged Bean、ナビゲーションルールを実行時に決定できるようにする
  • FaceletsやJSFTemplating、Tilesなどの統合
  • CRUDベースのアプリケーションを容易に開発できるようにする

また、コンテナ側で改善すべきとして次のようなものが挙げられている。

  • JSFアプリケーションを実行中にリアルタイムで修正できるようにする
  • WARの構成を改善

New Features

ユーザからの要望やフィードバックによって採り入れられる変更がこのカテゴリに分類される。ここには既存の機能の修正なども含まれる。具体的には次のような内容が挙げられている。

  • リクエスト処理のライフサイクルをAjax対応にする
  • コンポーネントツリーの構築とレンダリングを異なるライフサイクルに置く
  • Ajaxのライフサイクルでコンポーネントツリーを部分的にトラバースできるようにする
  • JSFページをブックマークできるようにする
  • クライアントサイド、コンポーネント内、およびフォームレベルでのバリデーションを可能にする(可能ならばJSR 303を導入)
  • コンポーネントに関連する静的リソースのサポート強化
  • Date Picker、Tree、Tab View、File UploadなどのコンポーネントをStandard HTML RenderKitに追加
  • ページを表示する際に実行されるアクションを指定できるようにする
  • 永続化されたデータに容易にアクセスできるようにする

Runtime Performance and Scalability

JSFの柔軟性を高めれば、それは実行時のパフォーマンスに大きく影響することになる。したがって機能の強化を有効なものにするためには、性能の改善と安定性の確保も同時に行わなければならないという。具体的には次のような要件が挙げられている。

  • コンポーネントの状態の保持を部分的なものにする
  • ステートレスコンポーネントのデフォルトの状態保持を見直す
  • イベント処理やページ内でのコンポーネントの連携を可能な限りクライアント側で行う
  • キャッシングを利用してレンダリング処理をスムーズにする
  • どの種類のリクエストが許可されているかをPhaseListenerで制御できるようにする

Adoption

このカテゴリには、JSFのユーザを増やすことも目的として追加される機能が分類される。その結果として、Webアプリケーションフレームワークとしての水準の向上を図るという。主なな要件としては以下のようなものが挙げられている。

  • クライアントベースのライフサイクルを有効にし、それによってドラッグ&ドロップなどを可能にする
  • ベンダ製UIComponentライブラリとの親和性を考慮してUIComponent仕様を改善する
  • JSF仕様の一部の機能だけをJava EEアプリケーションで利用できるようにする
  • RESTを使用したJSFアプリケーションリソースへのアクセスをサポート
  • RSS/Atomを使用したイベントの公開をサポート
  • REST(JSR 311)のサポート
  • スクリプト言語を使用したJSFアプリケーションの開発を可能にする
  • JSFアプリケーション開発のためのコマンドラインインタフェースを定める
  • ページ間での値の受け渡しをサポート

リリーススケジュール

JSR 314は、本稿執筆時点ではExective CommitieによるJSR Review Ballotが行われている最中であり、これは6月4日(現地時間)に終了する。可決すれば正式にエキスパートグループが形成され、具体的なドラフトの作成が開始される。現時点でのリリーススケジュールでは、Eary Draft Reviewは今年10月、Public Reviewが2008年2月、Public Review Ballotが同3月に行われる予定となっている。

当然ながらスケジュールは状況に応じて変動すると思われるが、最終的にJava EE 6への統合を目指しているため、それに間に合うようにProposed Final Draftを公開したいとのことである。なおJava EE 6はJSR 313として仕様の策定が開始されており、来年第3四半期での最終リリースを目指している。