JavaOne 2012 San Francisco 2日目

昨日のKeynoteに続いて、いよいよ今日から各セッションが始まりました。

セッションは朝8時半から始まり、一番遅いもので夜9時半に終わります。まさに一日中Java漬け。本格的な初日でテンション高かったこともあり、朝イチから連続で取っていったのですが、夕方に力尽きてしまいました…。明日からはセーブして行かねば。。

以下に受講した内容を簡単にまとめます。(毎日断ることになると思いますが、英語が拙いので、間違ってるかもしれません>< 間違ってたら教えて下さいm(_ _)m)

  • [CON7875] Building Portable Java EE 6 Applications in Eclipse
    • JavaEE6のデモというと、NetBeansでテンプレートをバリバリ使うものが多いですが、Eclipseでも同じようにできるよ!というセッションでした。確かにダイアログで選んで行くだけでJSF+JPAJavaEEアプリケーションができていました。
    • ライブコーディングのようなデモだったのですが、途中でアプリが500エラーばかり返すようになり、会場全体で協力してデバッグしていました。確かにJavaEE6になり記述量は格段に減り、見通しも良くなっているのですが、慣れない人がエラーの内容だけでどこが悪いのかを判断するのはハードルが高い気がします。特にEclipseだと、Eclipseのエラーとして上がってきたり、ホットデプロイが悪さしていてサーバ再起動でなおってしまったり。。何が起きてるのかがわかりやすくなると敷居がより下がるのではないでしょうか。
    • セッション後はホールで軽食(朝ご飯?)が振る舞われていました。写真
  • [CON3255] JSR 331: Constraint Programming API
    • Constraint Programming(制約プログラミング)とは、制約を定式化し、それを満たすような解を探して見つけ出す手法のことで、スケジューリングやリソースの割当問題などがこれに当たります。(大学時代の研究テーマだったため、中途半端に間違った事を書くと怒られそうなので、難しい言い方してます;;)
    • 要は、現実世界にある組合せ最適化問題を式にして、ソルバーと呼ばれるプログラムに食わせて答えを探すのですが、これがソルバーごとにAPIが異なるので、インタフェースを統一して標準化しましょう、というのがJSR-331だということらしいです。
    • 大学時代、ILOG(今はIBM)のCPLEXというソルバーに式を食わせようと頑張ってプログラムした辛い記憶があるので、インタフェースが統一されて、コードはそのままにソルバーを色々変えて試してみる、とかできるとなると、とても素敵だと思います。ただ、こんなニッチなAPI、そんなにいっぱい使う人がいるんでしょうか。。
  • [CON4701] 50 Tips in 50 Minutes for GlassFish Fans
    • GlassFishのWikiで公開されてる内容を50分で紹介してしまおう、という無茶な企画。2人組で5個ずつ紹介していったのですが、丁寧に説明するJavaEEエバンジェリストArun Guptaに対して、相方のスピーカーは「1個60秒以上かかってるよ!」と怒ってましたw
    • セッションのやり方はともかく、上記のWikiでは、クラスタの設定方法あれこれ(15,17など)や、JMXでサーバ情報を取得するあれこれ(23-25)、RESTでサーバを操作するあれこれ(31-34)など、有益なTipsが多く載っていたので、一見の価値ありです。
  • [CON4212] Java Persistence 2.1: What’s New
    • JavaEE7でマイナーバージョンアップされるJPA2.1について、JavaEEのスペックリードであるLinda Demichielが説明をしてくれました。
    • 2.1では、以下の3つの大きな機能追加と、DBのFunctionを呼び出せるようになる等の小さな機能追加がされるようです。
      • スキーマ自動生成:テーブル作成だけでなく、@Indexや@ForeignKeyなどのアノテーションが追加され、スキーマを構成するDDLをEntityクラスだけでより表現できるようになります。足りないDDLは、スクリプトファイルをプロパティで指定できるので、そこに記述しておけば実行してくれるようです。
      • 非同期PersistenceContext:今までは基本的にすべてのクエリがJTA等のトランザクション内で扱われていましたが、EntityManagerを宣言するアノテーションにsynchronization=UNSYNCHRONIZEDのように記述すると、トランザクション管理せずパフォーマンス向上を図れるようになるようです。非同期として宣言したPersistenceContextでコミットorロールバックしたい場合は、em.joinTransaction()を呼ぶと、通常時と同じようにトランザクション管理されます。
      • AttributeConversion:DBで値を持つ時の型や単位(キロ・ポンド等)と、Entityで持つ時の型や単位を変えたいとき、AttributeConverterというインタフェースを実装したMyConverterクラスを作っておいて、Entity内の持ち方を変えたいプロパティに@Convert(MyConverter.class)をつけておくと、DBに書くときや読み出すときに自動で値を変換してくれるようになります。
    • JPAJavaEEのORマッパー決定版という感じなので、引き続き一般性と柔軟性のバランスを取りながら拡張されていくのが楽しみです。
  • [CON4038] Project EASEL: Developing and Managing HTML5 in a Java World
    • Keynoteで小さいながらもサプライズっぽくなった、NetBeansからchromeの表示を操るアレの詳細な説明でした。正直、ここの辺りからバテてしまい、詳細まで追えませんでした><
    • 強調されていたのは、Project Easelは、WYSIWYGエディターではなく、JavaFXJSFなどのJavaSolutionのひとつでもなく、Photoshopのようなデザインツールでもない、webkitと同期するコード補完機能に過ぎない、ということでした。
  • [BOF7664] JPA 2.1 Tips, Tricks, and Examples
    • BOFということで、軽いノリでついてきてね、という前置きから始まり、猛烈な速さの英語で参加者とのやり取りをしながらセッションが進みました。「2.1の新機能の非同期PersistenceContext、どうよ?」とか「スキーマ自動生成は、ぶっちゃけそんなにいらないよね!」みたいな感じで、参加者が腹を抱えて大爆笑するシーンもありました。印象的だったのは、スピーカーが実際の開発担当で、最後に「Now, Your turn! 2.2に盛り込みたい機能ある?」で締めくくったこと。日本でのJavaOneでもBOFはあったものの、こんなに直接的に仕様に意見できる機会があるなんて、本場ならではだなぁ、と感じました。


夜は、昨日同様ライブに出向き、Jimmy Cliffの歌声に元気をもらってきました。写真 今年で64歳らしいのですが、動きもテンションも声量も歌声も、つやつやの20代みたいでした。すごい!

明日も引き続き楽しみたいと思います。


余談ですが、昨日のKeynote開始時に流れたオープニングムービーがアップされていました。youtube 昨年のJavaラップは「もっとコードを書け」的なブラック企業っぽいものでしたがw、今年はなんとなく幸せな気分になれる動画でした。ぜひぜひ。