「Java EE 8」の注目機能は何か? この先、Java EEはどう進化していくべきか? 寺田佳央氏と川島義隆氏に聞いた

Oracle Java & Developers編集部
2017-05-11 11:30:00
  • このエントリーをはてなブックマークに追加

2017年7月に「Java EE 8」のリリースが予定されている。注目の新機能/変更点は何か、また今後Java EEに必要となるのはどのような機能か? Java Championの寺田佳央氏とTISでNablarchのチーフ・アーキテクトを務める川島義隆氏に聞いた。

オラクルの修正提案、コミュニティ・サーベイを経て、いよいよJava EE 8がリリース!

 Java EEの最新版である「Java EE 8」のリリースが2017年7月に迫った。昨年のJavaOneでオラクルによる修正提案が発表されるなど、その動向が注目されるJava EE 8は、いかなるフレームワークとなるのか。また、今後Java EEは“クラウド/マイクロサービス時代”を支えるテクノロジーとして、どのように進化していくべきか──Java Championの寺田佳央氏とTISでJava EE対応フレームワークのチーフ・アーキテクトを務める川島義隆氏が語り合った。

──今回は、日頃からJava EEに関するコミュニティ活動やシステム開発に取り組まれている寺田さんと川島さんに、今年7月のリリースが予定されているJava EE 8、およびJava EEの今後について話を伺いたいと思います。初めに、自己紹介も兼ねて、お二人の現在の活動内容を教えてください。まず寺田さんは長年、日本オラクルでJavaエバンジェリストとして活躍された後、2015年に日本マイクロソフトへと移籍されました。


寺田佳央氏。現在は日本マイクロソフト デベロッパー・エバンジェリズム統括本部 テクニカルエバンジェリズム本部のシニアJavaエバンジェリストとして、先進的なシステム/サービス領域へのクラウドやJavaなどの適用手法を紹介している。
Twitter:@yoshioterada
ブログ:https://yoshio3.com/

寺田:はい、現在は日本マイクロソフトにおいて、クラウド上でJavaやマイクロサービスのほか、IoT(Internet of Things)や人工知能などの先進テクノロジーを使ったソリューションに関するエバンジェリストとして活動しています。これらのテクノロジーを使うことでどのようなサービスを実現でき、またどういったビジネス価値が得られるのかを、実際のプロトタイプなども交えてご紹介しています。

──日本人では2人目となるJava Championに認定されるなど、活発なコミュニティ活動も継続されています。一方、川島さんはTISでJava EEを用いたフレームワークやシステムの開発に携わっておられますね。

川島:現在はTISでJava EEに準拠したシステム構築基盤「Nablarch(ナブラーク)」のチーフ・アーキテクトを務めています。それ以前はずっとシステム・インテグレーション(SI)の現場でアーキテクトとして活動していました。

──川島さんがJava EEを使うようになったのはJava EE 7からだそうですね。


川島義隆。TIS 生産革新本部 アプリケーション開発センター ソフトウェアエンジニアリング部のシニアエキスパートとしてNablarchのチーフ・アーキテクトを務めるほか、個人でさまざまなJava EE対応フレームワークを開発/公開している。
Twitter:@kawasima
GitHub:https://github.com/kawasima/
Webサイト:http://unit8.net/

川島:はい、それ以前はSeasar2を使うことが多く、Java EE 7を使うようになったのはNablarchのチーフ・アーキテクトになってからです。以前のNablarchはオープンソース・ソフトウェア(OSS)を使わずに全て自社で開発していたのですが、機能拡張を繰り返してきたことで巨大かつモノリシックなアーキテクチャとなり、フレームワーク全体の仕様をNablarchの開発チームですら把握できていないこともしばしばありました。そこで、これをモジュール化などによって整理する際、何か業界標準の仕様に準拠したほうがよいと考え、2014年頃からJava EE 7に一部合わせるかたちで進めています。

寺田:JAX-RSなども使ってるんですか?

川島:JAX-RSなど、スムーズに取り込めそうなAPIに絞って使っています。今やっていることの1つはBean Validationで、既存のバリデーション・ロジックをBean Validationに置き換えています。また、バッチ機能はjBatchに置き換えました。jBatchを積極的に使うことには別の思惑もあります。実は個人で「JobStreamer」というjBatchの分散実行基盤を作りOSSとして公開しているのですが、これを自社のSI案件でも使っていきたくて、その時にNablarch側もjBatchに準拠していれば組み込みやすいだろうと(笑)

 こんな感じでJava EEのお世話になっているのですが、NablarchなどでJava EEを使う大きな理由の1つは、やはりお客さんに安心して受け入れてもらえることですね。今の時代、全てが手作りだとベンダー・ロックインを心配されてしまいますし。開発者の皆さんにとって、Java EEなら学習しやすいというメリットもあります。

