CDI reconoce los archivos bean implícitos

La especificación CDI (Contexts and Dependency Injection) 1.1 introdujo la modalidad de descubrimiento de beans implícitos, lo que da lugar a cambios de comportamiento y rendimiento de la implementación de Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 en WebSphere Application Server. Un bean implícito es cualquier archivo que contiene una o más clases de bean con una anotación que define a un bean o uno o varios beans de sesión.

Al mover de Java EE 6 CDI 1.0 a Java EE 7 CDI 1.1 o posterior, el descubrimiento de beans implícitos da como resultados la exploración por parte del tiempo de ejecución de todos los archivos WAR y JAR, incluso si no tienen un archivo beans.xml. Esta exploración es un cambio de comportamiento con respecto a Java EE 6 CDI 1.0, donde la falta de un archivo beans.xml impedía la exploración de archivos en la aplicación.

Esta regla marca las siguientes anotaciones que definen beans y los beans de sesión EJB (Enterprise JavaBeans) (EJB) en todos los archivos WAR y JAR que no tienen un archivo beans.xml.

El escáner de aplicaciones binarias marca las clases anotadas con @NormalScope. Estas anotaciones pueden detectarse aunque aparezcan fuera del contexto de la beans.xml que las utilizan explícita o implícitamente.

Para inhabilitar este cambio de comportamiento de CDI durante el tiempo de ejecución a nivel de WAR o JAR, añada un archivo beans.xml con modalidad de descubrimiento de bean establecida en none, tal como se muestra en el ejemplo siguiente.


<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>

En Liberty, también puede inhabilitar este comportamiento añadiendo la siguiente propiedad en el archivo server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Para obtener más información sobre la implementación de Java EE 7 CDI 1.2, consulte Cambios de comportamiento de Contexts and Dependency Injection 1.2.