せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

JJUGナイトセミナー(11/27)レポート その1

とてつもなく内容が濃ゆい2時間でした。
もう大満足。

レポートは2回に分けてまとめていこうと思います。

CDIを始めよう

CDIとは、コンテキスト(スコープ)を持った、依存性注入(DI)のこと。
Java EEDIコンテナを使えるようになる。

おさらい

Web3層アーキテクチャを構成する、UI・サービス・DBの各層をどうつなぐか。
newをしてインスタンスを生成する関係でつなぐと、各層で依存性が発生してしまいユニットテストが困難になる。
interfaceを使いたいが、単純に使っただけだとやっぱり実装クラスのnewを誰がするかという問題が残る。

そこでDIコンテナを使い、コンテナがインスタンスを生成することで問題を解決できる。
CDIはJava EE5まではEJBしかできなかったDIを、一般のクラスにも拡張することができる仕組みである。

使うための条件

コンテナが管理するサーブレットやフィルター、EJBなどが対象。
管理対象外のクラスに対して@Injectをつけても無駄。
例外というわけではないが、CDIでインジェクションされたインスタンスには挿入してくれる。
なので、 JAX-RSCDIJPAというチェーンをすることは可能。

EJBとの違い

CDIEJBの特権とも言える、宣言型のトランザクションもできるようになった。
EJBにない、EL式との連携や細かいスコープ(SLSB、SFSB)制御もできる。
じゃあEJBっていらないの!?

逆に、EJBができてCDIができないことは非同期実行、MQ連携、リモート実行、タイマー機能が挙げられる。
これらの機能はWeb構築では使わないが、基幹系では必要になる。

WebアプリケーションならCDI
基幹系で大規模なシステムならEJB
そんな使い分けができると思う。

ただ、分散オブジェクトはいらないと思うけど。

とりあえず、今日はここまでで・・・。