Skip to content

Instantly share code, notes, and snippets.

@53ningen
Created April 8, 2015 06:31
Show Gist options
  • Save 53ningen/9c7d1f7e7242ed81fcae to your computer and use it in GitHub Desktop.
Save 53ningen/9c7d1f7e7242ed81fcae to your computer and use it in GitHub Desktop.

Java EE7 エッセンシャルレシピ

Java EE7 の機能概要

  • ロジックをきれいに保つことが大切:データアクセス・ビュー層と粗結合に

Managed Bean/ Java Common Annotation

  • SEとEEで提供されているAnnotationは微妙に違う
  • リソース参照・インスタンス生成・破棄ができる
  • リソース参照:@Resourceによるインジェクト
  • ライフサイクル管理:@PostConstructで初期化/破棄 @PreDestory

Interceptor

  • 横断的な関心事の実装
  • アノテーションでbefore/afterの処理をぶち込める
  1. interceptor用のアノテーションを定義@InterceptorBinding
  2. Interceptorの実装コードを書く ic.proceed でオリジナルの呼び出しが出来る
  3. 作成したinterceptorの利用

Bean Validation

実装レイヤーごとにデータのバリデーションが必要

  • 値の検証:アノテーションベースで宣言的にデータ検証ができる

Di

  • @Inject/@Qualifier/@Named(限定的に利用)
  • new -> Factory -> Abstract Factor -> Service Locator -> DI -> CDI
  • 依存性を注入:@Inject
  • new:直接インスタンス生成、@Inject:コンテナがインスタンスを生成
  • 対象の限定:複数の実装から特定の実装を選びたい
  • 複数の実装があるとき@Injectでは解決ができない
  • 限定子 @HogeQualifier を指定する
  1. 新規限定子を定義
  2. 実装クラスを作成
  3. Qulifierの実装クラスを選択

定義する場合はわかりやすいパッケージを切るなど

  • Immutableにしたいとき:コンストラクタでインジェクトし、メンバに束縛する

CDI

  • CDIの有効化:JavaEE 7〜デフォルトで有効
  • CDIアノテーションを付加したもののみDI対象 @NormalScope @Dependant @Interceptor @Decorator
  • CDI Managed Bean とは:コンテキスト情報を持つコンテナ管理のインスタンス
  • コンテナがProxyを作成
  • java.inject.SingletonではなくApplicationScopedを使う:コンテキスト情報が付加されないため
  • ロジックのバージョニング・テスト本番環境での実装きりかえなど:@Alternativeを指定し、配備時にXMLで択一可能
  • プライオリティは大きい数が優先
  • 実行時にDB変更:アノテーションでDBきりかえ
  1. 選択子のENUMを定義
  2. 限定子の作成
  3. @Produce の定義

アノテーションの整理

@Streotyoeで複数のアノテーションをまとめたものができる

イベント処理

  • Observerパターンを適用したイベント通知ができる
  • @InjectでEventをインジェクト → インスタンス.fireで発火(同期処理)
  • EJB/JMSのアノテーションを使って非同期化対応をするべき
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment