SyntaxHighlighter

2012年4月9日月曜日

JavaOne Tokyo 2012 2日目

JavaOne Tokyo 2012 2日目の話。

2日目に参加したものは以下の通りです。


  • [JK2-01] Technology Keynote
  • [JS2-01] #jt12_s201 The Java EE 6 Programming Model Explained
  • [JS2-13] #jt12_s213 Java EE 6時代のJ2EEパターン再考
  • [JS2-21] #jt12_s221 How to Write Low Latency Java Applications
  • [JS2-31] #jt12_s231 ForgeとArquillianを利用したJava EEアプリケーションの迅速な開発
  • [JS2-41] #jt12_s241 Java Persistence API on the Grid
  • [JS2-51] #jt12_s251 The Future of JavaScript in the JDK
  • [JK2-01] Technology Keynote


[JK2-01] Technology Keynote


2日目のキーノートは、Coin, Lambda, Jigsaw, JDK7,8,9の方針、JavaFX, Java EE7(Cloud周り) 、いろんなデバイスにJava載るよ、 Java ME、M2M、という話の概要レベルがキレイにまとまっててキーノートとして非常にわかりやすかったです。

CoinやLambdaは、1日目のセッションで重複しているものが多かったので、さらっと聞けました。
Lambdaは1日目に見たものを早速書き方が異なっていて、どっちが最新だよ、というツッコミが。

キーノートでは、「Math#max」という表記で、1日目のセッションだと、「Math::max」のように「::」を用いて示しているところが微妙に違ってました。

JavaFXは、初日のStrategy Keynoteでキネクトっぽく、スピーカーの方の動きと、JavaFX上のDukeの動きがシンクロするという面白いデモ + GUIエディタを見せてもらってから急に興味がわいて来ました。
今回のJavaOneではJavaFXのセッションもかなり多かったので、Oracleとしても力は入ってるのでしょう。
どれか一つくらい、JavaFXのセッション聞いておけばよかったかなとちょっと後悔。

Java EE7では、再度、クラウドの話がありましたが、このあたりはやはりクラウドベンダーとの協調がどうなされていくかが重要かなと思っています。

組み込みJava関連はあまりお仕事では関わったこともなく、詳しい話はスルーしました。


[JS2-01] #jt12_s201 The Java EE 6 Programming Model Explained


Java EE6でのプログラミングモデルの話。
1日目のセッションのいくつかで聞いた情報が重複していました。
web-fragment.xmlはここでも出てきていたので、意外と有名なんだなと。

EE6は、なぜかweb.xmlが嫌いみたいでweb.xmlなしでも起動できるようにアノテーションやら、ServletContainerInitializerで初期化処理がコードベースでできるようになっています。

が、個人的にはweb.xmlはあってもいいんじゃないかなと思います。
定型的なものは、web-fragment.xmlで流用できるようにしておけばいいし、web.xmlがあるほうがエントリポイントが見つけやすくていいと思っています。

strutsや2.5系以前のspringのように、画面や機能が増えるごとにXMLも増えていくのはもちろん避けるべきだと思いますが、数が増えない(であろう)コアの部分やアプリケーション全体のコンフィグレーションを示す外部ファイルはあってもいいと思う。

CDI周りは、Qualifierアノテーションを使えば、独自のDIの目印用のアノテーションを作れるのは知りませんでした。
Qualifierの仕組みは、Springでも使えるようで、試してみたところ、Spring3.1でもQualifierアノテーションを活用したDIができるので、これは便利で早速取り入れています。


[JS2-13] #jt12_s213 Java EE 6時代のJ2EEパターン再考


ちょっと選択を失敗したセッション(笑)
いや、内容は悪くはなかったのですが、EJB2からやってきてる人向けのセッション内容でした。
EJB2は概要レベルは知っていますが、基本的にEJB3以降の世代なので、あまりバッドノウハウを知らない状態で聞いても、いまさら感が結構ありました。

EJB2はやっぱりいろいろ苦労されてるのですね。。。


[JS2-21] #jt12_s221 How to Write Low Latency Java Applications


JVMのメモリ管理の話。
最初は、基本的なメモリ管理の話かーと思って、油断してたら後半はちょっと難しかった。
このときは、結構疲労してたので話しとTLをウォッチ中心にしてしまいました。



[JS2-31] #jt12_s231 ForgeとArquillianを利用したJava EEアプリケーションの迅速な開発

レッドハットさんによる、CDI周りとForgeの話。
Arquillianという方の話は時間の関係か、結局詳細は聞けず。
(別のセッションで詳しくされてたみたい)

CDIでは、CDIのExtension部分の汎用的な部分を提供するDeltaSpikeというプロジェクトがあるようです。
JBossではなくて、Apacheとしてプロジェクトが立ち上がってるみたい。


Forgeは、Spring Rooのようなコマンドラインベースでコードを自動生成するツールです。
最初みたとき、めっちゃ似てると思いました(笑)

ただし、Forgeのほうは、Spring Rooとは違って純粋なjavaコードを出力していたように見えました。

Rooのようにajファイルを出力して黒魔術的にやるよりは明示的にjavaコードを出力してくれるほうがわかりやすい気もしなくもないですが、変更が入ったりラウンドトリップな感じで進めて生きたい場合はどうするんでしょうか?

Rooは、javaコード部分のほうは、変更されること前提で設計されているので、変更を検知してくれるけど、Forgeも変更に強かったりするのかな?であればかなり便利そうな印象。
出力されたものをスケルトンとして継承して利用するようにするのが基本なのかな。

また、Rooでscaffoldすると、View部分がJSPの独自タグ満載(tagx)で作られるので違和感があるのですが、Forgeのほうは、JavaEEということでJSF(facelets)で出力するようです。
こちらの方がすんなり入れそうという印象。





[JS2-41] #jt12_s241 Java Persistence API on the Grid


タイトルにはないけど、ほぼCoherenceの話。
JPAのキャッシュ機構は微妙だけど、それを補うのにCoherence使ってねみたいな印象を受けました。
(いいすぎ?)
TLみる限りでは、JPAのキャッシュはあまり使ってる人いないみたい。
memcachedと組み合わせたりするほうがいいですかね。


[JS2-51] #jt12_s251 The Future of JavaScript in the JDK


Node.jsでJavaのクラスが使える!
このセッションで一番盛り上がった瞬間。

Java6ではRhinoだったけど、Nashornという名前で後継プロジェクトができてるよう。
JavaとJavascript間をよりシームレスに利用できるようになるみたい、JavaBeansやCollectionのやりとりが簡単になったり、デバッグもできるようになる。

Nashornでは、Javascript上から、java, javaxパッケージのクラスが使えるようになる。

デモでは、Node.jsがNashorn上で再現され、さらにNode.js(Javascript)コードからJavaのSimpleDateFormatを使って日付をフォーマットしてコンソールやブラウザに出力するデモ。

前半は、まったりとした説明で会場の空気もまったりしていたのですが、Node.jsのデモから体感的に一気にまわりの食いつきが変わってた。

javaxパッケージが使えるということで、Node.jsからJDBCが使えることになればまた面白そう。

今のところ使う場所は想像できないけど、プロジェクト的にはかなり面白い取り組みだなと思います。


まとめ・感想


JavaOneは初参加でしたが、非常に有意義でした。

今後のJavaの進み方、現在の取り組みがかなり整理された状態で聞くことができたのが、やはり大きい。

どういった方向性に進んでいるかをちゃんと提示してもらえると開発者としてもどういう風に進んでいこうかということが考えていけるので非常によいと思います。
(方向性が合わない場合はJavaから離れてもよいわけですし)


Oracleさんの会場運営もよかったです。
全セッション(?)に通訳レシーバがちゃんとありましたし、たまたま前方の席のほうに座って気づいたのですが、手話用の通訳もあり、こういった細部にも配慮されているんだなぁと感心しました。

ただ、セッション間の移動は、会場が同じであっても総入れ替え制でそこの混雑が段取りがいまいちだったなぁと思います。
同じ会場でセッションが続く場合は、デブサミのように、会場前方で受け付けれるようにしてあれば、分散されてもう少し混雑が緩和されていたのではないかと思います。

とはいえ、非常に有意義な時間を過ごさせていただいたのは間違いありません。
スタッフの皆様、お疲れ様でした&ありがとうございました。

JavaOne Tokyo 2012 1日目

JavaOne Tokyo 2012に参加してきました。
7年ぶりとのことらしいですが、自分は7年前は社会人なりたてくらいだったので存在をあまり知りませんでした。

大きめのカンファレンスはいくつか参加したことありますが、ここまでJava + 技術ネタのセッションばかりのものは初めてで非常に楽しめました。

参加人数の1000人オーバーということで、普段回りに少ない(あれ?)Javaのエンジニアの方々がたくさんいたり、Twitterでつぶやいてると、同じ会場で聴講している方がコメントくれたりして楽しんで聞けました。

