JavaOne Tokyo 2012参加レポート (1日目)

7年振りの日本開催となったJavaOne Tokyo 2012に行ってきました。めちゃ楽しかったです!
というわけで参加レポートをざざっとまとめたいと思います。まずは1日目から。

1日目は以下のセッションに参加しました。

  • Strategy Keynote
  • Introduction to JavaFX 2.0
  • The Heads and Tails of Project Coin
  • Pragmatic Cloud and PaaS with Java EE 7 (and GlassFish)
  • Introduction to the JavaFX Scene Builder
  • OSGiの概要と最新動向
  • HotRockit: What to Expect from Oracle's Converged JVM

Strategy Keynote

基調講演です。前半はOracleの重鎮の方々による講演で、割と昨年のSFでの内容 (ネットで観てました) と同じでした。
後半、日本Oracleの宣伝がちょっと入って、その後に丸山先生のお話、最後にNECの方による講演となったのですが、最後のがちょっとアチャー (ノ∀`) という感じになってしまいました...。
以下、順番に印象に残ったポイントを中心に書いていきます。

JavaSEについては2012midにJDK7u2と共にJavaFX2.1がリリースされる。Mac向けJDK7も開発者向けにリリースという直近のスケジュールについての説明がありました。
Java8については、Jigsaw、Lambda、JavaFX3.0、Nashornが入るという既に広く伝わっている内容に加え、マルチタッチや加速度計といったスマートデバイス向けの対応も入るという話が出てきました。*1
Java9以降検討している新機能を紹介した後 (これも基本的にはSFの内容を踏襲) 、TwitterのRob Bensonさんも登場して、JavaScala使ってるよー、JVMの開発に参加してGC最適化とかに絡んでるよーのアピールでJavaSEの話を締めてました。

続いてJavaFX、JavaMEの話に入り、今日SceneBuilderのpublic preview版をリリース、というAppleみたいなやり方の発表をw ロードマップについては以前見たものよりペースが早くなっていると思ったのですが、実際の所どうなんだろう?
SFでもやったKinect使ったデモを披露し、JavaFX on iPadもチラ見せ、とこの辺りはやはり盛り上がっていたように思います。
MEについてはこれまたSFでも発表していた、CLDCのリリースペースをSEに合わせ、CDCとSE Embeddedは融合するという話があり、JavaEmbedded Suiteというものを紹介していました。Java DB EmbeddedとかGlassFish Embeddedみたいなのを出すつもりのようです。

JavaEEは有名どころのコンテナがみんなEE6に対応しましたよという話から入った後、EE7のクラウド対応の話が中心となりました。
クラウドについては今のところIaaS中心で、仮想化したのはビルディングプラットフォームだけ。これからはPaaSの方に関心が行くはず。で、JavaEEはPaaSの標準化を目指す、Capacity on DemandとかService Level Managementといったところに対する標準的なインターフェースを用意することを目指していくという話でした。この辺は後で受講したGlassFishのセッションを聞くと少しずつ分かってきました。
APIそのものの強化としては以前から言われているマルチテナントサポート、JCache復活、JSONサポートなどを紹介していました。
2013Q3を目標をリリース目標としているようです。

それから謎のProject Avatarの話も出てきました。ただ今回もJavaHTML5のハイブリッドアプリケーションを作れるようにすることを目指すという、何となくふわふわした感じの説明に終始していました。
HTML5の意義として、WebSocketによる双方向通信が可能になったこと、アプリケーション実行の主体がクライアントサイドに移ったことを強調していたので、JSFみたいな感じでJavaからHTML5クライアントを吐き出して、サーバーと非同期通信するアプリケーションを開発出来るような方向を目指しているようです。

その次の日本Oracleの話はまあ完全に宣伝。コンサルサービスの話と資格試験の話でした。資格試験についてはOracleらしくGold、Silver、Bronzeが登場するようです (Platinumは無いみたい) 。「インドの合格者の平均点は満点近いが、日本の合格者の平均点は合格点ぎりぎり」という話が印象に残りました。これはモチベーションの差ですかね。うーむ...。

丸山先生のお話は、時間が無かったのか飛ばし気味でした。Java6と7の間の空白期間がとても長く、その間Javaは右肩下がり傾向。しかもその空白期間の間にスマートデバイスやらクラウドやらと大きな変革が起きていた。けど、再びJava前進を始めたし、大規模なエンタープライズサービスやOSSプロダクトはみんなJavaで作られているし、Javaはまた盛り上がってきたのでみんなもコミュニティーを活性化させよう (なので今度のJJUG CCCにみんな来てねー) 、というお話でした。

最後のNECさんのスポンサーセッションですが、昔話で始まり、特に組み込み系のJSRには参加したよー、という話をするところまでは良かったのですが、途中からもろ「えすあいあーの現場」の話になってしまい、フレームワークでエンジニアの技量のバラツキを吸収しましたとか、自動生成の話とかになって、場がどん引きになってしまいました...。上でも書きましたがこれはもうアチャー (ノ∀`) という感じでしたね...。

