6月2日(太平洋夏時間)より4日間、カリフォルニア州サンフランシスコにて世界最大のJavaの祭典「2009 JavaOne Conference」が開催されている。本稿ではJavaOneで行われた数々の発表の中から、Java EEプラットフォームの最新動向を追ってみた。
まず肝心のJava EE 6のリリース時期だが、これはTechnical Keynoteに登壇したスペックリードのRobert Chinnici氏より今年の9月を予定していると発表があった。Java EE 6の仕様はJSR 316としてJCPに登録されており、すでにPublic Review後の承認投票を通過して最終ドラフトを策定する段階に達している。
今回新たに追加されるAPIおよびアップデートされるAPIとしては次のようなものが挙げられる。
- EJB(Enterprise JavaBeans) 3.1
- JPA(Java Persistence API) 2.0
- Servlet 3.0
- JSF(JavaServer Faces) 2.0
- JAX-RS(Java API for RESTful Web Services) 1.1
- Java EE Connectors Architecture1.6
- Bean Validation 1.0
- JAX-WS(Java API for XML-Based Web Services) 2.2
- JAXB(Java Architecture for XML Binding) 2.2
- JASPIC(Java Authentication Service Provider Interface for Containers) 1.1
- JSP(JavaServer Pages ) 2.2 / EL(Expression Language) 2.2
- Common Annotations(JSR 250) 1.1
Chinnici氏によれば、Java EE 6の目標はJava EEプラットフォームを「よりパワフルに」「よりフレキシブルに」しかし「よりシンプルに」することだという。そのために単にAPIを追加するというだけでなく、EoD(Ease of Development)や拡張性などを重視したさまざまな改善が加えられているとのこと。
たとえばデプロイメントの簡素化を手助けする機能に「Pluggable Extension Libraries」と呼ばれるものがある。これはWEB-INF/libディレクトリ以下にあるライブラリが自動でアプリケーションに登録されるというもので、開発者は煩わしい設定ファイルから解放され、動的なライブラリの追加が可能となる。その上、web.xmlファイルをライブラリのjarファイルごとに個別に用意できるようになり、web.xml記述の手間も軽減できるようになった。
また、個々のAPIにもその点を意識した改良が加えられている。たとえばEJB 3.1ではBeanの登録にejb-jarファイルが必要なくなり、warファイルのみでパッケージングすればよいようになっている。Beanの定義もアノテーションを活用してよりシンプルに行うことができるようになった。
新たに追加されるAPIで特筆すべきものとして、まずChinnici氏はまずRESTfulサービスの実装をサポートするJAX-RSを挙げている。また、Bean ValidationはBeanオブジェクトのプロパティが取り得る値をアノテーションを用いて指定できるようにするもので、アプリケーションの状態の制御を手助けする機能である。これはJSFやJPA、JAX-RSなどの主要なAPIで利用されるようになるため非常に重要な役割を果たすという。
その他、Java EE 6ではプロファイル機能が導入されることも注目すべき点である。これはJava EEの仕様から目的に応じた機能のみを抜き出し、それをプロファイルとして定義することで用途別のJava EEの利用を容易にするというもの。Java EEの仕様は非常に巨大であるためすべての機能を実装するのは困難であり、デプロイメントするファイルのサイズも大きい。そこで「Webアプリケーション向けのJava EE」「ストレージ向けのJava EE」などとというようにサブセットを定めることによってJava EEを利用しやすくするという目的がある。
現時点では、JSR 316にWebアプリケーションのためのプロファイルとして「Java EE 6 Web Profile」定義されている。Web Profileは図1.3のようなAPIから構成されるという。
なおEJB 3.1 LiteというのはEJB 3.1のサブセットであり、一般的によく使われる機能のみを抜き出して軽量化したものだ。今後、Web Profile以外にもニーズに応じて様々なプロファイルを検討していくとのことである。
Java EE 6に含まれるその他のAPIについても、過去に連載「Java API使ってますか?」などで紹介しているので、本稿と合わせて参照していただきたい。