自分が1日目に参加したものは以下の通りです。

  • [JS1-02] #jt12_s102 Java EE Web Container in the Cloud -What's New in Servlet 3.1
  • [JS1-11] #jt12_s111 The Heads and Tails of Project Coin
  • [JS1-21] #jt12_s121 Pragmatic Cloud and PaaS with Java EE 7 (and GlassFish)
  • [JS1-31] #jt12_s131 Project Lambda: To Multicore and Beyond
  • [JS1-42] #jt12_s142 JAX-RS 2.0: What's in JSR 339?
  • [JS1-51] #jt12_s151 HotRockit: What to Expect from Oracle's Converged JVM

[JS1-02] #jt12_s102 Java EE Web Container in the Cloud -What's New in Servlet 3.1


Servlet3.1まわりの話。
一通り知ってるつもりでしたが、web-fragment.xmlは知りませんでした。
web-fragment.xmlを使えば、web.xmlの一部を定義しておいて、jarに同梱できるようです。
フレームワークなどを作っている場合は、servletやfilterが必要になることが多いので、フレームワークで利用するfilterを定義しておいて、jarに同梱しておけばすぐに使えるという感じ、これは便利そう。

後で調べてみたところ、複数のweb-fragment.xmlがあり、かつfilterが適用される順番などを気にする必要がある場合は、web.xmlに、<absolute-ordering>タグを記載すれば明示的に順番を指定できるよう。


少しだけ、WebSocket対応というキーワードがありましたが、詳細なし。


Java EE7の話。
EE7ではクラウド対応というキーワードしか知らなかったのですが、かなりいろいろなものが入りそう。
アプリケーションレイヤーとしては、multi-tenancy対応が気になりました。
アプリケーションで複数の顧客をサポートするような場合の対応です。(Salesforceのように)

JPAレベルでもいろいろサポートするようで、@Multitenantのようなアノテーションでマルチテナントを明示化したりするようです。

テナントIDといった顧客を識別するIDをwhereに自動的に組み込み、データをうまいこと扱うような感じです。

テナントIDの引き渡し方といったことなどはまだまだ仕様策定中らしく詳細はまだ不明。

とはいえ、最近は案件としても、リソースの有効活用という観点からもマルチテナントなアプリケーションを求めれられることがあるので、こういった機能があると確かに便利だなと思います。

また、バーチャルサーバというテナントごとに独立したイメージのサーバを立てることができるようになるみたいでこちらもおもしろそう。


[JS1-11] #jt12_s111 The Heads and Tails of Project Coin


Coinの話。
CoinはJava7から入っている小さい変更です。
小さいといっても、Javaの世界において影響度は小さくなく、そういった変更に対する影響の話やコンパイラでどう解釈されるかなどの話があって、Coinの仕様自体の話よりもそちらの話がおもしろかった。

Coinは6つのフィーチャーだけど、その小さなことが他の機能に影響しており、全体の1/3程度に影響がしているらしく、樹形図のようなものを見せてもらいました。それらに対してどう影響を考慮していくかといった、開発プロセスの考え方の話がおもしろい、これはスライドあげてほしいなぁ。

Coin自体については一度サンプルコードを書いてみたことがあったのでおおむね知ってる話でした。

ちなみにサンプルコードはgithub上に上げています。



[JS1-21] #jt12_s121 Pragmatic Cloud and PaaS with Java EE 7 (and GlassFish)


1つめのセッションに続いて、Cloud関連の話。
このセッションでは特にPaaS関連が中心でした。

PaaSではMulti-Services, Elasticity, Isolationを意識する必要があるよう。

Multi-Serviceは、
Elasticityは、リソースの増減を柔軟にすること、
Isolationは、独立性を確保すること、マルチテナントになった場合でも他のテナント(顧客)のものは見えないようにしないといけない。

IMS(IaaS Management Service)と呼ばれるアーキテクチャで、PaaSのリソースの上げ下げをコマンドラインインタフェースやAPIでできるようにするという感じのスライドがあったけど、あまりよくわからなかったです。

IMSは、ユーザには、あくまでレイヤーしか見せないようにラップして、実際のサーバをelasticに増減するのはPluginで頑張る感じなのかなという印象を受けましたが、理解があってるかはいまいち不明。

AWS Pluginとか、Azure PluginとかIaaSにサービスに応じたPluginが出てきたりするのでしょうか。

