2/15に
JJUGナイトセミナー「「Java EE 7徹底入門」の著者が解説! – Java EE 7特集」
に行ってきた!その内容をメモメモ
■JavaEE7徹底入門概要説明
講師:猪瀬さん
・自己紹介
・本日の趣旨 JavaEE7徹底入門の本をかいつまんで
・What is JavaEE
JavaSE:きほん
その上位概念
企業システムのアプリ開発に必要な機能を包括したJavaのAPI概要(フレームワーク)
39個の仕様から構成
・JavaEEの動作環境
JAVAEEは仕様
実行環境は、JAVAEEコンテナ、アプリケーションサーバー、、GlassFishなど
アプリケーションは、設定ファイル等とまとめて、jar,war,earに
アプリケーションサーバーに配置。デプロイ
JVM
・JavaEE7
JavaEEは96年から、
ネガティブ先行→Struts,spring,Hibernateが台頭 2000年前半
JavaEE5が転機:重かったものを簡単に
・JavaEE7徹底入門で目指したこと
日本語で解説
業務に使うところ
完全にアプリとして動作するもの
筆頭候補として位置付けられるもの
・構成
・出版後にあったフィードバック
誤記が多い→正誤表
章と章の間にばらつき
JavaEEの日本語情報、増えましたね!
次世代フレームワークを何にするか→情報量は重要なファクター
・事件
てらだよしお退職
レビューに層手以外の時間がかかった
観光直前のGlassFishのバージョンアップ
・FAQ
表紙が白い猫:金魚本
1名女子:猫がいい(Tomcat)きれいなTomcat
・この後のタイムテーブル
■JavaEE7徹底入門 プレゼンテーション層の開発JSF
講師:加藤田さん
・自己紹介
・本章の概要
JSFで開発したことある人 4割
・JavaEE徹底入門のもくじ
→3割くらいJSF(150ページ)
JSFの基本
JSFに絡む各機能
Facelet(タグライブラリ、EL)とマネージドビーン(スコープ)
入力チェック、コンバーター、コンポーネントカスタマイズ、テンプレート、HTML5,AJAX
国際化、認証
・サンプルアプリケーション、
ナレッジバンク(ノウハウ入力)
・サンプルアプリでも
画面遷移図
アカウント登録で説明
・JSFとは何か?
JavaEE7ではJSF2.2
・プレゼンテーション層のフレームワーク
値マッピング・入力チェック:サードパーティ→JSFへ
・JSFの構成要素
フェースレット
マネージドビーン
・フェースレット
画面のレイアウトを記述するHTMLベースのテンプレートエンジン
JSF2.0からJSPの代わりに使用
フェースレットとJSPの違い
XHTML→記載厳密
スクリプトレットが記載できない
文字列のサニタイジング
NULLの表示
テンプレート機能(Struts:tile)
記載例
フェースレットの構成要素
フェースレットタグライブラリ
EL(えくすぷれっしょんらんげーじ)
h:がついているものは、HTMLと対応
f:などある
EL式 値のヒモづけ
・マネージドビーンとは
フェースレットとバインドするJavaのクラス
入力値の保持やボタン押下時の処理
マネージドビーンの構成要素
スコープ
バインドする値の保持
ビジネスロジックの呼出し
画面遷移
JSF getter,setter必要
・フェースレットとマネージドビーンの処理イメージ
コンポーネントを主軸にコードを作成:コンポーネント指向
・本書では触れられなかった話
JSFのより詳細な機能
JavaEE8(JSF2.3)
MVC1.0
JSF関連ライブラリ
・JSFのより詳細な機能
カスタムコンポーネント
イベントハンドリング
Value-Change-Event:値を変更してボタンを押したら
ActionEvents
ビーンバリデーション
グループ化機能
EL(EL3.0で追加)
Lambda式
文字列連結オペレータ
・JavaEE8(JSF2.3)
追加予定の機能
WebSocket対応f:socketでJavascriptをなるべくすくなく
マルチフィールドバリデーション
DataTime
EL式暗黙オブジェクト
マネージドビーン等への・・・
・MVC1.0
アクション指向フレームワーク
JavaEE8で導入
JAX-RSを拡張
ビューはFacelet,JSPをサポート
タグlibのサポートない
名前が直接的だけど
実装例
JAX-RSのアノテーション
@Controller
・今後のプレゼンテーションの選択肢
JSF
JAX-RS+クライアントサイドフレームワーク(AngularJS,Reactなど)
MVC1.0+Web-Components?
・JSF関連ライブラリ
コンポーネント系
フェースレットの画面をリッチに構築するライブラリ
PrimeFace
ライブラリ系
JSFの開発を容易にするライブラリ
OmniFace,PromeFace
・PrimeFace
Ajaxを使用したページレンダリング
OmniFaces
JSFの開発をサポートするユーティりティライブラリ
個人レベルのライブラリ
■ビジネスロジック層の開発 CDI&EJB
講師:羽生田さん
・自己紹介
・排他的な関係ではない
CDI or EJB→排他的? で、どっちがよいの?
実際には、組み合わせで解決するのがよいのかなあ
・いいわけはここまで
・書いてないこと中心
・書いてあること
CDI
インジェクション、型解決、定義
イベント処理、捨てれpタイプ、プロデューサー・ディスポーザー
EJBの使い方
この先EJBまだ使っていいんだ米という行間
書いてないこと
CDIコンテナの取り扱い
@ConversationScoped
CDIにおけるトランザクションの取り扱い
おさらい
・CDIとはなにか
DI:層をくっつける接着剤
必要なオブジェクトを必要なタイミングで提供
スコープ定義
POJOにスコープ定義さえあれば@Injectionですきなところでインジェクション
5つ:どこで消えるか
Request
View
Session
Apprication
Conversation:生き死にを定義できる
・おさらい
CDIは簡単べんり
EJBと非尾書くすると実装が簡単かつリソースメリットがありそう
EJB;プール使い、なかなかきえない
CDI:使いたい個所でぱっと使ってさっと消えるのが理想
層ってなに?
CDIの適用範囲:広い
・はじめましょう
CDIコンテナ
良くも悪くもWeld。猫も杓子もWeld
アプリケーションサーバで採用しているWeldのバージョン押さえておかないと死ねます
GlassFishとWeb logicのWeld採用バージョン
→GlassFishが先行している
CDIコンテナのアクセス用API
CDI
CDI.current();
BeanManagerの取得元として利用
CDI.select(クラス).get();プログラマチックルックアップ
CDI.current().toString() Weldと帰ってくる
CDIProvider
CDI#current();の裏で呼び出される
BeanManager
ポータブルエクステンション(Chapter#11)
特定のCDI限定詞を持つCDIビーンについての情報取得
CDIビーンの操作
業務アプリで使いすぎるのは注意必要
フレームワーク化→障害時に追いかけられない
CDIコンテナ::LifeCycleEvents
・CDIコンテナ拡張機能の1つ
・各種イベントをフックできる
・SPI
・注意:デザパタ、フレームワークに乗せたくなる人は注意:Weldの実装変わったら、どうなるの?
・CDIコンテナの動きは手に取るようにはわからない
・大規模開発:インジェクションが死ぬほどあってわからないとき、どうやって制御
→LifeCycleEventsを使って生き様死にざまがわかるように
@ConversationScoped
begin()→end()タイムアウトある
明示的に
トランザクション
JTA1.2(JSR907)
目指せEJB CMTからの脱却
みんなそんなにEJBが嫌いなのか?
javax.tramzactionパッケージ
@Transaction
トランザクション境界の設定
クラスとメソッドどちらでも
JTAなのでCDIビーン
@TransactiopnScoped
現在有効なJTAトランザクションの実行に合わせたライフサイクルを持つもの
まとめ
CDIで何でもかんでもって設計もどうかなって思う
CDIが本格進出してきたことでフリーダム
CDI+EJBで
なやまないで・・・(DBアクセスはEJBとか)
多量のインジェクションはやめましょう
感想など
■バッチアプリケーションの開発jbatch
・自己紹介は割愛
・本日話す内容
Jbatchってなに
構成要素機能(ジョブ、ステップ、補助機能)
本書に書いていない
・What is jbatch
JavaEEにおけるバッチ処理の標準
Version1.0としてJavaEE7から登場
JSR-352
Spring Batchから多くを継承
・なぜjbatch
Javaでバッチを組む4つの方法
プロセスとして実行
自作スレッドとして実行
APサーバーでサーブレットとして実行
jbatchを利用
spring batchりよう
プロセスとして実行
シンプル
JVM起動時間のオーバーヘッド、CPU食う
APサーバーで他で動く部品の共有
自作スレッドとして実行
スレッド→プロセスに比べ早い
サーブレットとして実行
あまりよくない
APサーバーの部品共用はできるが
暴走した場合
きっかけがHTTP経由→半日かかるものとかは?
jbatchとして利用
○一定の理由ある
・jbatchの構成要素
ジョブとステップ
ジョブXML
ステップ:処理の本体
ジョブXML
プロパティ書ける
ステップ要素を書き足していく
子要素:バッチレット
ジョブとステップの分離
古くはホスト時代にさかのぼる→JCL
jbatchの構成要素
ジョブ:処理の順序制御
ステップ:実装のテンプレート
補助機能
ジョブの構成要素:XMLタグ軍
フロー
スプリット:並行(分散)実行
ディシジョン:前の結果を拾って、どこへ行くか
ストップ、エンド、・・
JOBXMLのroot要素
XSD指定するとエディタが補完
ジョブ全体の会誌、中断、再開
ジョブオペレーター
ジョブオペレーターの呼出し方法
JAX-RSを用いた起動方法
エラーハンドリング
リトライ
スキップ
ステップ
チャンク型とバッチレットの2種類
チャンク型
リーダー、プロセッサーライター
バッチレット
単発コマンド
チャンク型のステップ
実装のテンプレート
補助機能
ジョブリポジトリ
APサーバー配下、記録残る
リスナ
コンテキスト
JobContext,StepContext
メトリック
本書に書いてない話
ステップ・パーティショニング
ステップの並行処理
入出力ファイルをCSVにした理由
JSONP
リスタート機能の紹介→読み込みに失敗したとき
CSVのほうが、親和性高い
ここがへんだよjbatch
チャンクでジェネリクスが使えない
終了ステータス、バッチステータス、ジョブとステップで共用?
flow/sprit単位でのプロパティが指定できない
glassfishの参照実装で動かない機能