JavaServer Faces 2.0仕様のメモ

JSF2.0の原案が公開されています(https://javaserverfaces-spec-public.dev.java.net/proposals/JSF-2_0-draft.html)。今のところ、JSFのSpec LeadをやっているEd Burns氏のブログに出ているだけで、JCPのサイトに現われるのは4月になってから(といってもすぐですね)という状態です。ただ、ロードマップによるとJCPからPublic Reviewをダウンロードできるのは来年(!)の2月か3月の予定なので、仕様が固まるだけでもかなり時間がかかりそうです。とりあえず、どんな変更があるのかを私が理解した範囲でメモしておこうと思います。

仕様を作っている中の人が考えていることは

  • 生産性をあげること
    • graphical IDEというのはNetBeansを指しているのかな?command-line developersというのはAnt使いのことでしょうか??
  • メンテナンスを簡単にすること
    • production lifetimeのということなのでWebアプリ開発の効率アップかな
  • Ajaxを利用したクライアントを簡単につくれるようにすること
  • JavaScriptを一切使わなくても同等のクライアントをつくれるようにすること
  • モジュール化を進めてJSF"フレームワーク"を他のクライアント用ツールやサーバサイドツールと組み合わせて使えるようにすること
    • つまり、JSPじゃなくてもJSFフレームワークを使えるようにするということのような。具体的には書いていないのですが、JSF Viewを使わないとしてもリクエスト処理のライフサイクルは使う価値があると言っているので。他のところでスクリプト言語のサポートの話も出ているので。
  • Java Persistent APIを取り入れて簡単にデータを表示できるようにすること

ということのようです。

さらに新仕様で必要とみなされている内容はEase of Development, New Features and Fixes, Runtime Performance and Scalability, Technology Adoptionの4つの分けられています。

Ease of Development
これはJSFのというよりはJava EEが目指していることで、Java EEの一部となるJSFもそれに従うためだそうです。候補にあがっているのは

  • "zero configuration"のかけ声のもと、faces-config.xmlやweb.xmlを無くして、アノテーションでまかなう
  • エラーメッセージをどこで起きたどのようなエラーかわかるように改良して開発効率をアップする
  • ディフォルトの例外処理を提供する
  • JSFコンポーネントを自分で作ったとしてもJSPタグハンドラまで作らなくていいようにする
  • アノテーションを利用してダイナミックにコンポーネントやナビゲーションルールを指定できるようにする
  • Declarative Renderers(?) いちいちout.println()をやらなくてもいいRenderers
  • Facelets, JSFTamplating, Tilesを採り入れる
  • CRUDを使うアプリケーションをすごく簡単につくれるようにする

です。さらにコンテナ側の改良として

  • deployment stepを無くして、アプリケーション実行時でもJSFアプリケーションを修正できるようにする
  • WARの構成をわかりやすくする

があげられています。

New Features and Fixes
この改良はJSF利用者の声を取り入れて行われるとのことです。候補は以下。

  • リクエスト処理のライフサイクルをAjaxに対応させる
  • Ajax利用時にコンポーネントツリーを部分的にトラバースできるようにする
  • ブックマーク対応のJSFにする
  • クライアント側がinter-componentとform-levelバリデーションできるようにする(?)(JSR-303のバリデーションを適用する)
  • コンポーネントに関連付けられているstaticなリソース(画像、スタイルシート、JavaScripなど)にはディフォルトのロケーションを指定できるようにする
  • Calendar, Tree, Tab View, Captcha, Login Panel, File UploadなどをStandard HTML RenderKitに追加する
  • "Lost Update"や"Duplicate Button Press"に対応できるしくみを提供する
  • とあるページが表示されるときに同時に実行されるアクションを指定できるようにする(できればAjax経由で)
  • パーシステントなデータを簡単に参照できるようにする

Runtime Performance and Scalability
JSFフレームワークに機能を採り入れていろいろできるようにするとパフォーマンスが落ちるだろうから改善が必要だけれど、実装との兼ね合いがあるからまだ決まらない、んだそうです。候補は以下。

  • コンポーネントの状態を保存したり復帰させたりするのは全部でなくて一部だけにする
  • ステートレスなUIコンポーネントの状態保存のディフォルトをみなおす
  • イベント処理とページ間でのコンポーネントのやりとりをできるだけクライアント側にもってくる
  • キャッシングすることでレンダリング処理をシンプルにする
  • PhaseListenerで実現されているインターセプタを改良して、どのリクエストがPhaseListenerの対象になるのかを正確に指定できるようにする

Technology Adoption
JSFを使ってくれるデベロッパを増やすためにJSFに色々な機能を追加するそうです。候補は以下。

  • クライアント側のライフサイクルを追加してドラッグ&ドロップ、master-detail(?)、サブダイアログに対応する
  • JSFの機能の一部だけをJava EEのアプリケーションで使えるようにする
  • JSFからRESTを利用してリソースを参照できるようにする
  • RSS/Atomに対応する
  • REST(JSR311)をサポートする
  • JSFのどのレベルでもスクリプティングができるようにして、スクリプト言語を使ってJSFのアプリケーションを作れるようにする
  • コマンドラインインタフェースを決める
  • ページ間での値の受け渡しをサポートして、Dialog,Conversation,Scope,Flashを利用するための標準を決める
  • コンポーネントでSkinningとThemeingをサポートする

これ以外ではJSFで利用するAjaxI18N, L10Nサポートや参照実装のライセンスがCDDLからGPLv2に変わることなどがありました。

仕様を決めるにあたって考慮した既存の技術には

とかなりの項目があげられていました。

ざっと見たところでは、JSF 2.0はかなり変わりそうな感じです。でも、かなり使えるようになりそうでもあるので、期待できるかもしれません。特に、何度かスクリプト言語対応と言っている点は注目かも、です。おそらくJSPJSFが分離されて、Ruby on JSFな組合せもありうるのではないかと思います。