初めてのJava EE 6──第1回 Java EEとは、どのようなフレームワークか?

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

JSF─画面単位でWebアプリケーションを作るためのフレームワーク

 Java EEによるWebアプリケーションでは、プレゼンテーション層の開発にJSFを利用します。JSFはWebアプリケーションの画面を作るためのフレームワークであり、開発者はこれを使って画面制御に関する部分を作ります。

 JSFによるWebアプリケーション(JSFアプリケーション)では、GUIを備えたデスクトップ・アプリケーションと同様に、コンポーネント・ベースで処理を行います。画面(Webページ)の開発でも、画面を構成する要素をコンポーネントとして開発してJSFタグで指定するといったかたちで画面表示に必要な処理を記述していきます。Ajaxもサポートしているので、インタラクティブでリッチなWebアプリケーションを簡単に作ることができます。

 次の図は、JSFアプリケーションの動作の仕組みを表したものです。

 JSFアプリケーションでは、上の図中にも示した次の3つの要素が中心的な役割を果たします。

  • FacesServlet(コントローラー)
    クライアント(Webブラウザ)とのやり取りの窓口の役割を果たす。リクエストを受け取ると適切なコンポーネントに処理を受け渡し、処理結果をクライアントに送り返す
  • XHTML(Facelets)
    画面の構成要素を記述する。XHTML内にJSFのタグを記述すると、そのタグに対応したコンポーネントが必要な処理を行う。処理の結果はコンポーネント・ツリーとして構成され、それがレンダリングされたものがレスポンスとなる
  • マネージドBean(Managed Bean)
    画面遷移やビジネス・ロジックの呼び出し、入出力値の管理などを行うコンポーネント

 これらのうち、FacesServletはJSFのフレームワークが提供するものであり、開発者は残る2つ(XHTMLとマネージドBean)をアプリケーションごとに作成します。

 かつてのJava EEでは、Java ServletやJSP、XMLなどを使って画面表示や遷移などのさまざまな処理コード/設定を書かなければなりませんでしたが、JSFではそうした煩雑な作業の多くが不要となりました。また、ユーザーによる入力値のチェックなど、Webアプリケーションで必ず必要となる機能がデフォルトで用意されているので、Webアプリケーションを効率的に作ることができます。

EJB─高度なトランザクション機能でデータベース・アクセスを制御するフレームワーク

 一方、ビジネス層に関しては、基本的にEJBを使います。EJBを使わずに、CDIと通常のJavaクラス(POJO:Plain Old Java Object)によって作ることも可能ですが、EJB(EJB 3.1)にはトランザクションを制御する機能が備わっているので、これを使ったほうが信頼性の高いアプリケーションを簡単に作れます。

 ちなみに、以前のEJBはコンポーネントを作るうえでの決まり事が多く、開発作業が大変だったのですが、現在のEJBはそうした決まり事がシンプルに整理され、通常のJavaクラスを作るのと同じような感覚でコンポーネントを開発できるようになっています。

JPA─データベースへのアクセスを簡易化するO/Rマッピング・フレームワーク

 データベースへのアクセスなど永続化層の処理の開発には、JPAを使います。JPAは、RDBMSのテーブルに格納されているレコードをJavaオブジェクトとして扱えるようにしてくれるO/Rマッピング・フレームワークです。JPAを使うことで、「Javaオブジェクトのフィールドを書き換えると、それがデータベースのレコードに反映される」といった具合に、データベースのことを意識せずにデータの永続化や読み込みの処理を書けるようになります。

 なお、Javaには、データベースにアクセスするための仕組みとして「JDBC」という機能も用意されています。JDBCを使う場合は、SELECT文やUPDATE文などデータベースを操作するためのコードをJavaプログラム内に直接記述します。そのため、SQL文に関する知識が必要となりますが、JPAを使う場合、そうしたコードを書く必要はありません。Java EE 6によるアプリケーションでデータベースを操作する場合は、まずJPAを使いましょう。ちなみに、JPAはJava EEだけでなく、Java SEでも使うことができます。