──そんなお二人に、まず今夏リリース予定のJava EE 8について伺います。2013年にJava EE 7がリリースされてから4年ぶりの新バージョンとなるわけですが、ここに至るまでに仕様策定活動の停滞が心配された時期もありました。

寺田:まず再び前に進み出したことを歓迎します。ニュースでも報じられたように、一昨年辺りに標準化活動の停滞を指摘する声も上がりましたが、その後、明確に前に進み始めたことについては関係者の皆さんのご尽力に敬意を表したいと思います。

──Java EE 8では昨年のJavaOneで、オラクルがJava EEをクラウドやマイクロサービスに対応させていくために、Java EE 8への修正提案を行うことと、その次のJava EE 9への提案を発表しました。

寺田:オラクルがそれらの発表を行ったことについて、私は2つの意義があると思っています。まずJava EEを再び大きく前進させるという決意表明であり、その目的はクラウド/マイクロサービス時代を支えるテクノロジーとして進化させることです。ただし、そこに一足飛びに移ろうとすれば仕様策定などに時間がかかりますし、既存のJava EEユーザーにとっては変化が大きすぎる。そこで、クラウド/マイクロサービス対応の最初のゴールとするバージョンをJava EE 9に定め、そこに既存のJava EEから移行するための中間バージョンをJava EE 8にするという構想だと理解しました。

JAX-RS 2.1でリアクティブ・プログラミングが可能に。JSON-B、CDIにも注目

──ただ、その後のコミュニティへのサーベイを経て、JavaOneでオラクルが発表した提案内容から、追加される仕様が少し変わりそうです。まだ最終的には確定していませんが、現段階では「JSON-B」や「Security 1.0」といったAPIが新たに追加されるほか、いくつかの仕様がバージョンアップされるようです(下図参照)。お二人がJava EE 8の新機能や変更点で注目されているのは何でしょうか?


※クリックすると拡大画像が見られます

寺田:私は、非同期処理の機能が改善され、ノンブロッキングをサポートした「JAX-RS 2.1」に注目しています。

 現在、JAX-RSは主にサーバ側の実装で使われていますが、今後はアプリケーションのマイクロサービス化が進み、個々のサービスをRESTで連携させて作るケースが増えるでしょう。このとき、JAX-RSで作られたサービスをJAX-RSのクライアント側から呼び出す際、ブロッキング/ノンブロッキング、同期/非同期の違いをしっかりと意識してコードを書かないと、リソースの不足が起きたり、あるサービスの呼び出しが完了するまで他の処理がずっと待ち続けたりといったことが起きます。そして、これがクライアント側の呼び出し側で大きなボトルネックになる恐れがあるのです。

 JAX-RS 2.1では、同期/非同期処理を使い分ける、いわゆるリアクティブ・プログラミングをクライアント側でも行えるようになります。したがって、開発者がリアクティブ・プログラミングを十分に理解してコードを書けば、よりパフォーマンスの高いREST呼び出しができるようになります。今後のマイクロサービス化を見据えると、JAX-RS 2.1においてクライアント側の実装が強化されたことは重要だと思います。

川島:私もJAX-RS 2.1の追加は嬉しいですね。お客さんのシステムに、サーバ側のシステムをJavaFXによるクライアントからJAX-RSで呼び出してデータを更新するというものがあるのですが、この処理で“コールバック地獄”に陥りがちなんです。これを回避するために、現状はOSSのイベント・バスを使ってバス経由で通信したりしていますが、これをリアクティブ・プログラミングで回避できるようになると助かります。

──JAX-RS 2.1はマイクロサービス化に向けたJava EE 8の代表的な機能と言えるでしょうか。ほかにJava EE 7と比べて便利になる機能などはありますか?

寺田:JSON-Bが追加されるのも有り難いですね。現状、JSONとのマッピングを実装するのは結構面倒なのですが、これからはもっと簡単にJSONを扱えるようになります。

川島:CDI(Contexts and Dependency Injection)の導入も、テストが楽になるという点で嬉しいですね。