今年も5月8日から11日にかけて,サンフランシスコのモスコネセンターでJavaOneが開催されました。と,過去形で書いていますが,この原稿はJavaOne会期中に執筆しています。

今年のJavaOneは昨年よりも参加者が増えたように思います。ジェネラルセッションだけでなく,通常のセッションやランチでさえも長蛇の列に並ばないとたどり着けません。日本ではJavaがあまり元気がないような感じを受けますが,米国ではそんなことはないようです。参加者たちも元気そのもの。夜の10時からのセッションであっても多くの参加者が聴講しています。

さて,今年のJavaOneはJava EEよりもJava SEが注目を集めています。特にOpenJDKとJavaFXが話題をさらっている感じです。また,Java SE 7に関しても,具体的な姿が見え始めてきました。

そこで,Java技術最前線では,JavaOneレポートとして今週はJava SE 7,来週はJavaFXを取り上げようと思います。

Java SE 7は2008年の終盤にリリースされる予定です。まだ1年半あるので,ここで紹介する機能はあくまでも現時点での姿であり,将来変更される可能性があります。その点はご了承ください。

スクリプト言語のサポート

はじめに紹介するのがスクリプト言語のサポートです。

Java SE 6からはじまったスクリプト言語のサポートですが,Java SE 7ではさらにこれが推し進められます。

標準で使用できるスクリプト言語も,JavaScriptに加えて次に示すスクリプト言語が予定されています。

  • Beanshell(JSR 274
  • JRuby
  • Jython
  • Groovy(JSR 241
  • JavaFX Script

BeanshellやGroovyは昨年のJavaOneでも標準でバンドルされることが発表されていましたが,それ以外に今話題のJRubyやJavaFX Scriptが使えるようになるようです。

また,スクリプト言語のためにバイトコードの追加なども予定されています(JSR 292)。

新しいモジュール

Java SE 7では開発時とデプロイメント時のそれぞれに対して新しいモジュールが導入されます。

開発時にはパッケージ単位のスコープを定義するsuperpackage(JSR 294)が導入されます。一昨年のJavaOneではJava SE 7の新機能としてC++のfriendを導入すると発表されていました。それが,superpackageとしてまとめられています。しかし,friendとは異なり,公開するクラスやパッケージを制限することが主目的です。

デプロイメントにはJava Application Modules(JAM,JSR 277)が使われます。

現在使われているJARファイルはバージョニングができないことや,他のJARファイルをインクルードできないなど,いろいろと問題があります。それを解消するために導入されたのがJAMです。

JAMには複数のJARファイルや,ネイティブのライブラリ,リソースなどを含むことができます。もちろん,バージョニングも可能です。

Swingの強化

Swingには新たに三つの機能が導入されます。

一つめがJSR 295 Beans Binding,もう一つがJSR 303 Bean Validation,最後がJSR 296 Swing Application Frameworkです。

Beans BindingはJavaBeansのプロパティを同期させるために使用されます。JavaBeansのための仕様なので,Swingだけで使われるとは限りませんが,Swingで使われることが想定されています。

例えば,テキスト・フィールドに入力された文字列を他のGUIコンポーネントで表示するときなどに使われます。

Bean Validationは名前の通り,バリデーションを行うための仕様です。JavaBeansのプロパティにバリデーションのためのアノテーションを付加し,それを用いてバリデーションを行います。

Swing Application Frameworkは,Swingのアプリケーション作成支援のためのフレームワークです。

Swingアプリケーションの作成には様々な約束事があり,定型的な処理を記述する必要があります。Swing Application Frameworkは,このような定型的な処理をなるべく減らし,簡単にアプリケーションを作成できるようにします。また,非同期の処理もサポートしている点が特徴です。

言語仕様の変更

Java SE 6では言語仕様の変更はありませんでしたが,Java SE 7では仕様変更があります。主な変更点を下記に列挙します。

  • アノテーション記述の拡張(JSR 308
  • クロージャの導入
  • 簡易記法
  • 具体化されたジェネリクス

簡易記法を使えば,例えばストリームを使用した後のcloseを記述せずに済ませることもできます。「具体化されたジェネリクス」は「Reified Generics」を訳したものですが,筆者もよくわかっていません。ジェネリクスを使いやすくする記法のようです。

このほかにプロパティ定義,コレクションなどに対する簡略化した記法,switch文の強化などが検討されています。

その他の機能拡張

ソフトウエア管理ではJMXがバージョンアップして2.0になります(JSR 255)。JMX 2.0では階層化した名前空間やMBeanのカスケードなどが使えるようになります。

また,JSR 262 Web Services Connector for JMX Agentsも導入されます。Connectorは,JMXにリモートからアクセスする場合に使用する通信モジュールです。その通信にWebサービスが使えるようになります。

コアライブラリでは待ちに待ったJSR 203 New IO 2が使えるようになります。NIO 2ではファイルシステムAPIが新しくなります。ファイルの非同期入出力や,シンボリックリンクなども使えるようになります。

終わりに

Java SE 7には様々な点で機能の向上や新機能が導入される予定です。

大きな機能追加は,ほとんどの仕様でJCPでの議論が開始されています。大きな変更の中でまだJSRになっていないのはクロージャくらいかもしれません。とはいうものの,Neal GafterのblogではJSRの提案を行ったと書かれているので,近々にもJSRとして登録されるでしょう。

このように着々と進んでいるJava SE 7ですが,中にはトーンダウンしたものもあります。例えば,XMLのネイティブサポートはどこかに行ってしまったようです。

まだまだ二転三転する可能性はあるようですね。

来週はJavaFXについて取りあげます。お楽しみに。

著者紹介 櫻庭祐一

横河電機 ネットワーク開発センタ所属。Java in the Box 主筆

今月の櫻庭

ツバメ

櫻庭がいつも利用している駅のそばに今年もツバメが帰ってきました。今年は暖冬だったので,ツバメが帰ってくるのも早くなるかなぁと思っていたのですが,例年とそれほど変わりありませんでした。

今は卵を温めている真最中です。

JavaOneから帰ってきたときには,かわいいヒナが生まれていることでしょう。