Javaに関連したAPIを紹介するという目的で続けてきた「Java API、使ってますか?」も次回をもって終了の運びとなった。本連載では、次期バージョンのJavaプラットフォームに採り入れられる可能性のあるAPIについては特に力を入れて紹介してきたつもりでいる。そこで、それらの内容を踏まえながらJava EE 6およびJava SE 7の最新動向を紹介し、最後の締めくくりとさせていただきたいと思う。

Java EE 6の新機能

Java EE 6については、ちょうど1月22日(米国時間)にその仕様となるJSR 316のパブリックドラフトが公開されたところである。これからEC(Executive Committee)による承認投票を経た後、最終ドラフトの作成へと進んでいく。最終リリースまではもう少し時間が必要となるが、今回公開されたパブリックドラフトを眺めるだけでもJava EE 6の大体の形を掴むことができる。

まず新たに導入される新機能としては、以下の3つのAPIが挙げられている。

  • JSR 196: Java Authentication Service Provider Interface for Containers(JASPIC) 1.0
  • JSR 299: Web Beans 1.0
  • JSR 311: JAX-RS: The Java API for RESTful Web Services 1.0

JASPICはコンテナ向けに標準的な認証サービスを提供するサービスプロバイダインタフェース(SPI)である。これによって認証メカニズムをコンテナに統合し、コンポーネント対するアクセス可否の決定に利用することができるようになる。ちなみにJSR 316のパブリックドラフトにはJASPIC 1.0と記載されているが、JSR 196は現在メンテナンスドラフトが公開されているため、リリースのタイミング次第ではマイナーバージョンアップされたものになる可能性もあるだろう。

Web BeansはEJB3とJavaServer Faces(JSF)の間に統一的なコンポーネントモデル(Web Beanコンポーネント)を確立するためのAPIである。現在、EJB3とJSFではそれぞれが独立したコンポーネントモデルを持っており、両者を同時に使用する場合にはその互換性を考慮する必要がある。Web Beansによってこの問題が解決し、EJB3によるビジネス層とJSFによるビュー/コントローラ層をシームレスに接続できるようになる。JSR 299も現在パブリックドラフトが公開されている。

参考

JSX-RSはJavaプラットフォームにおいてRESTfullなWebアプリケーションを開発するためのAPIである。このAPIではアノテーションを活用することによってメソッドを手軽にRESTfulなサービスとして公開できるようになっている。JSR 311は2008年10月に正式リリースされている。

参考

アップデートされる機能たち

続いて、従来からある代表的な機能がどう変わるのかを見てみよう。

まずJava EEの中心的存在であるEJB(Enterprise Java Beans)だが、Java EE 5のEJB 3.0からはマイナーバージョンアップしてEJB 3.1となる。EJB 3.1ではEJB 3.0で導入されたDI(Dependency Injection)やアノテーションなどを引き継ぎながら、より使いやすい形へと進化する予定だ。

代表的な機能としては、ローカルクライアントからローカルビジネスインタフェースなしでSession Beanへアクセスできるようにする簡易ビューや、Session Beanの非同期呼び出しなどがサポートされる。その他、EJB-Jarを省略した簡易なパッケージングのサポートや、後述するJava EEへのプロファイルの導入に合わせたサブセットの定義など、アプリケーションを簡略化するための様々な仕組みが追加される予定となっている。

EJB 3.1の仕様を定めるJSR 318は、現在Public Draftが公開されている段階である。以前紹介したEarly Draftからの変更点としては、EJBコンポーネントをJava SE環境でも実行できるようにする組込みAPIなどの追加が挙げられている。

参考

EJB 3.0の一部として提供されていたJavaオブジェクトの永続化のためのJava Persistence API(JPA)は、EJB 3.1からは独立してJPA 2.0(http://jcp.org/en/jsr/detail?id=317)として定義されることになった。JPA 2.0ではアノテーションによるコレクションのサポート強化や、MapやListの使い勝手の向上、悲観的ロックのサポートなどが主な新機能となる。

また検索言語であるJPQLが強化されるのに加え、新たに「Criteria API」が追加される。これはJavaオブジェクトを元にして検索条件を絞りながら動的にJPQLを生成するAPIであり、昨年11月公開のPublic Reviewで追加された。これによってより柔軟なクエリの作成が可能になるという。

参考

JSF(JavaServer Faces)もJava EE 6ではバージョン2.0となる。JSF 2.0ではFaceletsの統合などによってカスタムコンポーネントの開発が容易になる他、Ajaxのサポートや他のAPIとの連携によってよりリッチなインタフェースを提供できるようになる。また、プロパティに対するデフォルトの設定値が用意されるなどコンフィギュレーションが簡略化できる予定だ。JSF 2.0も現在Public Draftが公開され、Early Draftでは明確でなかったFaceletsの統合などについて明らかになっている。

参考

Java EE 6ではServletの仕様も大きく進化し、Servlet 3.0(http://jcp.org/en/jsr/detail?id=315)となる。最も大きな変更は、Servletのメタ情報を記述できるアノテーションが追加される点で、これによってweb.xmlによる設定の記述を簡略化または省略できるようになる。その他にも、Webフレームワークを接続/切断するためのメカニズムの導入や、非同期通信のサポートなど、近年では見られなかった大幅な拡張が行われる予定だ。

参考

注目のプロファイル機能

Java EE 6の動向で特に注目されているもののひとつにプロファイルの導入がある。これはJava EE 6に含まれる機能のうち、特定の目的に合わせた機能だけを切り出したサブセットを定義しようというもの。

現在はJSR 316の仕様とあわせて、Webアプリケーションの開発に特化した「Webプロファイル」のドラフトが公開されている。WebプロファイルではEJB 3.1に含まれるAPIのうち、Servlet 3.0やJPA 2.0、EJB 3.1 Liteなどと中心とした10のAPIが必須コンポーネントと、いくつかのオプションコンポーネントが定義されている。またWeb Beans 1.0は現時点では含まれていないが、これを含むかどうかは意見を募っているそうである。

現時点で公開されているプロファイルはWebプロファイルのみだが、今後様々な要求に応じたプロファイルが登場することと思われる。

さて、今のところJava EE 6の具体的なリリース時期は明らかになっていない。Public Draftが問題なく承認されたとしても、正式リリースは春先以降になる可能性が高そうだ。まだ少し時間があるとはいえ、それまでに全体像を把握しておきたい。