Introduction to JavaFX 2.0

表題通りJavaFX2.0の入門的なセッションでした。自分は以前からJavaFXを追いかけていたので内容的には知っている話ばかりでした (申し込んだのが遅かったので、これしか空いてなかった)。
最後に行ったデモがJavaFXの良さを伝えられる内容になっていたのが良かったですね。一通りサンプルアプリケーションを見せた後に、電子ブックのようなアプリケーションを出して、そのページにそれまでに紹介したアプリケーションを載せることで全ての視覚コンポーネントはシーングラフに載せられることを示したり、ワイヤーフレームをぐにゃっと曲げる様子を見せる重力シミュレーションのようなデモでは、途中から背景に画像を置いて、バインディングを使うことで容易に一緒に曲げられるところを示していました。

The Heads and Tails of Project Coin

Java7のProject Coinの説明と、仕様策定の苦労的なところを紹介するというセッションでした。仕様策定のところの話はとても興味深かったです。
まずはProject Coin自体の紹介で、マルチキャッチや数値リテラル、Diamond、String switch、try-with-resoucesなどの説明。内容的には知っていることばかりでしたが、NetBeansがヒントを出してくれて、簡単にCoinの書き方にリファクタできることを示したのが印象的でした。EclipseIntelliJももちろんこう言った機能を備えているとのことです。
どうやって動いているかの説明もしてもらい、基本的にコンパイラが頑張っているとのことでした。

その後は仕様策定の苦労話になり、Java仕様書の目次を見せて、Project Coinの影響を色づけすると真っ赤っか! 数値リテラルのところでJosh Bloch *2 が007のAAを書いて見せた話が面白かったです。
仕様設計が一番大変だったのはDiamond、実装が大変だったのはtry-with-resoucesだったというのも興味深かったです。
JEPについての話もあり、今後はJavaの言語仕様変更に関する提案はJEPで行っていくとのことです。PythonのPEPみたいなものですかね。

Pragmatic Cloud and PaaS with Java EE 7 (and GlassFish)

最初はそんなに期待していなかったのですが、予想外に自分にはすごく興味深い内容でした。
基調講演で出てきた内容をより具体的にしたものでした。PaaSに対する要求としては、IT部門からはSLA (セキュリティ、監視、計算機資源の有効利用など) に対する要求が、開発者からはすぐに市場に届けたいという要求があり、JavaEEとしてはワンステップデプロイ (アプリだけでなく、サービスへの依存性解決やクラスタ構築なども含む) や各種メトリクス (稼働しているアプリケーションのメトリクスも含む) といったものを提供することで応えていくとのことです。

で、次バージョンのGlassFishの説明をすることで、上に示した方向性の一端を見せてもらいました。これが面白かった。
新しいGlassFishは内部にオーケストレーションエンジンのようなものを持ち、VirtualBoxKVM等のハイパーバイザと連携することで、GlassFishクラウドコントローラーとして振る舞うことができるようになるそうです。
また、GlassFishが依存する、ロードバランサーやMQ、DBといった各種サービスに対するメタデータを管理する機構も用意し、いわゆるプロビジョニングを行えるようにします。
こうすることで、GlassFishが管理する種々のメトリックの監視結果に応じて、オートスケールが行えるようになります。仮想サーバーのインスタンス立ち上げから始まって、アプリケーションのデプロイ、依存サービスの設定まで一気に行ってもらえます。実際にデモを見せてもらいましたが、ここまで行くとPaaSらしいですね。

JavaEE APサーバーではEJBをはじめとして、デプロイしたアプリケーションの構成要素を基本的にみんなコンテナが管理しているので、アプリに紐付いた様々なメトリックを提供できます (説明ではセッションの更新頻度、リクエスト数、コネクションプールの利用状況、トランザクションの実行状況などを例として挙げていました) 。それらと関連づけたオートスケールが可能になるので、これはJavaEEならではの強みではないかと思います。

こんな感じで非常に興味深かったです。直接VMのハイパーバイザと連携しているところを見ると、当面のターゲットはプライベートクラウドでしょうね。
個人的にはこれは確実に需要があると思いました。大企業など、社内に沢山のシステムやサーバーを抱えているところは、仮想化してその上にシステムを集約することで計算機資源を節約したいと考えているところが結構多いように感じています。GlassFishのこの機能を用いて柔軟にインスタンスを伸縮できるようになれば、より効率的に計算機資源を利用できそうです。なので、こういった所には喜ばれるのではないでしょうか。
まあ、「こういった所」って大抵はOracleの顧客だったりするということでしょうが。(^^;)

Introduction to the JavaFX Scene Builder

