JJUGナイトセミナー(11/27)レポート その1
とてつもなく内容が濃ゆい2時間でした。
もう大満足。
レポートは2回に分けてまとめていこうと思います。
CDIを始めよう
CDIとは、コンテキスト(スコープ)を持った、依存性注入(DI)のこと。
Java EEでDIコンテナを使えるようになる。
おさらい
Web3層アーキテクチャを構成する、UI・サービス・DBの各層をどうつなぐか。
newをしてインスタンスを生成する関係でつなぐと、各層で依存性が発生してしまいユニットテストが困難になる。
interfaceを使いたいが、単純に使っただけだとやっぱり実装クラスのnewを誰がするかという問題が残る。
そこでDIコンテナを使い、コンテナがインスタンスを生成することで問題を解決できる。
CDIはJava EE5まではEJBしかできなかったDIを、一般のクラスにも拡張することができる仕組みである。
使うための条件
コンテナが管理するサーブレットやフィルター、EJBなどが対象。
管理対象外のクラスに対して@Injectをつけても無駄。
例外というわけではないが、CDIでインジェクションされたインスタンスには挿入してくれる。
なので、 JAX-RS→CDI →JPAというチェーンをすることは可能。
EJBとの違い
CDIはEJBの特権とも言える、宣言型のトランザクションもできるようになった。
EJBにない、EL式との連携や細かいスコープ(SLSB、SFSB)制御もできる。
じゃあEJBっていらないの!?
逆に、EJBができてCDIができないことは非同期実行、MQ連携、リモート実行、タイマー機能が挙げられる。
これらの機能はWeb構築では使わないが、基幹系では必要になる。
WebアプリケーションならCDI。
基幹系で大規模なシステムならEJB。
そんな使い分けができると思う。
ただ、分散オブジェクトはいらないと思うけど。
とりあえず、今日はここまでで・・・。