50分170ページ
はじめに
もう J2EEは忘れてください。(>_<)
エッセンシャルレシピ
問題
解決
解説
Java EE7の機能概要
ロジックを疎結合とすることが重要
VIEW
DATA ACCESS
サブトピック 5
Managed Bean
JSR-250Common Annotation
アノテーション定義
JSR-316 Managed Bean
EE環境で@ManagedBeanはほぼ直接使用しない
リソースの参照
Database,MQ,JMS...
JNDI ルックアップは望ましくない
@Resource を使う
インスタンスの生成
初期化をコンストラクタでしてはいけない(EE)
コンストラクタ時点ではインジェクトが完了していない
@PostCOnstruct
すべてのインジェクションが完了後に呼ばれる
インタスタンスの破棄
@PreDestroy
Interceptor
横断的な関心ごとの実装
Java EE5 では EJBでしか利用できなかった
Java EE6 CDIでも利用可能だが、XMLを記述する必要があった
Java EE7 XML不要、コンストラクタにも記述可能
ビジネスロジック以外のコードは記述したくない
Interceptor
1.アノテーション定義
@InterceptorBinding
2.Interceptorの実装
@Priorityの記述で、beans.xmlは不要
InvocationContext
Bean Validation
実装レイヤーごとにデータ検証の実装が必要
DI
コンポーネント間を疎結合にする
@Inject
重要
@Qualifier
重要
@Named
JSFで利用が多いが、限定利用した方がよい
@Scope
ほぼ使用しない
@Singleton
ほぼ使用しない
new -> Factory -> AbstractFactory -> Service Locator
面倒くさい
複数の実装から特定の実装を選択したい
限定子
@Qualifiler
1.新規限定子を定義
2.実装クラスを作成
限定氏を作成する場合、名前、もしくはパッケージ名でそれと分かるように
変更できなくしたい
final に対して @Injectできない。
コンストラクタでインジェクトすればよい
たくさんの実装から選びたい
@Named
引数の名前で注入
@Named(value="foo") はNG
JSF(EL式)など特定目的にのみりようすること
名前で解決はよくない
CDI
CDIの有効化
Java EE 7 ではデフォルトで有効
CDIアノテーションを付加したもののみDI対象
@NormalScopeを継承したスコープ
@Dependent
@Interceptor
@Decorator
@Stereotype
CDI Managed Bean とは
Contextual Proxy が作成される
さまざまな情報が付加される
択一する
@Alternative
配備時に切り替え
beans.xml
限定子が優先
実行時にDBを変更したい
@Produce
1.選択肢の列挙
2.限定子の作成
3.@Producesの定義
アノテーションの整理
大量の同一アノテーション指定は苦痛
@Stereotype
アノテーションをまとめて定義できる
イベント処理
Observerパターンを簡単に実装できる
@Inject Event<Foo> fooEvent;
fooEvent.fire();
public void receiveEvent(@Observers Foo fooEvent)
ただし同期のため、遅い可能性
非同期とする場合、@Asyncronas