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