JavaOne2013 1日目 セッション漬け

(2013/10/15に書いてます)
さて、JavaOne初日です。
JavaOneが本気だしてきたので、たくさんのセッションがあります。
8:30から21:30くらいまで、一日中セッション漬けでした。そんな朝からほんとに出てたの?という疑問があるかもしれませんが、時差ぼけのせいか、サンフランシスコでは毎日7時に起きて23時に寝るという規則正しい生活をしていました。


セッションは、次のとおりです。
CON3638 10 Tips for Java EE 7 with PrimeFaces
CON2176“Use the Force, Luke” or Tips and Tricks for Using the Capabilities of JavaFX
CON6617 Java EE 7: What’s New in the Java EE Platform
CON6064 Introducing the Java Time API in JDK 8
CON8165 Type Inference in Java SE 8
BOF3473 The NetBeans Roadmap for Cutting-Edge Tooling for Cutting-Edge Java
BOF3433 What’s New in Java Transaction Processing
BOF4244 Swing 2 JavaFX
BOF4040 NetBeans Platform BOF

10 Tips for Java EE 7 with PrimeFaces

Java EE 7対応のPrimeFacesの話。
PrimeFacesというのは、jQueryベースのJSFコンポーネントセットです。
10のチップスということですけど、印象に残ったのは次の点。


全体的に、Bean Validationはいろいろなところで使われるようになっていて、影で支える印象です。
あと、JSFは基本的に処理をJava側で行うのですが、やはりそれでは通信ラグがあるので、クライアント側でのバリデーションも実装されたようです。


新しいコンポーネントとしては

  • オートコンプリート
  • TreeでのD&D
  • ダイアログフレームワーク
  • 固定のテーブルヘッダー
  • スクロールできるタブ

のようなものが取り上げられていました。
いままでPrimeFacesのダイアログは子ダイアログまでで、孫ダイアログを出すことができなかったのですが、これが自由に出せるようになるならとてもいいですね。


Pushフレームワークは、WebSocketやロングポーリング、JSON-Pなどを統一的に扱えるフレームワークなんだと思います。POJOをやりとりできるのでプログラムしやすそう。


Faces Flowsは、 @FlowScoped/@FlowDefinitionで一連のページ遷移でのスコープを定義するものです。


あと、FileUploadは、JSF2.2で導入された標準のFileUploadに対応したほか、HTML5を利用したコンポーネントになっているという話。


JSF2.2本体とあわせて、正常進化という感じですね。

“Use the Force, Luke” or Tips and Tricks for Using the Capabilities of JavaFX

JavaFXのセッションでも聞いておくかーということで取ってみたセッション。
CSSSVG使いましょうって話でした。
まあ、スターウォーズ人気なんだな、という感想。

Java EE 7: What’s New in the Java EE Platform

JavaEEスペックリードのリンダ・デミケルのセッション。
次のように盛りだくさんの内容。

  • JSON Processing 1.0
  • WebSocket
  • JAX-RS 2.0
  • CDI
  • Pruning
  • JMS 2.0
  • Concurrency Utilities
  • Batch
  • JPA 2.1

とりたてて新しいことを話したわけではないので、技術的詳細は省きます。


CDIはいろいろなところで当たり前に出ていたのですが、会場から「CDIって何?」という質問が出て、リンダが「Contexts and Dependency Injection」とキレ気味に答えたのが今回のハイライトです。
と、このとき冗談気味にTwitterに書いたのですが、Java EE 7全体として、これは象徴的なできごとだったのかもしれません。


Java EE 5までは、EJBがその中心的位置づけになっていました。でも、Java EE 7では明確にCDIが中心的な役割になっています。EJBが結果として単にプロモーション的な「位置づけ」だったのに対して、CDIは実際にJava EE 7での屋台骨となっています。
そして、Java EE 7の提供側では、すでにCDIが前提になっているのにかかわらず、まだ利用者にはそこまで浸透していない、ということを表す出来事でした。


あと、視力検査かってくらい文字が小さく見にくいので、会場から挙手があったにもかかわらず、華麗に無視してプレゼンを続けるリンダが印象的でした。

Introducing the Java Time API in JDK 8

JDK8で導入された、新しい日付時刻APIについて、スペックリードのStephen Colebourneのセッション。
これも特に新しい内容があったわけではないので、APIの詳細は以前のエントリなどを参考にしてください。
http://d.hatena.ne.jp/nowokay/20130917#1379376320


ステファンさんは、終始にこやかにプレゼンしていました。おだやかなガンコものという印象です。
ZonedDateTimeについて会場から、zoneIdを省略したものが欲しいという要望が出ていました。ステファンさんの答えは、LocalDateTimeを使えばいいよ、ってことでした。
あと、地域の事情で暦に変更があった場合は、JDKのアップデートで対応していく、ということでした。


