9.4 CDIを利用する場合の注意事項
CDIを利用する場合の注意事項を次に示します。
-
CDIの拡張インタフェース(Portable Extension API)
アプリケーションサーバではCDIの拡張インタフェース(Portable Extension API)は使用できません。
-
アプリケーションサーバでCDIを利用する場合の注意事項(標準仕様との違い)
-
Servlet3.0の機能とCDIを組み合わせて利用した場合の,アプリケーションサーバでのサポート範囲について説明します。
CDIアノテーションは,web.xmlで定義したServlet,Listener,Filter,およびアノテーションで定義したServlet,Listener,Filterで利用できます。
サーブレットリスナのjavax.servlet.ServletContextListenerのcontextInitializedメソッドで,javax.servlet.ServletContextの次に示すメソッドを利用して動的に定義したServletおよびFilterでだけ,CDIのアノテーションを利用できます。
・addFilter(java.lang.String filterName, java.lang.Class<? extends Filter> filterClass)
・addFilter(java.lang.String filterName, java.lang.String className)
・addServlet(java.lang.String servletName, java.lang.Class<? extends Servlet> servletClass)
・addServlet(java.lang.String servletName, java.lang.String className)
これら以外のAPIを使って動的に定義したServlet,Filter,およびListenerでのCDIのアノテーションの利用はサポートしていません。
-
JavaVMのクラスパスで指定したMETA-INFディレクトリ内にbeans.xmlを配置している場合,JavaVMのクラスパス内のクラスはCDIの管理対象にはなりません。
-
リソースアダプタ(RAR)のMETA-INFディレクトリにbeans.xmlを配置している場合,beans.xmlは読み込まれず,リソースアダプタはCDIのモジュールとは認識されません。
-
WARのWEB-INF/lib内に配置したJAR内のMETA-INFディレクトリにbeans.xmlを配置している場合,beans.xmlは読み込まれず,JARファイルはCDIのモジュールとは認識されません。なお,WEB-INF/lib以下に格納されたJARファイル内にある,META-INF/resourcesに含まれるJSPに対しては,ManagedBeanを注入できます。
-
CDIのManagedBeanでは,@PersistenceContextおよび@PersistenceUnitの利用はサポートしていません。
@EJBおよび@Resourceの利用は,フィールドに指定した場合だけサポートしています。次についてはサポートしていません。
・setterメソッドに指定したDependency Injection
・クラスに指定(@EJBs, @Resourcesでの複数指定を含む)した参照の宣言
-
@Dependentスコープのオブジェクトで,@Producesアノテーション,および@Disposesアノテーションが付与されている場合,同じクラスの中でプロデューサーメソッドを参照することはできません。もし,このようなアプリケーションを作成した場合,再帰的に注入が行われ,StackOverflowExceptionが発生する場合があります。
-
@Producesアノテーション,または@Disposesアノテーションを付与したBeanでは,@PostConstructアノテーションもしくは@PreDestroyアノテーションを利用できません。
-
-
CDIを使用時のセッション情報引き継ぎ機能に関する注意事項
CDIが有効なアプリケーションに対して,アプリケーションのリロード機能と,各種セッションフェイルオーバ機能は使用できません。リロード機能とセッションフェイルオーバ機能を使用するJ2EEサーバでは,「9.3.1 CDIの対象となるアプリケーション」に記載のプロパティejbserver.javaee.cdi.beansXmlRequiredにtrueを指定してください。また,beans.xmlファイルを含んだアプリケーションをリロードやセッションフェイルオーバの対象にしないでください。
-
アプリケーション開始性能についての注意事項
CDIアプリケーションに含まれるbeans.xmlのJARファイルの数が増えると,そのJARファイルの増分と比較してデプロイ時間が極端に増加します。
-
Managed Beanを利用した場合の注意事項
-
javax.enterprise.context SessionScopedアノテーションを指定されたManaged Beanのインスタンスは,明示管理ヒープには格納されません。
-
beans.xmlをWEB-INF/classes/META-INF/beans.xmlに配置しても無視されます。
-
@PostConstructのコールバック完了後にリクエストコンテキストは破棄されません(CDI 1.0と同様の動作となります)。
-
Serializableを実装したStateless/Singleton Session BeanだけがPassivation可能です。
-
CDI Conversation Filterという名称のサーブレットフィルタは使用できません。
-