開発者に高い生産性を提供するJava SE8
日本オラクルの寺田佳央氏がデブサミ2011に続いて登壇。「JavaOne TokyoとJavaの今後について」と題するセッションを行った。昨年は、OracleがSunを買収したことで、Javaの今後について不透明要素が残っていたタイミングだったが、この1年で、Sun時代の末期よりも着実に進化し続けている。その象徴が2011年7月にリリースされたJava SE7だ。Oracleでは「Moving Java Forward」をテーマとして掲げており、そこでのポイントはJavaの開発者数の増加、採用実績の拡大、競争力の拡大、市場変化への適用になる。
では次の2013年夏リリース予定のJava SE8には、どのような機能が盛り込まれるのか(図1)。まずNashornという、JavaのVM上で動くJavaScriptのエンジンが現在のRhinoに変わって提供される。NashornはSE7でJRubyなどの動的言語を効率的に利用するために盛り込まれたバイトコード命令invokedynamicを実装したもので、Rhinoと比較して高いパフォーマンスを得られるようになる。JVMについては、オラクルがもつ旧BEAポートフォリオの「Oracle JRockit」とSun由来の「HotSpot」が統合され、「HotRockit」という開発コードネームで開発中だ。また旧来のマルチスレッドの書き方では対応が難しいマルチコアCPUの性能を楽に引き出せるようにするため、Lambda式をサポートする。
またProject jigsawにより、新しくモジュール化という概念が入る。今までJavaのライブラリを使う際、例えばアプリケーションサーバーを起動する際には、大量のjarを列挙する必要があった。モジュール化を使うことにより、jar地獄から解放される。パフォーマンスも起動時、運用時ともに向上する。例えば起動時では、一度アプリケーションを起動する際に読み込んだモジュールの一覧を特定のファイルに書き出し、再起動の際にそれを読み込むことにより起動が早くなる。運用時には、必要なタイミングでモジュールをダウンロードして使うことで、パフォーマンスを高める機能も考えられている。
さらに重要なポイントとなるのが、小型機器への対応だ。今までJava MEがターゲットとしてきたハードウェア機器の性能が上がったことで、Java SEのサブセットで十分に動く時代になっている。そこで小型機器へのJava SEのサブセットが用意され、SEが提供している機能が使える様になる予定だ。
またJavaのリッチクライアントを作成する新しい技術であるJavaFXが、Java SEの標準ライブラリとして取り込まれる。一方、現在の主流のSwingのライブラリも引き続き提供されるが、新たな機能追加などがないメンテナンスモードに入る。
またすでにJava SE9の検討も開始されている。ポイントは統合運用性、クラウド対応、最適化などだ。セッションでは今後のロードマップも披露された。2013年にJDK 8がリリースされ、2015年にJDK9というように2021のJDK 12まで、2年周期で提供される予定だ。
Java EE7はクラウドPaaSにフォーカス
続いて紹介されたのがJava EE6だ。寺田氏は「日本のエンタープライズ開発市場は、世界から見てずいぶん遅れている」と語る。その要因は、国内のJava EEの採用率の低さにあり、寺田氏は危機感を感じているという。J2EE 1.3、1.4頃の印象で「Java EEは重い、扱いづらい」というイメージがあるとすれば、それはJava EE6にはあてはまらない。世界ではJava EE6が主流になりつつあり、ダウンロード数は4000万に達している。寺田氏は「まだJava EE6を触ったことがない方は、ぜひ使ってみて欲しい」と呼びかけた。
寺田氏がJava EE6について熱く語る背景には、その技術をベースにしたJava EE7の開発が進んでいることがある。Java EE6を未体験で、いきなりJava EE7を扱うのはハードルが高い。Java EE7でフォーカスされるのはクラウド、PaaSだ(図2)。サービス・プロビジョニング、QoS、伸縮性など、クラウドで必要になる技術が盛り込まれる。例えば伸縮性では、設定したしきい値によりCPUやメモリなどの過不足を検知し、システムが動的に自己調整することが可能になる。
また、Java EEの参照実装 GlassFish v4.0では新たにPaaSコンソールと機能が追加され、画面を見ながらWebアプリケーションのデプロイやサービスリソース設定、ロードバランサーの設定などを行うことができるようになる。
クラウドではマルチテナントも重要になってくるが、1つのアプリケーションを、テナントごとに分離されたインスタンスで提供する。インスタンスはメタデータによってテナントごとにカスタマイズされる。テナントIDは、アプリケーションとそのサブシステムで利用可能だ。
JPA 2.1の仕様はまだ策定中だが、一部の機能を先行して試すことができるようになっている。Eclipse Link 2.3でデータベースレベルでのマルチテナントのアプリケーションを、@Multitenant、@TenantDiscriminatorColumという2つのアノテーションを使い、作ることができるようになっている。この2つのキーワードで検索すれば、すぐにサンプルのアプリケーションにたどり着くことができる。
JPA 2.1のマルチテナントは、データベースのテーブル、インスタンスなどさまざまなレベルで実現される。例えば1つのテーブルの中でテナントを使い分ける場合には、@ Multitenant、@TenantDiscriminatorColumを指定すればいい。テナント切り替えは、XMLの設定ファイルにテナントを識別するvalueを記載することで、1つのテーブル内に入っているデータを使い分けることが可能になる。アプリケーションの実装コードに、テナントごとの設定を書く必要はない。
Java EE7は2012年末頃にリリース予定となっている。Java EE6の技術がベースにあり、そこにクラウド対応に必要な機能を組み込む形で動いている。マルチテナント、オーケストレーション、伸縮性、JMS2.0。JMS2.0もJava EEの中で一番大きな変更になる。キャッシング、JSONもJava EE7には入ってくる。
セッションで紹介されたJava SE8、Java EE6などの詳細は、4月4日、5日に六本木ヒルズで開催されるJavaOne Tokyo 2012で語られる。2日間で約50セッションが用意されており、ここまで充実したJavaのイベントは、他にはない。
Java SE関連スペックリード、Java FXチーフアーキテクト、Java FXエクスペリエンス・アーキテクト、Javaパフォーマンスの達人など、多数の注目すべき外国人スピーカーが来日する。寺田氏は最後に「参加者の方々は、どのセッションを選択すべきか迷うと思うほど充実している」とアピールし、セッションを閉じた。
日本オラクル株式会社
東京都港区北青山2-5-8
Oracle Technology Network (OTN) Java開発者向けページ