セッションが終わって、上記エントリが盛り上がったときにTwitterでステファンの名前が流れまくったことについて、ぼくのブログが原因でしたごめんね、と謝っておきました。ついでに、ぼくもzoneIdを省略したものが欲しいというと、それは日本の固有の事情があるのか?と聞かれましたが、それ以上のやりとりを続ける英語力がなかったため、続きはTwitterで!と言って逃げましたw
求む英語力。

昼ビール!

会場ヒルトンホテルの横の通りをふさいで、休憩スペースになっています。
ここでは、ビール飲み放題!

Type Inference in Java SE 8

Java型推論の話。
Javaには型推論ないんじゃね?と思う人もいるかもしれませんが、地味に型推論はありました。
それを利用したのがJava SE 7のダイヤモンド演算子だったりします。
ただ、今までの型推論は貧弱だったので、メソッド呼び出しの引数にダイヤモンド演算子が使えないとか、同じく引数でジェネリックメソッドの呼び出しを書いたときに型推論が効かず、いちいち記述が必要とかありました。

List strs = new ArrayList<>();

はできるのに

some.hoge(new ArrayList<>());

はできないので、

some.hoge(new ArrayList());

と書く必要があったとか。
あと、JUnitでテストを書くときに

assertThat(myList, hasItem(Matchers.hasProperty("hoge", is("aa"))));

とか書く必要があったのですが、ちゃんと型を省略して次のように書けるようになります。

assertThat(myList, hasItem(hasProperty("hoge", is("aa"))));


このときの型推論がJava7からJava8にどう変わったのかという話をしていたのですが、型推論の解説部分が資料の下部にあったので、ぜんぜん見えませんでした・・・
ヒルトンの会場では、資料の下のほうがぜんぜんみえません・・・


ダウンロードした資料を見直すと、「some.hoge(new ArrayList<>());」の例では、最初からnew ArrayList()を仮定して推論を始めてしまうために推論ミスになってしまうということだったようです。これをnew ArrayList()のように型変数をあてはめて推論することで最終的に正しい型にたどりつけると。


まとめとして

というのをあげていました。

The NetBeans Roadmap for Cutting-Edge Tooling for Cutting-Edge Java

NetBeansのロードマップの話

前日にNetBeans DayがあってNetBeansの話はたくさん聞いた人が多かったためか、人はそれほど多くありませんでした。


ロードマップはこんな感じ。

ざっくりしてますね。
ここでも、まずはJava8対応が目先の目標で、それからの話はそれ以降という感じ。


要望として多いのが

ということを取り上げていました。


まるでBOFのようなゆるさだなと思ったら、このセッションからはBOFだったようです。

What’s New in Java Transaction Processing

トランザクションの話。
@Transactionalアノテーションをクラスやメソッドにつけることで、宣言的トランザクションが実行できるという話。
検査例外はロールバックせず非検査例外ではロールバックするというのはEJBと同じ挙動ですが、rollbackOn、dontRollbackOnという属性で例外を指定できるというのが便利そうです。
あとは、トランザクションごとにインスタンスが生成される @TransactionScoped というスコープの紹介がありました。あまり使うことはなさそうですけど。
これで通常のアプリケーションではEJBが不要になりましたね。
でも、ここでもやはりCDIって何?という場面がありました。

大阪うどん!

なんだか大阪うどんという店があったのでよってみました。

お店では、ふつうに日本人の店員さんで、ふつうの日本語が通じました。
味は、高速道路のサービスエリアで食べるうどんみたいな感じです。ちょっとダシが日本のとは違うかなーくらい。ただし、量は多い。うどんはこれでmini udonです。

写真でみると確かにminiですが、天丼がかなり大きいです。なので、うどんも結構大きい。おなかいっぱい。

Swing 2 JavaFX

SwingプログラマJavaFXプログラマにどう移行するか、とかいう話ではなく、SwingとJavaFXの相互連携の話でした。
これまでSwingではJFXPanelを使うとJavaFXコンポーネントを使えていたのですが、JavaFXにSwingコンポーネントを載せるということができていませんでした。
それが、SwingNodeを使うとできますよ、という話。
SwingとJavaFXでは、イベントスレッドが別々なので、それをどう統合するかという話もありました。

NetBeans Platform BOF

もう完全に関係者ばかりのセッション。


Javaの未来はNetBeansの未来だし、NetBeansの未来はJavaの未来だ」とか豪語してましたね。
やるな。
壇上から写真とってたり、みんなリラックスしてました。
あとは、JavaFXNetBeansに載せていくって話。
このあたりは、Geeertjanのブログを見ると実際に動き出してる感じがあります。
Thanks JavaFX: WYSIWYG HTML Editor for NetBeans IDE (Geertjan's Blog)
Improve Office Productivity with JavaFX and the NetBeans Platform (Geertjan's Blog)


ということで、この日はここで終了。おとなしくホテルに帰って寝ました。