Java EE 7 プレゼンテーション層のキホン──『Java EE 7徹底入門』番外編 第1回

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

企業システム開発の標準フレームワークとして大きく進化したJava EE 7。そのプレゼンテーション層を担う「JSF 2.2」とは、どのような技術なのか? 昨年末に刊行された書籍『Java EE 7徹底入門』の著者が解説する。

 日本Javaユーザーグループ(JJUG)は2016年2月、東京 青山の日本オラクル本社において「JJUGナイトセミナー ─『Java EE 7徹底入門』の著者が解説!-Java EE 7特集」を開催した。同セミナーは、昨年12月に刊行された書籍『Java EE 7徹底入門 標準Javaフレームワークによる高信頼性Webシステムの構築』(翔泳社刊)の著者である日本オラクルのスペシャリストらが、執筆を担当したテーマについて未収録の内容も交えて解説するというものだ。本企画では、“Java EE 7徹底入門:番外編”として、そこで実施された4つのセッションの内容を3回にわたってお届けしていく。初回となる今回は、「Java EE 7の概要」と「プレゼンテーション層の開発」をテーマにしたセッションの要旨を紹介しよう。

「日本語による技術情報の不足」という問題を解決すべく『Java EE 7徹底入門』を執筆


日本オラクル クラウド・テクノロジーコンサルティング統括本部の猪瀬淳氏

 執筆者の代表として最初のセッション「Java EE 7徹底入門 概要説明」に登壇したのは、日本オラクル クラウド・テクノロジーコンサルティング統括本部の猪瀬淳氏である。

 ご存じのとおり、Java EE 7はエンタープライズ・システム向けJavaフレームワークの標準として2013年7月にリリースされた最新仕様だ。Java EEは、前身となるJ2EE時代にオープンかつ統合的なエンタープライズJavaの仕様として普及したが、一方でその扱いの難しさや難解さ、重たさなどが問題視された。このことが、その対策として活用が広まったStrutsやSpring Frameworkといったサードパーティ・フレームワークの乱立を招く一因となった。また、企業システムの開発で利用する際、不足する機能を補うために複数のフレームワークを組み合わせて使うことで開発/保守コストが増大したり、サードパーティ・フレームワークの開発停滞/中止によってアプリケーションに脆弱性が残ってしまったりといった問題も指摘されていた。

 そこで、2006年にリリースされたJava EE 5以降、そうした過去の反省も踏まえつつ、サードパーティ・フレームワークで高い評価を得ていた機能も取り込みながら、より開発生産性が高く、軽量な標準フレームワークにすることを目指して改良が重ねられてきた。そして最新のJava EE 7は、開発者のニーズが高かった新機能も加えつつ、将来も見据えたエンタープライズ・アプリケーション開発の標準フレームワークに仕上がっている。


Java EE 7徹底入門(発行:翔泳社)

 猪瀬氏は、『Java EE 7徹底入門』の執筆陣が目指したゴールとして、「最新のJava EE 7について日本語による情報を提供すること」、「網羅的に紹介するよりも、実践的な機能解説に比重を置くこと」、「内容に即して、スニペットではなく、完全に動作するサンプル・コードを提供すること」などを挙げた。これにより、企業アプリケーションの新規開発プロジェクトでフレームワークを検討する際、Java EE 7が筆頭候補に挙げられるような環境を整えたかったのだという。

 『Java EE 7徹底入門』では、サンプル・アプリケーション「ナレッジバンク」の開発を通して、アプリケーションの各層で使われるJSF(JavaServer Faces)、CDI(Contexts and Dependency Injection)、EJB(Enterprise JavaBeans)、JAX-RS、jBatch(Batch Applications for the Java Platform)といった主要APIの解説を行うという構成を採っている。

 なお、昨年末の刊行に至るまでには、さまざまな苦労があったようだ。例えば、書籍の執筆は初めてのメンバーが多かったため、執筆とレビューに思いの外時間がかかった。また、刊行直前になってサンプルの実行環境として想定していた「GlassFish」がバージョンアップされ、一部が動作しなくなるという問題が生じた。これについてはダウンロード版のサンプルに「動作ガイド」として対処方法を記載することで対応している。

  『Java EE 7徹底入門』は、表紙を飾る"白猫"の写真が印象的だ。これについては、「"Tomcat"や(NetBeansの日本におけるマスコット・キャラクターである)"ねこび~ん"など、Javaは何かと猫と縁があることから思いついた」(猪瀬氏)という。

Java EE 7におけるプレゼンテーション層開発の標準技術「JSF」とは?


