[Books] Java EE 7 徹底入門 (ja)

少し前に購入した Java EE 7 の解説本です。Java EE 7 のすべてを網羅しているわけではありませんが、サンプルアプリケーションを軸に、それを実装するために必要な各種技術を解説するような形を採っています。

特に表記はありませんが、事実上の日本オラクル公式解説本であり、資料的価値の高いものに仕上がっていました。

1. 圧巻の JSF 解説

本書では JSF の解説に何と 3 章も割いています。JSF 担当の加藤田さんはコミュニティ時代(日本オラクル入社前)から日本における JSF の第一人者であり、そのノウハウが 3 つの章に注ぎ込まれています。入門から実務まで、これだけで本当に事足りてしまうのではないかと思うくらいの充実した内容です。加藤田さんの JSF 解説を読むためだけに本書を購入しても良いくらいかもしれません(ちょっと大げさ?)

2. JBatch の書籍化

登場以降、勉強会やカンファレンスで紹介のプレゼンが行われてきた JBatch ですが、遂に待望の書籍となりました。JBatch 自体、まだ仕様がこなれていないところもあり、本書における扱いも 1 章に留まっていますが、サンプルを含む貴重な情報源として使えるのではないかと思います。

3. 一応、網羅はされている(どこかで)

本書で扱っている技術に関しては、粒度の差はあれど一応、基本的なところは網羅されているようです。例えば、本書ではあまり触れていない JMS についても、EJB に絡めて少しだけ解説があります。惜しむべくは、クロスリファレンスが多いこと。私は Kindle 版のため追従できましたが、紙媒体ではたぶん追い切れないと思います。

4. 本書の残念なところ 1 : JAX-RS

JAX-RS の入門で BASIC 認証を絡めるのは、個人的には回避した方がいいと考えています。BASIC 認証フィルタと Common Annotations(@Roles、@Allow、@Deny)を組み合わせて宣言的にやるのであればまだ言い方ですが、SecurityContext から Principal 参照して云々、というやり方をするとソースコードの可読性が驚くほど落ちます。しかもダーティーな部分は本文では触れられていなくて、そこはサンプルを参照することになっていると。サンプルアプリケーションの都合で JAX-RS で実装する部分にも認証を入れなければならなかったのは理解できますが、サンプルアプリケーションの仕様を工夫するなど、もう少し良い方法が取れなかったのかと残念に思います。

JAX-RS のリクエスト・レスポンス処理の流れが不明確になっている点も惜しむべきところです。特に本書は Servlet を扱っていないため、フィルターの解説などでなおさら必要になる事項であるにも関わらず、です。小手先の知識だけで何となく Web サービス(極論するとあらゆる Web アプリケーションまで)が構築できてしまうところに JAX-RS の怖さがあります。

あと、これは個人的な趣味の問題ですが、私は @BeanParam はあまり好きではありません。@BeanParam 自体、RESTEasy の独自機能から JAX-RS 2.0 に取り込まれた機能であり、JAX-RS 1.0 以前から Jersey に慣れ親しんでいる私には合わないだけなのかもしれません。

5. 本書の残念なところ 2 : CDI と EJB の関連

CDI と EJB の関連が全くと言っていいほど出てきていませんでした。Java EE 6 以降を経験している人達の間では、ステートレス Bean の中でも @Inject を使えるのは比較的知られている方だと思います。CDI は EJB、JSF、JPA などの仕様を横断的に結んでいること、また CDI 自体もコンテナ管理されていることなど、CDI に関する記述の不足は否めません。CDI の「C」の部分であるスコープの話も JSF 解説へのリファレンスとするだけでなく、もう少し丁寧な解説が欲しかったと思います。インターセプターやデコレーターなどの解説は十分にあるのですが、これらは CDI の重要な機能であっても本質ではないので、そこのところを組んだ解説が欲しかったところです。

6. 本書の残念なところ 3 : JPA

JPA はそれほど詳しくないので多くは触れませんが、エンティティのライフサイクルに全く触れないのはまずいかと思います。JSF もそうですが、ライフサイクルを知らないと後々絶対にはまると思います。

7. 本書の残念なところ 4 : WebSocket の扱いがない

WebSocket は多くのチュートリアルで盛り込まれているトピックですが、本書では全くといっていいほど扱いがありません。おそらくはサンプルアプリケーションの都合と思われますが、JAX-RS の解説の煩雑さと言い、サンプルアプリケーションの仕様に足を引っ張られている感は否めません。

まとめ

1 つのサンプルアプリケーションを通じて Java EE 全体を学んでいくというスタイルは「Beginning Java EE 6」にヒントを得たものだと思います。方向性は悪くなかったと思うのですが、良いところと悪いところがはっきりと分かれてしまう解説書だったというのが正直な感想です。おそらく、サンプルアプリケーションの仕様が良くなかったのではないでしょうか(聞いた話では、本書のサンプルアプリケーションは GlassFish 4.1 では実行できず、Payara 4.1 ではなぜか動作したとのことです)。でも、JSF の解説目当てに本書を購入するのは「あり」だと思います。

最後に一言:脊髄反射的に ZonedDateTime を使うのはやめて!