2016/2/15 【東京】JJUGナイトセミナー 「Java EE 7徹底入門」の著者が解説! - Java EE 7特集 に参加しました

2016/2/15 に開催された
【東京】JJUGナイトセミナー 「Java EE 7徹底入門」の著者が解説! - Java EE 7特集
に参加してきました。

感想

仕事でSpringBatchを使っていたので、JBatchとSpringBatchの差分を知りたくて参加してみました。

結果的には、申し訳ないですがワタシ的にはSpringでいいかなと思いました。
機能的にはJBatch,SpringBatchどっちを選んでも大差無いように思えましたが、

  • JBatchは設定がXML一択
  • JavaEEを使う積極的なモチベーションがわかなかった
    という2点で、現段階ではまだSpringの方がいいかなと思いました。

久しぶりにJavaEEの話を聞いた感想としては
「JavaEEも仕事で使ってもいいかな」
と思える様になったというところでしょうか。

自分の JavaEE = 地雷源 というステレオタイプを改めてくれるきっかけになったのは嬉しかったです。

登壇者の方が、中の方だったので、Springと比べた時の長所短所など、Java全体で見たところのJavaEEという感じの話があまりなかったのは残念でした。


以下、当日のメモです

Java EE 7徹底入門 概要説明 (猪瀬さん)

書籍で目指したこと

自然な日本語で実践的な機能に絞って完全に動作するサンプルを
→職場でJavaEE使おうと思った時に使える本にする

出版してみて

誤記が多い
→誤記は正誤表を確認してね。
→積極的にこっちを更新しているので

JavaEE日本語情報が増えてきた
→採用される候補になり訳すなった

事件

てらだよしお退職

白猫本と読んでね

→スマホゲームとかぶる問題
→ググラビリティ低い!

プレゼンテーション層の開発 JSF (加藤田さん)

JSF使ったことある人

→4割→浸透してきた?

書籍用のサンプルアプリケーション

ナレッジシェア

JSF フェースレット

  • XHTMLベース?! だと?!

  • スクリプトレットが記述できない
    →ロジックが強制的に分離される

書籍ではふれなかったこと

JSFのより詳細なこと

  • カスタムコンポーネント
    • 独自のタグライブラリを作る
  • イベント
    • ValueChangeイベントとか
      → 値を変更してボタンを押したタイミングで発火
      →イマイチつかえない
  • BeanValdation
    • グループ機能
      → 登録画面と変更画面でちょっと違うとかに対応
  • EL
    • lambda式とか
      →EL3.0 で追加された機能とか

JavaEE8

どうなるJSF2.3?

  • WebSocket対応 → これが目玉!
    • JSF = なるべくJavaScriptを使わないで開発しようというポリシー
  • マルチフィールドバリデーション
    • 関連チェックができるようになる
  • あと改善系少々。。。

MVC1.0

  • StrutsみたいなAction機構で開発するフレームワーク
    → JAX-RSベース → 基本的にアノーテーションは同じ
    → ビューはfacelet,JSP
今後のプレゼンテーション
  • JSF
  • JAX-RS + Client MVC
  • MVC 1.0 + WebComponents?
    になってくんじゃないかとおもいます。
    →どれに行ってもコンポーネント指向に収束していく。(のか?)

JSF関連ライブラリ

  • コンポーネント系
    → 画面をリッチに
    → PrimeFaces
  • ライブラリ系
    → 開発を容易に
    → OmniFaces PrettyFaces

  • PrimeFaces
    →画面系最有力

  • OmniFaces
    →個人ベースだから使用する際は注意(とはこれいかに?)

まとめ

  • JSFは成熟している

ビジネスロジック層の開発 CDI,EJB (羽生田さん)

CDI, EJB 排他的な関係ではない→組み合わせて解決するのが良いとおもってる

CDI

POJOにスコープ定義さえあれば@Injectで好きにInjectionできる!

  • @ConversationScoped
    →好きにライフサイクルが定義できる

CDI

  • 簡単便利
  • スコープ定義だけ覚えれば使える

CDI コンテナ

  • Weld
    →Weldのバージョンが何かを把握していないと死ねる
    →APサーバーのバグより前にWeldのバグを調べたほうがいいくらいの勢い
アクセス用API
  • CDI

    • CDI.current() でとれる
    • CDI.select(MyBean.class).get(); とかできる
  • CDIProvider

  • BeanManager

    • Portable Extensionを担う
      →いろいろできるけど使いすぎに注意→障害時におえなくなる?
  • LifecycleEvents
    →コンテナ周りのイベントをフックできる

どんな人むけ?

→APサーバーとかコンテナに任せておけない

→Weldの実装が変わったら死ねるので気をつけよう

雑感

  • CDIコンテナの動きとか、インジェクションどの位しているのかとかを制御したい(時があるらしい)
    →CDIビーンのライフサイクルウォッチするようなものが作りたい

@ConversationScoped

CDIとトランザクション

  • @Transactional
    • トランザクション境界
  • @TransactionScoped
    いま有効なJTAトランザクションの実行に合わせたライフサイクル
    →トランザクションに合わせたビーンがほしい時とか

(JavaEEをずっとやってきた感じでSpringと比べてどうとかそういうのはやっぱりないんだねぇ)

バッチアプリケーションの開発 jBatch (猪瀬さん)

JBatchとは

→JSR-352
→SpringBatchから多くを継承
→SpringBatchの方が高機能
→SpringBatchの一般的なところを拾って標準化したもの

Why JBatch

  • スレッドで軽量
  • ライブラリ共用できる
  • 開始停止の仕組みが用意されている

###ジョブとステップ
Jobの中にステップがある
→設定は XML XML XML

ジョブとステップの分離

  • 古くはホスト時代に遡る JCL

ステップの種類

  • チャンク型
    →Reader/Processor/Writer形式
  • バッチレット型
    →シンプルなやつ
    → SpringBatchとおなじ

補助機能

ジョブリポジトリ

→Glassfishには管理画面があって、一覧で見えるとか!

リスナ

→SpringBatchとおなじ

コンテキスト

  • JobContext
    →永続化されない
  • StepContext
    →永続化される

メトリック

→ステップの統計を取れるAPI
→APサーバーでも確認できる

本に書いていない

  • ステップパーティショニングという機能があるよ!