JavaOne2013レポート 9/23 (2日目)
理解できた範囲でキーノートの新しい発表というとAvatarのオープンソース化しかなかったので、2日目のセッションからまとめ。
Notify Your Mobile Clients by Integrating Push Networks and Java EE 7 [CON5073]
RedHatのAeroGear開発者のセッション。
テーマはモバイル(iOS, Android ..)に対して、push通知をどのように実装するかについて。
まず現状の整理として取り上げた手段が3点。
- iOSのLocal and Push Nortification
- Android/ChromeのGoogle Cloud Messaging Service
- FirefoxOSのSimple Push
いずれの案も各デバイスのAPIに依存していたり、デモではObjective-Cのコードが長かったりAndroidのXMLが冗長であることを強調。いずれの手段もマルチデバイス対応という点でつらい部分がある。
このセッションにおいて提案された解決策はAero Gear Pushの使用。デバイスごとにコーディングしなくても良くなるらしい。
Securing JAX-RS RESTful Services [CON5179]
セッションのテーマはどうやってセキュアなJAX-RSエンドポイントを実現するか。
HTTPのBASIC認証やダイジェスト認証を使う案
アノテーションによる認可のコントロール
- Jersey 2.3 User Guide 14.1.2.2 Securing JAX-RS resources with annotations について説明
OAuthを使う案
- Jersey2.3からOAuthに対するAPIが強化された。
- OAuthの認証の流れを抽象化したAPIOAuth2CodeGrantFlowインタフェースを導入
Three Key Concepts for Understanding JSR 352: Batch Applications for the Java Platform [CON7292]
Java Batchに関するセッション。テーマはJSR352の機能に関する説明。
実践的なTipsのような情報はなかった。去年のjBatchのセッションでは、もっとバッチの実行頻度を短くしましょう、バッチ数に応じてJavaVMインスタンス数を自動調整するなどWebShareの実装の話があったが、今年はあくまでJSR352仕様の解説のみ。
What’s New with Bean Validation and Expression Language in Java EE 7 [BOF7696]
JavaEE7から導入された、BeanValidation1.1とEL3.0の機能紹介がテーマ。
BeanValidation1.1
- CDIが使えるようになった。例としてカスタムバリデータ(ConstantValidator)の実装で、チェックロジックを@Injectで注入。
- Method Validation の導入。例では、ユーザ作成のビジネスロジックの引数(ユーザ名など)に必須属性かどうかを@NotNullなどを使って定義。
/** * 名前、パスワードは必須、名前は20歳以上の場合は、ユーザを生成。 */ public void createUser(@NotNull String name, @NotNull String password, @Min(20) int age... ) { // TODO ユーザエンティティの永続化など }
今までバリデーションというと、Java EE の3層モデル(プレゼンテーション:P層-ビジネスロジック:B層-パーシステンス:I層)で、プレゼンテーション層の役割だと思っていたが、紹介されたコードはビジネスロジックのAPIにMethod Validationを使っていた。確かに、ビジネスロジックの入力条件はビジネスロジックに定義した方が良いと思った。今までのJava EEアプリケーションは、P層で検証済みで正しい情報が流れてくる前提でB層を実装していたが、P層は名のとおり見た目に関するコントロールに専念させる方が適切と思う。
What’s New in Java Transaction Processing [BOF3433]
JTA1.2の新機能がテーマ。EJBで可能なトランザクションは、CDIでも一通り網羅された。
- @Transactional トランザクション境界を定義。
- @TransactionScope CDIのBeanスコープをトランザクションに。
- @Transactional(Transactional.TxType.REQUIRED)でスコープも設定可能。
EJBで実装されていたコンテナ管理トランザクションの機能は網羅されていたので、トランザクションコンポーネントを目的とするなら@Transactionalを中心に使うことになりそう。@Statelessでは、EJBを使い慣れてる人にはトランザクション境界だとわかりやすいが、例えばSpringを使ってる人にとっては@Transactionalの方が馴染み深いと思う。@TransactionScopeもステートフルセッションBeanの代わりに使えそう。
今後のEJBの使い道は@Asynchronousによる非同期処理と本来の分散処理であるリモートEJBを使いたいケースになるだろう。
他にもG1GCのセッションに出たり、Java VMのチューニングのQ&Aセッションに出たが、ほぼ聞き取れず...。