カラーピッカーアプリを作るデモを通してScene Builderについての紹介を行うというセッションでした。
綺麗なアプリケーションをさくさくっと作っていったので、かなり聴講者に受けていました。
(でもコントローラー部分のJavaコードやCSSは事前に作成済みのものを用意していたので、本当にあそこまでの短時間でできる訳じゃないですよ)
総じてFlashBuilderのレイアウトエディタよりも優れているな、という印象を持ちました。あちらはすごく重かったし、スタイルも書き方によっては反映してくれなかったりしましたから...。

とにかくFXMLの作成だけに徹したシンプルなアプリケーションなので、その分融通も利いていいですね。NetBeans以外のIDEとも簡単に連携できますし、普段はFXMLを手打ちして、細かいレイアウトの調整だけSceneBuilderを使う、という使い方もできますね。
土台が常にAnchorPaneになっているけど変えられるの?という質問をしたのですが、「直接FXML書き換えたら良いよ」という回答でしたw

今後の機能追加として、データバインディングのサポート、Javaクラスとのリンクをよりタイトにする、トランジションなどの編集もできるようにする、といったことを考えているとのことでした。

OSGiの概要と最新動向

HISOLの方によるOSGiの概要と、組み込み分野での活用のされ方についての説明とかをしてもらいました。
OSGiというとみんなEclipseの印象が強いかもしれないけど、実は組み込みでよく使われていて、遠隔管理、モジュール更新に活用しているとのこと (でも、元々組み込みのために産まれた規格ですよねえ) 。
ユースケースとして家電のコントロール等に使われているホームゲートウェイや農業でセンサーネットワークから情報を収集するファームゲートウェイで管理対象機器の増減に合わせて更新するところに使われているという話を紹介していました。

続いてOSGiの歴史と基本的な仕様についての説明を行い、最新動向としてはResidential向けの仕様を策定中であることを紹介していました。
Residential仕様とは、ACS (Auto Configuration Server) から宅内機器を遠隔管理するための仕様のことで、遠隔管理に必要な端末内の情報の管理方法とバンドルの管理方法を策定しているそうです。

中々興味深い内容ではあったのですが、組み込み分野とは接点がないので、ちょっと自分には縁の無い話でもありました。(^^;)

HotRockit: What to Expect from Oracle's Converged JVM

HotRockitに取り込まれたJRockit由来の機能についての説明するというセッションでした。
Oracleは2008年にBEAを、2010年にSunを買収したことで、JRockitとHotSpotという2つのJVM実装を手にすることになりました。HotRockitはHotSpotをベースに、JRockitから有用なものを取り込んだものになります。
あくまでベースはHotSpotなので、JRockit式の世代別GC *3 や自動GCチューニング機能などは取り入れられていないようです。

HotRockitに移されたJRockitの機能として、JRockitにあったJVM診断用のコマンドであるjrcmd (jcmdという名前で移植している) 、JVMサービスを探したりハートビートを行ったりするJRockit Discovery Protocol (JDP) 、JRockitのMBeansなどがあるそうです。

そして何と言ってもFlight Recorder。分かり易いGUIでタイムマシンのようにJVMの過去の状態を調べることができる強力なツールです。
過去のヒープの状態を表示して、メモリ参照を追いかける、スレッドの状態を分析する、GCが発生した時のスタックトレースからコードをたどってメモリ割り当てに問題のある実装を探す、JavaEE APサーバーのイベントタイプ別にログを出してGCリークの調査をするといったデモを行っていました。すごいです、これは。
開発用途ならばフリーで使えるとのことです。

今後JDK8や9ではPerm領域をなくす (!) 、メモリリーク調査のためのオンラインヒープアナライザの追加、GCの改善 (Deterministic GCというのを追加するようで、G1GCとも違うとのこと) といったことを挙げていました。

LT

セッション終了後、ライトニングトークがありました。
写真のようなデュークおにぎりをほおばりつつ、日本のJava界を代表するエンジニアの方々のマニアック全開のLTを聞くというとても楽しい企画でした。

終了後に最低5人と名刺交換してから退出しなさいという指令 (?) が下りました。これはJavaOneの伝統なのでしょうか? これはとても良かったと思います。

とまあ1日目はこんな感じでした。色々省略したつもりですがかなりの分量になっちゃいましたね。
朝早くから夜21:00まで続き、普段の仕事よりよっぽどハードでしたねえ。
当日のTwilogのリンクも貼っておきます。4/4のツイート丸ごとですが、大半がJavaOneについてですw
http://twilog.org/aoetk/date-120404

2日目については後ほど別エントリで。

*1:後日リリースされたJavaFX2.2 Developer PreviewにはそのあたりのAPIが入っていました

*2:Effective Javaの著者の方です

*3:JRockitの場合、ヒープがNersery領域とOld領域に分かれます。これ知っている人どれくらいいるかなあ?