Contexts and Dependency Injection (CDI)
JBoss Weld に基づいた JSR 346 実装である、Java™ EE プラットフォームの Contexts and Dependency Injection 1.2 (CDI 1.2) について説明します。
CDI は、モジュール内の beans.xml ファイルの存在によって、または JSR 346 仕様に定義されている Bean 定義アノテーションによってアプリケーション内でアクティブ化されます。. beans.xml ファイルは、Web アーカイブ (WAR) の WEB-INF ディレクトリーまたはその他のタイプのアーカイブの META-INF ディレクトリーにあります。コンテナーがアクティブ化されると、以下のようなサービスを提供します
- コンテキスト管理
- タイプ・セーフな依存関係注入: 必要に応じて CDI 管理対象 Bean がインスタンス化され、注入されます。
- 装飾機能。これは、1 つ以上の Bean インターフェースを実装し、また、ビジネス・ロジックを含むことができます。 装飾機能は、デフォルトでは無効になっています。Bean ごとに複数の装飾機能を用意して、beans.xml ファイルでその順序を定義することができます。装飾機能を使用可能にするには、beans.xml または @Priority を使用します。
- インターセプター・バインディング: インターセプター (beans.xml ファイル内で手動で有効にするか、@Priority を使用してグローバルに有効にする) は、インターセプター・バインディング・タイプを使用してバインドされます。
- イベント・モデル
- 式言語 (EL) を使用した JavaServer Faces (JSF) ファイルおよび JavaServer Pages (JSP) ファイルへの組み込み
- 注入と、インターセプターの使用をサポートする JavaEE コンポーネント・クラス
JSR 299 および JSR 330 用の仕様関連 API クラス、および Apache OpenWebBeans に基づく IBM® 修正実装クラスは、アプリケーション・サーバー・ランタイム環境とともにパッケージ化されます。
製品の CDI 実装は Apache OpenWebBean に基づいていますが、サーバー・ランタイムとの統合をサポートするために、以下の変更および追加が行われています。
- WebSphere® Application Server traditional 内の、注入可能コンポーネントをサポートする他の Java Platform, Enterprise Edition (Java EE) コンテナーとの統合。
- WebSphere Application Server traditional バイトコード・スキャナーを使用する ScannerService 実装。
- EJB タイプを判別するための、製品の Enterprise JavaBeans (EJB) メタデータの直接使用。
- CDI アプリケーション用のサーブレット・リスナー、フィルター、インターセプターの自動登録。これにより、各アプリケーションでこれらを追加する必要がなくなりました。
- ResourceInjectionService、TransactionService、およびフェイルオーバー・サービスなどの多くの OpenWebBeans サービス・プログラミング・インターフェース (SPI) の、製品固有の実装。
重要: コンテナー管理トランザクションおよびセキュリティーは、CDI によって提供されません。
