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

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

桜の花が色づくこの時期、新入社などを機に、初めてJava EE開発に取り組むという方は少なくないだろう。本企画では3回にわたり、日本オラクルのエンジニアらが最新の情報に基づく"Java EE開発のキホン"を解説する。

 本企画では、Java EE開発に初めて挑む方に向けて、日本オラクルのエンジニアらがJava EEの基本を解説する。初回となる今回は、オラクルの研修サービスであるオラクルユニバーシティで個人や企業に向けたJava SE/Java EE研修コースの企画に携わる岡田大輔氏(オラクルユニバーシティ ビジネス推進部 担当マネジャー)が、Java EEの概要を解説する。

Java EEは企業システム開発に必要な機能を標準化したフレームワーク

日本オラクル オラクルユニバーシティ ビジネス推進部 担当マネジャーの岡田大輔氏
日本オラクル
オラクルユニバーシティ ビジネス推進部
担当マネジャーの岡田大輔氏

 この企画では、Java EEへの第一歩を踏み出す方に向けて、Java EE開発の基礎知識を解説していきます。次回以降は実際に手を動かしながらJava EEの主な機能の使い方を学んでいただきますが、それに先立ち、今回はJava EEとはどのような技術なのかをご説明しましょう。

 「Java EE(Java Platform, Enterprise Edition)」は、プログラミング言語のJavaによって企業システムを開発するための標準仕様です。企業システムを実現するためにはさまざまな機能が必要になりますが、それらを1つ1つ仕様として標準化し、大きな仕様群としてまとめたものがJava EEなのです。具体的には、次の2つの要素について標準化しています。

  • 企業システムの機能として実装されるコンポーネントを作るための約束事(仕様)
  • コンポーネントからデータベースなどのインフラ・サービスにアクセスするためのAPI(Application Programming Interface)

 これらが標準化されているため、一度開発したアプリケーションを、Java EEに対応したさまざまな実行環境(アプリケーション・サーバ)の上で動かすことが可能となるのです。この移植性(ポータビリティ)の高さが、Java EEの大きな特徴です。開発したアプリケーションを、サーバ・マシンやアプリケーション・サーバを変えても引き続き使い続けられるため、企業は長期間にわたってソフトウェア資産を保護し続けることができるのです。

Java EEの仕様はコミュニティによるオープンなプロセスで策定

 Java EEを含むJava関連技術の仕様は、企業や団体によって構成されるオープンなコミュニティ「Java Community Process(JCP)」で策定されています。どのような仕様を策定するのか、どのような議論を経て策定しているのかといった情報は逐次公開され、策定中の仕様に対して誰でも意見を述べることができます。このオープン性も、Java EE(およびJava)の大きな特徴の1つだと言えます。

Java Community ProcessのWebサイト
Java Community ProcessのWebサイト

 なお、JCPに参加するITベンダーの1社であるオラクルは、仕様策定にかかわるとともに、Java EE対応アプリケーション・サーバとして、商用製品である「Oracle WebLogic Server」やオープンソース・プロダクトの「GlassFish」を提供しています。

プレゼンテーション層、ビジネス層、永続化層から成るアプリケーションの作り方を規定

 それでは、企業システム開発のためのJava仕様であるJava EEでは、どのような仕様を規定しているのでしょうか。

 企業システムの歴史を振り返ると、1980年代以降にエンドユーザーが利用するクライアント・アプリケーションから直接データベースを操作するクライアント/サーバ型のシステムが広く普及し、データの操作や表示制御を行う処理ロジックがクライアント側に集中した時代がありました。しかし、個々のクライアントに処理ロジックが集中すると、アプリケーションを修正する度にクライアント側プログラムの更新が必要となり、システム全体のメンテナンス性が著しく低下してしまいます。

 そこで、この問題を解消するため、クライアント/サーバ間に中間層を設けた多階層(n階層)のシステム・アーキテクチャが登場します。Java EEは、この多階層型のシステムをJavaで構築するための技術として登場しました。

 Java EEでは、システムを効率的に開発/保守していくには、どのようなコンポーネントの配置が適切かを検討した結果、中間層を次の3つに分けて考えます。

  • プレゼンテーション層(Web層)
    データの表示を制御する。今日ではWebブラウザでの表示を前提とする場合が多いため、Web層とも呼ばれる
  • ビジネス層(ビジネス・ロジック層)
    データの処理を行う。いわゆるビジネス・ロジックが置かれる
  • 永続化層
    データソースへのアクセスを行う。データの保存/読み込みを行うため、永続化層と呼ばれる。データソースの代表例はデータベースだが、ファイルシステムや外部サービスなどにアクセスする場合もある

 これらの層から成る企業システムの標準的な作り方を規定しているのが現在のJava EEです。このような考え方に基づくシステム構築技術はJava EEのほかにもありますが、プログラムの作り方から呼び出し方まで、すべてを仕様として標準化している点が大きな特色です。この仕様に従ってコンポーネントを作り、またインフラ・サービスを呼び出すプログラムを作れば、どのJava EE対応アプリケーション・サーバ上でも正しく動作することが保証されるわけです。

