InfoQはEd Burns氏に話を聞いた。氏はJSF (Java Server Faces)の仕様の策定者であり、Oracleで働いている。氏はAjaxやHTML5を考慮したJSFはどのようなものになるのか、JSF 2.0、2.1はどのようなものになったか、2.2はどうなるのかについて話してくれた。また、JSPをFaceletととして処理した後にJSPとして返す仕組みや、JSF 2.2のマルチテナント機能(タスクフローとマルチテンプレーティング)、JSFはどのようにHTML 5をサポートするか、JSFの導入やJSFを使っている高トラフィックサイトなど、話題は多岐に渡った。
InfoQ:JSF 2.0からJSF 2.1への大きな違いは何だったのですか。
JSF 2.1はJCPのマイナーバージョンです。したがって、大きな変更点はありません。最も大きい変更はJSPドキュメントファイルをFaceletファイルとして扱う条件をJSFランタイムに設定する機能です。言い換えれば.jspxページで使われているコンポーネントがすべてFaceletの特徴を備えていれば、.jspxをFaceletの.xhtmlページとして扱うという機能です。大量のjspxファイルがあるアプリケーションにとってこの機能はとても便利です。
また、新しいプラグイン機能も実装しました。FaceletCacheFactoryです。このファクトリはFaceletインスタンスのキャッシュの仕方を制御するためにオーバーライドされます。つまり、例えばリレーショナルデータベースにFaceletインスタンスをキャッシュする方式に最適化することもできます。
InfoQ:JSF 2.1からJSF 2.2への主要な変更点は何ですか。
Java EE 7はEEプラットフォームにマルチテナント機能をもたらします。JSF 2.2はJava EE 7の一部なので、ふたつの主要な機能は両方ともマルチテナント機能に関係がありますが、単独の機能としてもとても便利です。その2つの機能とはタスクフローとマルチテンプレーティングです。
タスクフローはすでに先行技術があり、その多くがJSFに組み込まれています。JSF 2.2の機能に影響を与えた2つのタスクフローシステムはOracleのFusion Middleware ADFタスクフローとVMwareのSpring Web Flowです。タスクフローの基本的なアイディアは論理的な遷移の流れを形成するページの集合の凝集度を高め、疎結合を維持しながらメンテナンス性を向上させることです。
マルチテンプレーティングの先行技術はJoomla! CMSで使われています。世界中の何百万人ものPHP開発者にはおなじみですね。マルチテンプレーティンングを使えばJSFアプリケーションのサイト全体のレイアウトを統一できます。マルチテンプレーティングが提供するのは単に個別の要素のスタイルやアプリケーション内での要素の配列をコンポーネント化する"スキンニング"機能以上のものです。
この2つの機能を使いJava EE 7の簡易なマルチテナント機能と組み合わせれば、クラウド対応アプリケーションを開発する大きな力になります。
Java EE 7の共通のテーマはJava EE 7のクラウドサポートの一環としてマルチテナントをサポートすることだ。氏の話はPHPの世界に及び、Joomlaも話題になった。Joomlaの先行技術をJSFに取り込んだらどうなるか考えるのは面白い。
InfoQ: HTML 5をサポートするためにJSF 2.2にはどのような機能が加えられますか。
簡潔に言えば、私たちはJSF 2.2をしっかりとしたHTML 5フレームワークにするために改良しようとしているわけではありません。HTML 5が重要なのはシンサーバ/チッククライアントというアーキテクチャを標準化するからです。JSFではUIのロジックの大半はサーバ側にあります。これはJSF 2.2でも同じです。とはいえ、利用した方がいいHTML 5の特徴もあります。
メタデータ
JSFアプリケーションは既に大量のメタデータを活用できます。必要なのはHTML5の適切な機能を使ってメタデータを自然に表現するための方法です。
章節と見出し
HTML5の章節の軽量オンドロジがGoogle検索によって、divタグがどのように使われているのかを収集されるように、Faceletテンプレートの使われ方にも同じようなアイディアが適用できます。
フォーム関連要素
フォームを使うのはウェブアプリケーションとして必須であり、JSF 2.2のHTML5関連の機能開発もほとんどこの領域で行われます。 例えばHTML5はネイティブでスライダーコントロールやカレンダーコントロールを提供します。このようなコントロールは今まではサーバサイドの処理とJavaScriptと画像を組み合わせて実装するしかありませんでした。
この方向に進むのは理にかなっている。JSFはHTMLやJavaScriptやServletを使ってコーディングできるアプリケーションよりもリッチなアプリケーションを求める開発者向けのフレームワークだと思われてきた。JavaScriptで手を汚すことなくリッチなアプリケーションを作れるというわけだ。しかし、典型的なmodel 2フレームワークよりもリッチだが、おそらく成熟したHTML5アプリケーションには劣るだろう。JSFがクライアントサイドではなくサーバサイドの技術経由でリッチさを提供し続けるということは、JSFにとっては合理的だ。成熟したHTML5アプリが必要な場合や欲しい場合、利用できるJavaScriptやJavaのフレームワークはたくさんある。
InfoQ:JSF 2.1とJSF 2.2ではRESTのサポートは改善されていますか。
JSF 2.0に加えられた改善以外はありません。2.0ではページをブックマークする機能やPost Redirect Getパターンの適切なサポートが加えられました。
InfoQ: JSF 2.1とJSF 2.2ではAjaxやページの部分描画は改良を加えましたか。
AjaxはJSF 2.0で目玉となる機能のひとつでした。2.2では小さな改善を行う予定です。
JSF 2で様々なAjax関連のAPIと基盤が加わった。JSF 2には新しいJavaScriptのAPIや現在の画面の裏でAjaxリクエストを発行するjsf.ajax.request()、PartialViewContext(処理/描画の対象になるコンポーネントに対してアクセスを提供する)、
InfoQ: JSFはJSF 1.2の頃と比べると圧倒的に改善されていると思います。JSFの利用は増えていますか。
そう思います。もちろん、私の考えはバイアスがかかっていますが、カンファレンスで講演すると、JSFは2年前よりも遥かに基本的な技術として浸透しているのがわかります。
2010年はJSFは急速に普及したようだが、2011年の前半は若干普及で遅くなった。
求人情報の増減はJSF普及を計測するための最良の指標ではない。同じ仕事の求人広告が複数回出るし、必要とされるスキルが記載されている募集要項も使い回される。単なるひとつの指標なのだ。また、時々JSF関連の求人がJava EE 5とJava EE 6関連の求人に混ざることもあるので、グラフ上では減少しているように見える。同じようなことがSpring MVCとSpringの間でも起きている。例えば、多くの求人情報はSpringを使っていればSpring MVCも使っているはずだと見なしている。
InfoQ:JSFを使っている高トラフィックな大規模サイトを教えてください。
2006年頃まで、私はJSFを使っているサイトのディレクトリを作っていました。そのディレクトリは様々な経緯を経て、現在はRealWorld JSF Linksというサイトになっています。このサイトを見れば、有名なサイトがJSFを使っていることがわかります。面白いのはJSFが7つの大陸すべてで使われているということです。
このリストにはRiteAid Pharmacy、Toys R Us, Adidas、Apple Computer、Lufthansaなど著名なサイトが含まれている。
InfoQ:HTTPセッションを減らすためにJSFコンポーネントの状態保持の仕組みを強化していますか。JSF 2.0、2.1、2.2ではどのような変更がありましたか。
JSF 2.0では大規模な改善を行いました。部分状態保持機能を追加したのです。この機能はマークアップで宣言されたコンポーネントのツリーを保持しているということは画面のデフォルトの状態を持っているという単純な事実を利用します。JSF 2.0にはFaceletがあり、Faceletは簡単にマークアップページをUIComponentのインスタンスに変換するので、コンポーネントに加えられた変更を各リクエスト間で保持すればいいだけです。2.1ではデータテーブルのような複雑なコンポーネントでもこの方法が使えるように小さな改善を加えました。JSF 2.2では大きな変更を加える予定はありません。
InfoQ: JSFはいわれのない非難を受けますか。昔に比べ劇的に改善しているにもかかわらず、そのことが知れ渡っていないのでしょうか。
JSFは実績のある成熟した技術で世界中のビジネスクリティカルなアプリケーションで使われています。
他の似たようなフレームワークとの比較でJSFについて多くのことが指摘されてきました。そのような指摘からわかるのは完璧なウェブフレームワークは存在しないということです。すべてのフレームワークは抽象であり、その抽象を維持するために必要な処理を肩代わりしてくれるのです。思うに最良のフレームワークとは"製品を市場に投入するまでの時間"と"メンテナンスの苦痛"のバランスを上手く取ってくれるものなのでしょう。
JSFが1.0の頃から劇的に改善しているというのは幅広く知れ渡っていると思います。Jevgeni Kabanov氏の2011年のZeroTurnaround Developer Productivity Surveyによれば、JSFは最も人気のあるウェブアプリケーションフレームワークです。
多くのフレームワークが異なるトレードオフを持っているのは真実だ。確かにJSFは1.0の頃と比べ劇的に改善した。.
Jevgeni Kabanov氏の2011年のZeroTurnaround Developer Productivity Surveyは確かにJSF普及の指標となるだろう。しかし、JSFが認められた証拠にはならない。この報告書によれば、JSFとSpring MVCのどちらが勝者なのかは明確にはわからない。SpringのユーザとSpring MVCのユーザを別々に計測できないからだ。多くの開発者がSpringと他のフレームワーク(Struts 1、Struts 2、Wicket、Stripes、Tapestryなど)を組み合わせている。Springを使っていればSpring MVCも使っていると考えるのが自然だ。報告書によればJSFとSpring MVCは同じくらい普及していると思われるがそれを証明するのは難しい。"残念ながら、Springの利用者とSpring MVCの利用者を分別できないが、少なくともSpring MVCはJSFと同等に普及している。他のフレームワークが10%程度を占めており、GWTが10%をわずかに上回る程度に普及している3番目に人気のフレームワークだ。"