CDI─各層のコンポーネントを柔軟に結合するDIフレームワーク

 以上に説明した各層のコンポーネントを柔軟に結び付ける役割を果たすのがCDIです。CDIでは、プレゼンテーション層のJSFからビジネス層のEJBコンポーネントを呼び出すといった層をまたいだコンポーネント間アクセスの方法を標準化しています。

 また、CDIはオブジェクトの寿命(ライフサイクル)を管理する機能を備えており、例えばあるセッションだけで有効なオブジェクトや、あるリクエストだけで有効なオブジェクトなど、オブジェクトの有効期間を指定して生成することができます。

 以上に説明したJava EEの各機能には、Java EEや周辺技術が発展する過程で登場してきたさまざまな技術の長所や反省が取り込まれ、使いやすく整理されています。そのため、簡潔な手順で、高機能かつ信頼性の高いWebアプリケーションを作ることができるのです。

Java EE対応アプリケーション・サーバの役割

 Java EEで開発したWebアプリケーションは、最終的にJava EE対応アプリケーション・サーバの上に配備(デプロイ)して実行します。今回は最後に、このJava EE対応アプリケーソン・サーバが果たす役割についても説明しておきましょう。

 先に述べたように、Java EE対応アプリケーション・サーバは、Java EEの規格に準拠して作られたアプリケーションの実行環境となります。具体的には、次のような役割を果たします。

  • Java EEで開発されたWebアプリケーションを実行する
  • Webアプリケーションが動作する際に必要となるデータベース・アクセスやトランザクション管理、認証/認可、ネーミング・サービスなどの仕組みを提供する

 つまり、Java EE対応アプリケーション・サーバは、Java EEアプリケーションの動作に必要となるサービスを提供するインフラに当たるわけです。Java EE対応アプリケーション・サーバがデータベース・アクセスなどの基本的な処理を行ってくれるので、開発者は前節で説明した機能を使って個々のアプリケーションに目的の処理を作るだけで、高機能かつ高品質なWebアプリケーションを実現できるのです。

 また、Webアプリケーションの保守の面でも、Java EE対応アプリケーション・サーバは重要な役割を果たします。先に説明したように、かつてのJava EEには機能面で不足している部分があり、それをサードパーティ・フレームワークを組み合わせるなどして開発者側で独自に補っていました。そのようにして作られたアプリケーションは、個別フレームワークのバージョンアップやセキュリティ・パッチの適用などを開発者自身が行わなければならず、開発後の保守フェーズで大きな負担がかかります。さらに、独自に追加したフレームワークが何らかの理由で開発中止となった場合は、自力でバージョンアップし続ける、あるいはアプリケーションを大幅に改修して別のフレームワークに移行するといったことも必要になります。

 しかし、現在のJava EEはそうした機能が標準仕様として備わっているため、開発者が独自にフレームワークを追加する必要はありません(もちろん、用途に応じてフレームワークを追加することもできます)。そして、Java EEの機能が追加/改善されるなどしてバージョンアップされた場合には、それにJava EE対応アプリケーション・サーバの側で対応してくれます。この保守の容易さや、特定のフレームワークに依存しない(ロックインされない)といった点は、Java EE 6のような最新のJava EEを使う大きなメリットだと言えます。

 以上、Java EE 6を例にとり、Java EEの概要を紹介しました。次回からは、今回概要を紹介したJSF、EJB、JPAについて、もう少し詳しく説明していきます。なお、オラクルユニバーシティでは、Java EE 6 に対応した研修コースを開講しています。コースの詳細については、下記のオラクルユニバーシティのWebサイトでご確認ください。

【関連記事】

PaaSといっても、何を検討すればよいのか、違いがわからない…という方へ、Oracle Cloudの概要セミナーを開催!

オラクルのパブリッククラウドの成り立ちや代表的なサービス、価格体系等のクラウドサービスの基本情報から、具体的な活用事例までご紹介します。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]