はじめに
エンタープライズアプリケーション向けのJavaの仕様「Java EE」の現行バージョンは「Java EE 5」です。このJava EE 5は、EJB 3.0を中心にDependency InjectionやPOJOを用いたO/Rマッピングなど、Java EE/J2EEの主流に対するオルタナティブとして出てきた技術を取り込んだ、従来のJava EE/J2EEから大きく変化したバージョンでした。
このJava EE 5のリリースから2年以上の時間が経ち、次期仕様である「Java EE 6」は仕様策定状態ですが、あまりまとまった情報がありません。そこで、本稿ではJava EE 6に含まれる予定の技術を解説し、今後のエンタープライズ分野のJavaが進む方向について考察したいと思います。
従来の技術の進化
はじめに、従来のJava EEに含まれている技術がJava EE 6でどのように進化していくのか、代表的なものを見ていきましょう。
EJB 3.1
Java EE 5における1番大きな変化は、Dependency Injection(DI)やPlain Old Java Object(POJO)、アノテーションといった従来のJ2EEには無かった技術を取り入れた「Enterprise JavaBeans(EJB) 3.0」でした。Java EE 6に含まれる「EJB 3.1」もこの流れを踏襲しています。
EJB 2.x以前は1つのEJBを作成するために、Beanの実装ファイルに加え、ビジネスインターフェイス、ホームインターフェイス、XMLで記述されたデプロイメントディスクリプターが必要でした。
EJB 3.0ではアノテーションでEJBのメタデータを記述できるようになったため、デプロイメントディスクリプターの作成が必須ではなくなりました。また、ホームインターフェイスも廃止され、Beanの実装ファイルとビジネスインターフェイスのみでEJBを作成できるようになりました。Bean実装ファイルも、従来必要であったコールバックメソッドの作成などが必須でなくなり、簡単にEJBを作れるようになりました。
EJB3.1ではこの流れを受け継ぎ、ローカルからアクセスするEJBは、ローカルビジネスインターフェイスも省略できるようになります。これにより、ローカルからのみアクセスされるEJBは、Bean実装ファイル1つで作成できるようになり、EJB 2.xの時代と比べると格段に簡略化されています。
また従来のEJBは、「EJB-Jarファイル」と呼ばれる1つのJar形式でアーカイブされたファイルに格納される必要がありましたが、EJB 3.1からは@Stateless
などEJB関連の「アノテーション」が付与されたBeanをクラスパス上に配置すれば、それがEJBとして認識されるようになります。このためWebアプリケーションのアーカイブ形式であるWARファイルでは、「WEB-INF/classes」以下にEJBの実装ファイルを配置すれば、それをEJBとして利用することも可能です。
このように従来のアプリケーションでは、EJBを利用するためには、EJBをEJB-Jarファイルに格納し、Webアプリケーションに関連する部分はWARファイルに格納しそれをEARファイルにまとめるなど、少々面倒なプロセスが必要でしたが、 EJB3.1からは1つのアーカイブでEJBを用いたWebアプリケーションを作成できるようになります。
JPA 2.0
従来のJ2EEでBeanとデータベーステーブルのデータマッピングを受け持っていた「Entity Bean」は、あまり使い勝手が良いとは言えませんでした。そこで、EJB 3.0では新たにO/Rマッピングのフレームワークとして「Java Persistence API(JPA)」がリリースされました。Java EE 6では、このJPAがEJBとは別の仕様として分割され、「JPA 2.0」という1つの仕様になります。
JPA 2.0では、検索言語であるJPA-QLの拡張、実装により異なっていた設定ヒントの標準化など、従来のJPAで使い辛かったところを中心とした拡張が図られます。また、JSR-303で仕様策定中の「Bean Validation」を用いた、アノテーションによるBeanの入力値検証機能なども含まれる予定です。検索に関しても、従来のJPA-QL検索文による検索に加え、APIを用いて条件を搾っていく「Criteria Query」機能が搭載される予定です。
パッケージングに関しても、JPA関連のメタデータを記述した「persistence.xml」は従来EJB-Jarの中に含まれていましたが、クラスパス上に配置すればいいようになります。こちらもEJB 3.1の流れを踏襲する方向に進みそうです。
Servlet 3.0
最近のJ2EE/JavaEEではあまり大きな改良が加えられなかったServletの仕様ですが、Java EE 6では大きく進歩し「Servlet 3.0」へとバージョンアップします。
Servlet 3.0では、アノテーションを用いてServletに関するメタデータを記述できるようになります。これにより今まで必須だった「web.xml」がオプションになります。また、従来HttpServlet
クラスのようなJ2EE/JavaEEの仕様が提供する親クラスを継承してServletを作成していましたが、アノテーションにより、そのクラスがServletであることや、どのメソッドがGET・POSTなどのリクエストを処理するか特定できるため、任意のJavaオブジェクトをServletとして利用できるようになります。
このようにServlet 3.0では、Servletの分野にもPOJO化の流れが浸透してきています。
JSF 2.0
JavaServer Faces(JSF)は、Java EEに含まれる標準のWebアプリケーションフレームワークで、Java EE 5からJava EEに取り込まれました。JSFもJava EE 6では「JSF 2.0」へとバージョンアップする予定です。
現在のWebアプリケーションでは、平坦なHTMLのみで記述されたユーザーインターフェイスではなく、JavaScriptなどを用いたインタラクティブなユーザーインターフェイスが求められています。このような機能を実現するためにJavaScriptで記述されたAjaxライブラリが提供されています。Java EEは主にサーバサイドのJava技術なので、クライアント側のJavaScriptは仕様の範囲を超えてしまうかもしれませんが、JSF 2.0ではこのようなライブラリと連携してページを操作するための仕組みが提供される予定です。
また、カスタムコンポーネント作成の簡略化、Faceletとの統合、RESTfulなURL表記などの機能拡張が計画されています。