CDI は暗黙的 Bean アーカイブを認識する

Contexts and Dependency Injection (CDI) 1.1 仕様では、暗黙的 Bean ディスカバリー・モードが導入されました。そのため、WebSphere Application Server での Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 実装とは動作とパフォーマンスが変更されています。暗黙的 Bean とは、Bean 定義アノテーションまたは 1 つ以上のセッション Bean のいずれかを持つ 1 つ以上の Bean クラスが含まれているアーカイブです。

Java EE 6 CDI 1.0 から Java EE 7 CDI 1.1 以降に移行する際には、beans.xml ファイルがない場合でも、暗黙的 Bean ディスカバリーのため、すべての WAR および JAR ファイルがランタイムによってスキャンされます。このスキャンは、Java EE 6 CDI 1.0 からの振る舞いの変更です。Java EE 6 CDI 1.0 では、beans.xml ファイルが欠落している場合、アプリケーションでアーカイブはスキャンされません。

この規則により、beans.xml ファイルがないすべての WAR および JAR ファイル内の以下の Bean 定義アノテーションおよび Enterprise JavaBeans (EJB) セッション Bean にフラグを立てます。

でアノテートされたクラスにフラグを付けます。 @NormalScope. これらの注釈は、たとえそれが以下の文脈から外れていても検出される。 の文脈から外れていても検出されることがある。 beans.xml ファイルのコンテキストの外側に現れても、検出されることがある。

WAR または JAR レベルでの実行時にこの CDI の振る舞いの変更を無効にするには、以下の例に示すように、Bean ディスカバリー・モードを none に設定した beans.xml ファイルを追加します。


<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
		  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
		  		      http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
		  		      bean-discovery-mode="none" version="1.1">
</beans>

Liberty では、以下のプロパティーを server.xml ファイルに追加することでもこの動作を無効にできます。


<cdi12 enableImplicitBeanArchives="false"/>

Java EE 7 CDI 1.2 実装について詳しくは、 Contexts and Dependency Injection 1.2 での振る舞いの変更を参照してください。