コンテキストおよび依存関係インジェクション (CDI) (Contexts and Dependency Injection (CDI))

Java™ EE プラットフォーム (CDI) の Contexts and Dependency Injection は、Apache OpenWebBeans に基づく JSR 299 実装です。

CDI は、JSR 299 仕様で規定されているように、モジュール内に beans.xml ファイルがあると、そのアプリケーションでアクティブ化されます。 beans.xml ファイルは、Web アーカイブ (WAR) の WEB-INF ディレクトリーまたはその他のタイプのアーカイブの META-INF ディレクトリーにあります。 コンテナーがアクティブ化されると、以下のようなサービスを提供します
  • コンテキスト管理
  • タイプ・セーフな依存関係注入: 必要に応じて CDI 管理対象 Bean がインスタンス化され、注入されます。
  • 装飾機能。これは、1 つ以上の Bean インターフェースを実装し、また、ビジネス・ロジックを含むことができます。 装飾機能は、デフォルトでは無効になっています。 Bean ごとに複数の装飾機能を用意して、beans.xml ファイルでその順序を定義することができます。
  • インターセプター・バインディング。 インターセプターは、beans.xml ファイル内で手動で有効にすることができ、インターセプター・バインディング・タイプを使用してバインドされます。
  • イベント・モデル
  • 式言語 (EL) を使用した JavaServer Faces (JSF) ファイルおよび JavaServer Pages (JSP) ファイルへの組み込み

JSR 299 および JSR 330 の仕様関連 API クラス、および Apache OpenWebBeans に基づく IBM® 変更済み実装クラスは、アプリケーション・サーバー・ランタイム環境にパッケージされています。

WebSphere® Application Server CDI 実装は Apache OpenWebBeans に基づいていますが、サーバー・ランタイムとの統合をサポートするために、OpenWebBeans にいくつかの変更および追加が行われています。
  • 注入可能コンポーネントをサポートする、 WebSphere Application Server 内の他の Java Platform, Enterprise Edition (Java EE) コンテナーとの統合。
  • WebSphere Application Server バイトコード・スキャナーを使用する ScannerService 実装。
  • EJB タイプを判別するための WebSphere Application Server Enterprise JavaBeans (EJB) メタデータの直接使用。
  • CDI アプリケーション用のサーブレット・リスナー、フィルター、インターセプターの自動登録 (したがって、これらを各アプリケーションによって追加してはならないようになりました)。
  • WebSphere Application Server固有の多数の OpenWebBeans サービス・プログラミング・インターフェース (SPI) の実装 (ResourceInjectionService、TransactionService、フェイルオーバー・サービスなど)。
重要: コンテナー管理トランザクションおよびセキュリティーは、CDI では提供されません。
トラブルの回避: CDI は、デフォルトの WebSphere Application Server クラス・ローダー・ポリシー Class loader for each WAR file in applicationでのみサポートされ、代替の single class loader for application settingではサポートされません。