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では,@EJB,@Resource,@PersistenceContext,および@PersistenceUnitの利用はサポートしません。
- CDIのアノテーションを用いてSession Bean(ローカルインタフェースの省略されたものも含む)を注入することはできません。
- EJBを注入するためにCDIのアノテーションを使用した場合,KDJE59316-Eのエラーメッセージが出力され,注入に失敗します。
- EL式を使用して,@Namedを付与したEJBをJSFやJSPへ注入することはできません。@Namedを付与したEJBを参照するために,EL式を使用していた場合,KDJE59316-Eのエラーメッセージが出力され,注入に失敗します。
- @Dependentスコープのオブジェクトで,@Producesアノテーション,および@Disposesアノテーションが付与されている場合,同じクラスの中でプロデューサーメソッドを参照することはできません。もし,このようなアプリケーションを作成した場合,再帰的に注入が行われ,StackOverflowExceptionが発生する場合があります。
- @Producesアノテーション,または@Disposesアノテーションを付与したBeanでは,@PostConstructアノテーションもしくは@PreDestroyアノテーションを利用できません。
- CDIアプリケーションでは,インターセプタを利用することができます。しかし,EJBにおいて,EJBのインターセプタとCDIのインターセプタを同時に利用することはできません。もし利用した場合,CDIのインターセプタは実行されません。
●CDIを使用するアプリケーションでのリロード機能の利用
CDIアプリケーションのリロードは,アプリケーション単位になります。CDIアプリケーションはWARおよびJSP単位でのリロードはできません。また,JSFでFaceletsを使用している場合,リロードはできません。
●アプリケーション開始性能についての注意事項
CDIアプリケーションに含まれるbeans.xmlのJARファイルの数が増えると,そのJARファイルの増分と比較してデプロイ時間が極端に増加します。
●Managed Beanを利用した場合の注意事項
javax.enterprise.context SessionScopedアノテーションを指定されたManaged Beanのインスタンスは,明示管理ヒープには格納されません。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.