Java EE 7でさらに使いやすく、便利になったJSF 2.2、CDI 1.1、EL 3.0の主な強化ポイント

Oracle Java & Developers編集部
2013-09-30 11:00:00
  • このエントリーをはてなブックマークに追加

2013年6月にリリースされたJava EE 7でさらなる機能強化が図られた「JSF 2.2」と、AOP技術の「CDI 1.1」、式言語の「EL 3.0」では、何がどう新しくなっているのだろうか? 主なポイントを紹介する。

"HTML5フレンドリー"になったJSF 2.2

 2013年6月にリリースされたJava EE 7では、プレゼンテーション層の開発を担うJavaServer Faces(JSF)の機能が拡充されてバージョン2.2となったほか、Aspect Oriented Programming(AOP)機能のCDI(Contexts and Dependency Injection)、式言語であるExpression Language(EL)の機能も強化されるなど、開発生産性のさらなる向上が図られている。

 日本オラクルが8月22日に開催した「リリース記念:今から始めるJava EE 7解説セミナー」において、アイエックス・ナレッジ サービスインテグレーション事業部 ICTソリューション部 マネージャーの加藤田益嗣氏により、実際に利用する開発者の立場から、それらの強化ポイントを概観するセッション「What's New JSF 2.2&CDI&EL」が実施された。同セッションの内容を基に、新しくなったJSF、CDI、ELの特徴を紹介しよう。

 セッションの冒頭では、まずセミナーを企画した日本オラクル シニアJavaエバンジェリストの寺田佳央氏により、JSFの概要が説明された。

 JSFは、Webアプリケーションのアーキテクチャ・モデルであるMVC(Model-View-Controller)の「View」に当たる要素を作り上げるためのテクノロジーだ。JSFを使うことにより、ユーザー・インタフェース(UI)とビジネス・ロジックを疎結合にして、見通し良く開発を行うことが可能になる。Java EE 7では、このJSFとCDI、そして両者をバインディングするためのEL、およびデータ永続化処理を担うJava Persistence API(JPA)を組み合わせて使うことで、旧来StrutsやSpring Framework、Hibernateなどの独自フレームワークを組み合わせて構築していたのと同様のシステムを、Java EEの標準技術だけによって従来よりも容易に構築することが可能になった。


※クリックすると拡大画像が見られます

※クリックすると拡大画像が見られます

 寺田氏によれば、最新のJSF 2.2では、"HTML5フレンドリー"を強く意識した機能拡張が行われているという。JSFのコードは、WebページのHTMLタグの中にわかりやすく埋め込むことができ、これにより「開発者とデザイナーが同じコードを見ながらスムーズにUI作成を行えるようになっている」(寺田氏)という。

 JSFで作ったWebブラウザ画面とサーバ間におけるデータのやり取りや表示、イベント処理の実装では、CDIとELを使用する。これらを使うメリットとして、寺田氏は次のような点を挙げる。

【JS、CDI、ELを組み合わせて使うメリット】

  • 標準ベースである
  • 開発生産性が高い
  • View(UI)とビジネス・ロジックを明確に分離できる
  • 必要な設定ファイルが少ないため、保守性が高い
  • コンポーネントの再利用が容易

※クリックすると拡大画像が見られます

※クリックすると拡大画像が見られます

JSF 2.2で追加された目玉機能は4つ


アイエックス・ナレッジ サービスインテグレーション事業部 ICTソリューション部 マネージャーの加藤田益嗣氏

 寺田氏がJSF、CDI、ELの基本的な説明を終えると、続いて加藤田氏が登壇。冒頭で氏は、JSFによる開発と、他のフレームワークによるWebアプリケーション開発の最大の違いとして「コンポーネント・ベースの開発」である点を強調した。

 「JSFによる開発は、StrutsやRuby on RailsなどのようなHTTPリクエスト・ベースでの開発ではなく、画面に配置したコンポーネントに処理をひも付けるコンポーネント・ベースの開発になる点が大きなポイントです。そのため、HTTPリクエストを強く意識する必要はなく、Visual Basicと同様のスタイルでWebアプリケーションを作っていくことができます」(加藤田氏)

 JSFは、Java EE 5で初期のバージョンが採用され、2009年にリリースされたJava EE 6でバージョンJSF 2へとバージョンアップされた。このJSF 2では、Faceletsが導入され、JSPを使わずに、より容易に開発が行えるようになったほか、Ajax対応やブックマーク対応の改善、複合コンポーネントへの対応、アノテーションの導入による煩雑な設定記述の排除など、大規模な機能強化が図られている。

 その後、2013年3月にJSF 2.2の仕様が確定すると、それが最新版としてJava EE 7に導入された。加藤田氏は、JSF 2.2で追加された主な新機能として次の4つを挙げる。

【JSF 2.2の主な新機能】

  • HTML5のサポート
  • リソース・ライブラリ・コントラクト
  • Facesフロー
  • ステートレス・モード

 「HTML5サポート」は、HTML5の仕様そのものに追加されたタグや属性への対応だ。また、「パススルー・アトリビュート」が導入されたことにより、定義が未確定なタグ属性については、JSF上では特に処理を行わず、そのままHTML上に出力することが可能になった。


※クリックすると拡大画像が見られます

 「リソース・ライブラリ・コントラクト」は、テンプレートやスタイルを切り替えるための仕組みだ。スタイルシートやJavaScript、JSFコンポーネントなどをひとまとめにして動的に切り替えることが可能であり、これによってリソースの配布や切り替えが、従来よりも容易に行えるようになっている。


※クリックすると拡大画像が見られます

 「Facesフロー」は、画面遷移を「フロー」というまとまりで管理する機能だ。あらかじめ、この「まとまり」を宣言しておくことで、特定の画面遷移中に「FlowScope」と呼ばれる対話スコープが提供され、このフロー内を遷移している間は同一のセッションが保持される。複数画面を遷移するショッピング・カートや予約システムなどの画面開発で威力を発揮する機能である。


※クリックすると拡大画像が見られます

 加藤田氏が「JSFとしての大きなパラダイム・シフト」として注目するのは、4つ目の新機能である「ステートレス・モード」だ。これは、サーバ側ではコンポーネント・ツリーを保持せず、「クライアントからのアクセスがある度にコンポーネント・ツリーを作り直す」という動作を行うモードである。

 「従来のJSFでは、サーバ側でコンポーネント・ツリーを保持するステートフルが前提だったため、サーバ側でラウンドロビンするようなステートレスなシステムを開発することはできませんでした。今回、ステートレス・モードが追加されたことで、JSFでもステートレスな画面開発が可能になっています」(加藤田氏)


※クリックすると拡大画像が見られます

 その他の機能改善としては、「ファイル・アップロード機能の提供」、「CSRF(クロス・サイト・リクエスト・フォージェリ)対策」、「View、Actionの追加」、「カスタム・コンポーネント・アノテーションへの対応」などがあるという。