コンテキストおよび依存関係インジェクション (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ではサポートされません。