昨日、日本Javaユーザーグループ(JJUG:The Japan Java User Group)主催の月例ナイトセミナーが開催されたので参加してきました。
http://www.java-users.jp/?p=2350
今Java読書会BOFで開催中の読書会の課題図書である「Java EE 7徹底入門」の著者陣が登壇するセミナーです。といってもJava EEは仕様とサンプルをかじったくらいでそれ以上は物を作ったことがないのでJava EE初心者(自称)です。

Java EE 7徹底入門 標準Javaフレームワークによる高信頼性Webシステムの構築
- 作者: 寺田佳央,猪瀬淳,加藤田益嗣,羽生田恒永,梶浦美咲,小田圭二
- 出版社/メーカー: 翔泳社
- 発売日: 2015/12/16
- メディア: 大型本
- この商品を含むブログ (7件) を見る
セミナー受講メモ
冒頭は、猪瀬さんによる書籍執筆の話、Java EEの簡単な概要から始まりました。
http://www.slideshare.net/inose660/20160215-01-java-ee7
書籍は2年位かけて企画・執筆、完全に動作するサンプルを用意したとのことです。懇親会で聞いたところ、サンプルの開発は著者らが合宿して作ったそうです。
表紙が白い猫なので白猫本との愛称を付けて広めようとしたところ、ゲーム「白猫プロジェクト」が既にあってググラビリティが低かった、誤字脱字が多いので正誤表を整備していますよ、レビューには時間がかかってしまった、刊行直前にGlassFishのバージョンアップがあった、などの逸話紹介がありました。
正誤表サイト
http://www.shoeisha.co.jp/book/detail/9784798140926
本編は、加藤田さんのJSF、羽生田さんのCDIとEJB、猪瀬さんのjBatchの3本です。
まず、加藤田さんのJSFの話から。
プレゼン資料が公開されています。
http://www.slideshare.net/den2sn/javaee7-jsf
会場への問いかけ「JSFを使っている人?」に、ぱらぱらと手があがり、ぱっと見3割といったところでしょうか。(後ろの席の方が手を上げている人が多かったような?)
フェースレットとマネージドビーンの解説から始まりました。フェースレットはXHTMLで画面レイアウトを定義します。スクリプトレットが書けないので、ビューとロジックが分離できます。また文字列サニタイジングがデフォルトで実施されるそうです。
マネージドビーンは、フェースレットとバインドするJavaコードで、スコープ制御、バインドする値の保持、ビジネスロジック呼び出し、画面遷移を扱います。
続いて、書籍では触れなかった話として
- JSFのより詳細な機能(カスタムコンポーネント、イベントハンドリング、ビーンバリデーションのグループ化機能、ELのLambda式、文字列連結オペレータ)
- Java EE 8(JSF 2.3)から、WebSocket対応、マルチフィールド・バリデーション、Java Date and Time APIサポート、EL式の暗黙オブジェクト、など
- MVC 1.0(アクション指向フレームワーク、JAX-RSベース、ビューにはFaceletsとJSP)
- JSF関連ライブラリ(PrimeFaces、RichFaces、ICEfacesなどのコンポーネント系と、OmniFaces、PrittyFacesなどのライブラリ系)
について紹介がありました。
次は羽生田さんのCDIとEJBです。
書籍では、CDIかEJBか、といったニュアンスが出てしまっているが、実際は、CDIとEJBは排他的なものではなく両方使っていいということを念押しされていました。なるほど。
おさらいとして、CDIのスコープのお話(POJOのスコープ定義されすれば@Injectで好きな箇所でインジェクションできるよ、CDIは層をつなぐもの)、続いて、書籍では触れなかった3つの話
について紹介がありました。
CDIコンテナは、Weldそのものですが、実行環境(アプリケーションサーバー)によってバージョンが違うことがあるので、バージョンを押さえておきましょう。そして、コンテナへのアクセスAPIの紹介(CDIクラス、CDIProviderクラス、BeanManagerクラス)がありました。
最後は猪瀬さんのjBatchの話です。
http://www.slideshare.net/inose660/20160215-04-java-ee7-jbatch
Java EEでのバッチ処理の標準化を行ったもので、Spring Batchを元にしています。
ジョブとステップという2つの概念を丁寧に解説しています。
ジョブはXMLで記述し、処理の順序制御をして、ステップはJavaコードで実装します。
書籍にはない話として、ステップの並列実行、ここがヘンだよjBatch(ジェネリクス使えない、終了ステータス・バッチステータスで名がかぶる、flow/split単位でpropertyを指定できない、GlassFishでは動かない機能あり)の紹介がありました。