Java EEのベースはJava SE

 こうした特色を備えるJava EEは、Java SEをベースにしています。両者の関係を図で表すと、次のようになります。

 つまり、デスクトップ・アプリケーション開発のための技術であるJava SEに、企業システムを作るための機能を追加したスーパーセットがJava EEになります。したがって、Java EEを使う場合には、その下部で必ずJava SEを使います。例えば、何かプログラムを作る際には大抵、文字列を扱うクラスとしてStringを使いますが、このクラスはJava SEで定義されています。Java EEによる開発では、基本的な機能としてJava SEを使いつつ、企業システムに必要な付加機能としてJava EEを使うわけです。

Java EEは、どのような経緯で現在の仕様になったのか

 Java EEの最新バージョンは、2013年6月にリリースされたJava EE 7です。また現在、世界中の企業システムで広く利用されつつあるのは、2009年12月にリリースされたJava EE 6です。本企画では、このJava EE 6に基づいて説明しますが、前提知識として、このバージョンに至るまでにJava EEがどのような変遷をたどってきたのかを簡単に説明しておきましょう。

 Java EEが初めて登場したのは1999年のことです。当時は「Java 2 Platform, Enterprise Edition(J2EE)」と呼ばれており、最初のバージョンは1.2でした。J2EE 1.2は、プレゼンテーション層を開発するためのJava ServletやJSP(JavaServer Pages)、ビジネス層を開発するためのEJBといった機能を備えた、企業システム開発の標準仕様として登場し、その後、J2EE 1.3、同1.4とバージョンアップする中で順次、機能拡張が行われてきました。

 しかし、当時のJ2EEは企業システムの実現に必要な機能を充足することに力を入れて機能強化が行われており、Webアプリケーションなどの開発を簡易化するための機能は不足していました。そこで、そうした機能については、オープンソースのフレームワークなど外部フレームワーク(サードパーティ・フレームワーク)で補うというアプローチが長く続きました。今日でも利用されているStrutsやSpring Framework、Hibernateなどは、この流れの中で普及したフレームワークですし、そのほかにもさまざまなフレームワークが考案され、J2EEを補完するかたちで使われてきました。

 もっとも、開発を簡易化する機能が不足しているのならば、それをJava EE自体に補うのが本筋です。そこでJava EE 5(このバージョンより、J2EEという呼称を改め、Java EEという呼称が使われ始めます)からは大きく舵を切り、「開発の簡易化(Ease of Development)」を高いレベルで実現するための機能強化が行われます。このような経緯を経て、機能面でも開発生産性の面でも極めて高いレベルに達したフレームワークが今日のJava EEなのです。

Java EE 6の主な機能とアーキテクチャ

 ここからは、Java EE 6に基づいて説明していきましょう。次の図は、Java EE 6に含まれる仕様を列挙したものです。この図から、Java EEにはさまざまな機能が用意されていることがおわかりいただけるでしょう。

 これらの機能のうち、Java EEによるアプリケーション開発に初めて取り組む皆さんには、一般的なWebアプリケーションの開発で必要となる次の機能から取り掛かることをお勧めします。

【Java EE 6によるWebアプリケーション開発で使う主な機能】

機能 対象領域 役割
JSF(JavaServer Faces) 2.1 プレゼンテー
ション層(画面)
高機能なユーザー・インタフェースを効率的に作るためのWebアプリケーション・フレームワーク
Java Servlet 3.0 JSFが内部的に使用しているサーバ・サイドのコンポーネント技術。JSFによるWebアプリケーション開発では使用頻度が低いが、非同期処理が必要な場合には、Java Servletのコンポーネントであるサーブレットを作成する
EJB 3.1 ビジネス層 ビジネス・ロジックの開発に使用。高度なトランザクション制御機能を備える。EJBで開発したコンポーネントをEJBコンポーネントと呼ぶ
JPA(Java Persistence API) 2.0 永続化層 Javaプログラムから、通常のJavaオブジェクトと同様にデータベースの操作が行えるようにするオブジェクト/リレーショナル(O/R)マッピング・フレームワーク
JAX-RS サービス公開 作成したコンポーネントをWebサービスとして公開するための機能
CDI(Container Dependency Injection) 全領域 「依存性の注入(DI:Dependency Injection)」機能を備えたDIフレームワーク。上記各層のコンポーネント間をアノテーションによって連携させるための規約を定めている。CDIを使うことで、各層の密結合を防ぎ、アプリケーション開発/保守時のテストが容易になるというメリットが得られる

 また、これらの機能を使ったJava EEによるWebアプリケーションのアーキテクチャは、次の図のようになります。

 以降では、先の表に挙げた機能のうち、中心となるJSF、EJB、JPA、CDIの概要を説明します。