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イベントとか
→ 値を変更してボタンを押したタイミングで発火
→イマイチつかえない
- ValueChangeイベントとか
- BeanValdation
- グループ機能
→ 登録画面と変更画面でちょっと違うとかに対応
- グループ機能
- EL
- lambda式とか
→EL3.0 で追加された機能とか
- lambda式とか
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 PrettyFacesPrimeFaces
→画面系最有力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を担う
→いろいろできるけど使いすぎに注意→障害時におえなくなる?
- 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サーバーでも確認できる
本に書いていない
- ステップパーティショニングという機能があるよ!