Java Community Processプログラムのもとで(source)、JSR 314のアーリードラフトがレビューのためにリリースされた(source)。このJSRでは、JavaServer Facesの仕様を1.2から(source)2.0に(source)アップデートすることを目指している。この次世代のJSFは、Webアプリケーション開発の素晴らしいアイデアを Java EEプラットフォームにもたらそうとしている。コミュニティからは既に肯定的な反応をもらっているが、これは特にAJAXのサポートが改善されたことによるものである。
このJSFのリリースの主要な目標は、JCPのページに以下のようにまとめられている(source)。
専門家グループは、次のような従来のアイデアを集めていく予定である。
- グラフィカルなIDEやコマンドラインの開発者のために、Webアプリケーションの開発において生産性を最大化すること。
- Webアプリケーション開発期間中の維持管理をできる限り簡単にすること。
- Ajax 技術を効果的に使用することにより、反応の良いユーザインタフェースを簡単に作成できるようにすること。これには、サーバ上のアプリケーション・ロジックの実用的なレベルを保ったままで、クライアントの中にMVCのコントローラとUIのロジックのほとんど全てとページ内部のコンポーネントの相互作用を持つアプリケーションを有効にすることが含まれている。JavaScriptが無効になっていたり利用できない場合に、うまく機能を落とすことを考慮に入れたアイデアも重要である。
- 完全に機能的な、クライアントではJavaScriptを使用していないサーバベースのWebアプリケーションのサポートを継続することによって、Webアプリケーションの範囲を広げられるようにすること。
- モジュラリティを利用して、JSFフレームワークとその他のクライアントやサーバサイドのWebアプリケーション技術との統合の機会を広げること。これによって開発者は、無理にJSF全体を使用することなく、個々のパーツを簡単に利用できるようになるだろう。例えば、リクエスト処理のライフサイクルは JSFのVIEWがなくても役に立つ。もう一つの例としては、JSFには堅牢な国際化(I18N)や地域化(L10N)の機能がある。UIにJSFのコンポーネントを使わなくても、この機能を使うことができるはずである。これを簡単に特徴付けると、「使いやすくマッシュアップ」するということである。
- Java Persistence APIの利用により、データを簡単に見せられるようにすること。
JSF 2.0のドラフトがリリースされる前に、いくつかの新機能の追加についてコミュニティからリクエストが出されていた。JDJに掲載されている記事の中で、Shay Shmeltzer氏はJSFの次期バージョンに期待することのリストを挙げている(source)。まとめると次のようになる。
- AJAXのJSFへの統合の標準化
- JSFコンポーネント構築の単純化
- スコープの追加
- JSFフローへの新しいコンポーネントの導入
- フローの再利用を可能にすること
- ビジネス・コンポーネントのバインディングへの宣言型UIの追加
JSF 2.0のドラフトで取り組もうとしている課題の一つは、JavaScript言語から名前空間サポートの欠落に対処するために、Open Ajax Registryを(source)利用することである。Open Ajax Allianceは (source)Ajaxを使っているベンダやオープンソースプロジェクトの団体であり、OpenAjax Registryを維持している。このレジストリは集中型で業界規模のAjaxの登録機関で、オブジェクトの衝突を防ぐために業界全体に渡るAjaxのランタイム・ライブラリのリストを保持している。
このレジストリは、以下のような利益をもたらす(source)。
このレジストリは、JavaScriptとマークアップの衝突を防ぐ他に、次のようなメリットがあります。
- Ajaxライブラリの開発者がレジストリを利用すると、
- 自分達のJavaScriptのグローバルオブジェクトや、実行時の拡張(JavaScriptとDOM)、ライブラリ独自のマークアップが、他のAjaxライブラリが使用している名前と衝突しないことを確かめることができます。
- 複数のライブラリが同じ名前や拡張仕様を共有できるような、JavaScript環境を拡張しようとする作業を統合することができます。
- ブラウザのベンダがレジストリを利用すると、
- ブラウザに新たに組み込まれたJavaScriptの機能が、業界で既に使用されている名前と衝突しないことを確かめることができます。
- Ajaxアプリケーションの開発者がレジストリを利用すると、
- アプリケーションで使われているJavaScriptのグローバルオブジェクトはどれも、ポピュラーなAjaxライブラリで使われているグローバルオブジェクトと衝突しないことを保証することができます。
JSF 2.0のドラフトでは次のように規定されている。
トップレベルの名前空間であるjavaxがあり、これはOpen Ajax Allianceに登録されている。
Java Ajax: {
namespaceURI: http://www.sun.com,
version: "1.0",
globals_to_approve:["javax"],
comments: "Used in the JSF 2.0 specification.",
specificationURI:"http://www.jcp.org/en/jsr/detail?id=316",
email: "jsfaces@sun.com"
}OpenAjax Allianceに従うためには、ライブラリは、ブラウザのJavaScriptエンジンがJavaScriptファイルをフェッチして解析するときに、 OpenAjax.registerLibrary()を使用してライブラリ自身を登録しなければならない。
JavaServer Faces 2.0のJavaScript APIを使用するページはどれも、トップレベルのJavaScriptオブジェクトの名前であるjavaxを、JavaScriptの連想配列で定義しなければならない。そのトップレベルのJavaScriptオブジェクトの中には、OpenAjax Hubの中で見つかるが、facesという名前のプロパティがなければならず、その値は別のJavaScriptの連想配列でなければならない。 facesという名前のJavaScriptオブジェクトの中には、さらに別のJavaScript連想配列がAjaxというキーで存在しなければならない。
if (javax == null || typeof javax == "undefined") {
var javax = new Object();
}
if (javax.faces == null || typeof java.faces == "undefined") {
javax["faces"] = new Object();
}
if (javax.faces.Ajax == null || typeof javax.faces.Ajax == "undefined") {
javax.faces["Ajax"] = new Object();
}
Javaやその他のWebフレームワークの詳細は、http://www.infoq.com/jp/webframeworkで入手可能である。
原文はこちらです:http://www.infoq.com/news/2008/06/jsf-2.0-early-draft