なんにせよ、クラウドのポータビリティを意識しているんだなところはいい印象です。
ただ、SpringSourceのクラウド間のポータビリティへの取り組みである、Cloud Foundryとかも少なくとも日本ではあまり聞かないのでここらへん、うまく仕組みを作っただけでは普及しないのではないかと思っています。

たぶん、クラウドベンダーと如何に連携ととって推し進めれれるかがキーポイントとなりそう。


デモでは、Glassfish4によるelasticなサーバの上げ下げのデモがありました。
サーバにメモリ負荷をかけると自動的に別のサーバが起動してAutoScaleするデモでした。

AutoScaleするトリガーはいくつか選べるようで、今回はメモリが一定値以上なら自動的にスケールする設定のよう。

デモでは、全部同じマシン上で別ポートとしてサーバをあげていましたが、実際には別の仮想サーバであげたりすると思うので、そのあたりの連携とかどうなんだろう。

ノードマネージャ的な機能が入るんでしょうけど、どうAWSとかと連携していくのかまだイメージがわかない。


[JS1-31] #jt12_s131 Project Lambda: To Multicore and Beyond


Lambdaの話。
セッション名を読み上げる司会の方がランバダとかいってちょっと吹いた。(まぁそう読めちゃうやんね。。)

Lambdaは、構文がかなり大幅に書き換わるからか、まだまだ変わる可能性があることが強調されていました。

例えばソートするときには、以下のようにかけるみたい。
「people.sort(comparing(Person::getLastName));」
今までだと、無名クラスでComparatorを自前で書いてたりしたけど、かなりすっきりする印象。

セッション後の周りで、「これウチの人間はたぶん使えない」とかいう声も聞こえてきましたが、個人的にはすっきりするのでうれしい。

新しくJavaやる人にとっても最初からこういう構文だということで入ってくればよりすっきりわかりやすいのではないかなと。

これは早く欲しいフィーチャーです。


Interfaceのdefault methodの話。

インターフェースに直接、デフォルトの実装を定義できるようになるらしい。
スライドの例では、デフォルトでUnsupportedOperationExceptionをスローするとか。

2つのインタフェースに同名のデフォルトメソッドが実装されていたりしても、どちらを利用するか明示できるみたい。
implements Hoge, Fooとして、両方ともに、getValue()みたいなデフォルトメソッドがあってどちらを使うかというようなときなど。

この機能はインタフェースデザインをうまくできないとハマる原因となりそうなので、ちょっと注意したいところ。


[JS1-42] #jt12_s142 JAX-RS 2.0: What's in JSR 339?


JAX-RS2.0の話。
JAX-RSは全然使ったことないけど、アノテーションスタイルでかなりすっきりかけるようで好印象。

が、Spring MVC使ってるとちょっとしたJSONやXMLは普通に@ResponseBodyで返せるので、Spring使ってるとあまり出番はないかなと思った。

ただし、JAX-RS2.0ではいろいろ機能を拡充していくみたいで、Bean Validation対応や、独自Interceptor、PreMatchRequestFilter、RequestFilter、ResponseFilterといった拡張ポイントがいろいろ用意されているようなので、このあたりの仕様をもうちょっとウォッチしてみたいところ。

なんかSpring使ってると、だいたいそれあるよ的な感じになってしまうのですが、RESTスタイルのJava標準としてキレイに整備されていくと、Spring側にもフィードバックされそうでいいなぁという感じです。


[JS1-51] #jt12_s151 HotRockit: What to Expect from Oracle's Converged JVM


JVMの話。
会場アンケートで、どのJVM使ってる?という質問で

IBM J9 ->1人
JRocket->そこそこ
HotSpot->多い

という結果に。
自分もIBM Java6は使ったことがあるのですが、J9=Java7のことかと思って手をあげませんでした。(ゴメンなさい、唯一あげた一人の方。。。)

セッションの中心は、JRockit Flight Recorder(今後は、Java Flight Recorderに名前が変わるみたい)でした。
ボトルネックや、メモリリークの検知デモがあったりいくつかのデモがあって非常にわかりやすかったです。

WebLogicな案件でもあまり使ったことなかったけど、かなり興味わきました。
あまりクリティカルなメモリリークにぶち当たったことがないので使いこなせていませんが、WebLogic案件で試してみよう。


スペシャルセッション

LTラッシュ。
Dukeの顔を模したおにぎり弁当+飲み物(ビール、ノンアルコール)が配布されてうきうき。

大体爆笑していたので、全然メモってません(笑
ドラ娘さんのやりとりや、ろくろやバルスなど楽しませていただきました。


という感じで1日目終わりです。