日本オラクル クラウド・テクノロジーコンサルティング統括本部の加藤田益嗣氏

 猪瀬氏に続いて登壇したのは、日本オラクル クラウド・テクノロジーコンサルティング統括本部の加藤田益嗣氏だ。加藤田氏は『Java EE 7 徹底入門』において、「プレゼンテーション層の開発」と題した2~4章の執筆を担当し、JSFによるフロントエンド開発の基礎から応用までを解説している。

 「JSFに関する説明は、当初80ページ程度で行う予定でしたが、読者の皆さんに伝えたいことが多く、最終的に1章を追加し、全体の3割程度となる約150ページまでボリュームが膨らみました」(加藤田氏)

 加藤田氏はセッションの中で、サンプル「ナレッジバンク」のデモを交えつつ、そのフロントエンド作成に用いたJSFの概要と構成要素、さらには紙幅の都合から書籍では割愛した関連情報について説明した。以下に、その要旨を紹介する。

JSFの基本要素──フェースレットとマネージドビーン

 JSFとは、Java EE 5から導入されたプレゼンテーション層開発のためのフレームワークであり、Java EE 7では最新バージョンのJSF 2.2が採用されています。

 プレゼンテーション層のフレームワークは、主にWebブラウザの画面とサーバ間の処理を担当します。JSF登場以前のJ2EEでは、主にサーブレットとJSP(JavaServer Pages)で作っていましたが、HTTP通信処理に関して低レベルの機能しか提供していなかったため、値のマッピングや入力値のチェックなど、Webアプリケーションで一般的に必要とされる機能が標準技術(サーブレットとJSP)だけではカバーできないという状況が生じていました。その結果、そうした機能を備えたStrutsなどのサードパーティ・フレームワークを併用した開発スタイルが普及したのです。

 JSFは、それらの機能をJava EEの標準技術として提供することを目的に開発されました。JSFを使ったJava EEアプリケーションのプレゼンテーション層の構成は、次の図のようになります。

 ご覧のとおり、これまでStrutsやSpring MVCを利用していた部分にJSFを使うことで、Java EEの標準技術だけでWebアプリケーションのフロントエンドを開発できるようになるのです。

フェースレットの基礎

 JSFの構成要素には、大きく分けて「フェースレット(Facelet)」と「マネージドビーン(Managed Bean)」の2つがあります。

 このうち、フェースレットは画面のレイアウトを生成するXHTMLベースのテンプレート・エンジンであり、JSF 2.0からJSPを代替してフロントエンドを作るための機能が実装されています。JSPの使いづらい部分や弱点を改善するかたちで仕様が策定されており、JSPと比較した場合の特徴としては次が挙げられます。

  • XHTMLを使うため、記述がより厳密である
  • 内部にスクリプトレットを記述することはできない
  • デフォルトで文字列のサニタイジングを行う
  • 文字列内のnullは空文字として表示する
  • タグ・ライブラリとしてテンプレート機能が用意されている

 フェースレットは、基本的にHTMLと同様に記述します。次に示すのは、Webアプリケーションのアカウント登録画面の記述例です。

 フェースレットは、大きく「フェースレット・タグ・ライブラリ」と「EL(Expression Language)式」で構成されます。次に示すのは、サンプル・プログラムのソースコードの一部です。

 「<h:」で始まるタグは、フェースレットで提供されるタグ・ライブラリを使うためのものです。また、その中に書いた「value=」に続く部分がEL式です。オブジェクト名をピリオド(.)でつないだ表記により、フォームで入力された内容をマネージドビーンにバインド(紐付け)します。図の下部に記述した登録ボタンのタグでは、アクション(action=の値)としてEL式で呼び出すメソッドを指定しています。

マネージドビーンの基礎

 マネージドビーンは、フェースレットとバインドして呼び出すJavaクラスであり、フェースレットで入力された値の保持や、ボタンがクリックされた際の処理などを受け持ちます。

 マネージドビーンの構成要素は、「スコープ」、「バインドする値」、「ビジネスロジックの呼び出し」、「画面遷移」の4つです。次の図に示すのは、サンプルでアカウント登録を行うマネージドビーンのソースコードです。各要素がコードのどの部分に該当するのかがおわかりいただけるでしょう。

 このマネージドビーンとフェースレットの関係を図示すると、下図のようになります。

 画面上のフォームとオブジェクト内の要素をEL式でバインドし、ビジネスロジック層の処理に引き渡すわけです。JSFによるアプリケーション開発は、この図に示したように各コンポーネントを軸にして行うため、"コンポーネント指向"だと言われます。

 『Java EE 7 徹底入門』では、以上の知識をベースにして、さらに「スコープとは何か」、「画面遷移はどのように書くのか」といったことについて詳しく解説しています。