
![[8.5.5.6 o posterior]](../ng_v8556.gif)
Cambios en el comportamiento de Contexts and Dependency Injection 1.2
La implementación de CDI (Contexts and Dependency Injection) 1.2 contiene cambios de comportamiento que pueden provocar que una aplicación que se ha migrado desde CDI 1.0 se comporte de forma diferente o falle en CDI 1.2.
Puede elegir entre las implementaciones de las características CDI 1.0 y CDI 1.2 para cada instancia de servidor, teniendo en cuenta los cambios de comportamiento. Si el comportamiento necesario sólo se encuentra en la característica CDI 1.2, debe utilizar la característica CDI 1.2. Si una aplicación existente puede resultar afectada negativamente debido a los cambios de comportamiento de la característica CDI 1.2, el uso de la característica CDI 1.0 conservará el comportamiento existente para dicha aplicación. No es posible utilizar las características, CDI 1.0 y CDI 1.2, ya que estas características no son compatibles. Si configura ambas características, el servidor genera un error.
La característica CDI 1.0 está basada en la implementación OpenWebBeans de Apache de CDI. La característica CDI 1.2 está basada en la implementación Weld de CDI. Los cambios de comportamiento se han introducido debido a las diferencias entre las dos implementaciones.
Utilización de la anotación @Named en beans
El nombre predeterminado asignado a las clases con la anotación @Named es el nombre de clase sin calificadores, y la primera letra se modifica de mayúsculas a minúsculas. Por ejemplo, el valor predeterminado de TestBean es testBean. En la implementación de CDI 1.0, este comportamiento se aplica a todos los nombres de clases. La implementación Weld sigue la especificación de JavaBeans que tiene un comportamiento diferente para los nombres de clases con varias letras mayúsculas al principio. En este caso, no se elimina ninguna letra en mayúsculas del nombre asignado al bean. Por ejemplo, se invoca JSFTest desde JSP (JavaServer Pages) utilizando JSFTest.
El CID de ID de conversación
En la implementación de CDI 1.0, el CID es exclusivo de forma global. En CDI 1.2 es exclusivo por sesión Http. Este comportamiento está en consonancia con la especificación CDI y es un convenio elegido por Weld. Para obtener un CID exclusivo globalmente, el CID debe especificarse al inicio de la conversación invocando Conversation.begin.
Referencia a esquemas en el archivo beans.xml
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"
Si se utiliza un esquema no válido, se genera un error de excepción en el servidor.
Puede desactivar la validación del archivo beans.xml estableciendo la propiedad org.jboss.weld.xml.disableValidating=true jvm que también impide que se genere el error.
Si el archivo beans.xml especifica decoradores o interceptores, se debe utilizar un esquema válido, de lo contrario, no se crean correctamente instancias de los decoradores e interceptores.Archivos de archivado de beans implícitos
La implementación CDI 1.2 define dos tipos de archivos de archivados de beans: explícito e implícito.
- con un número de versión 1.1 (o posterior) y con el valor de bean-discovery-mode establecido en all
- sin ningún número de versión
- es un archivo vacío
Un archivo de archivado de bean implícito es cualquier otro archivo de archivado que contiene una o varias clases de beans con una anotación de definición de bean, tal como se ha definido en la especificación de la sección 2.5.1 “Anotaciones de definición de beans", o uno o varios beans de sesión. Consulte la especificación Contexts and Dependency Injection para la plataforma Java™ EE. .
<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="all"
version="1.1">
<cdi12 enableImplicitBeanArchives="false"/>
Si se establece esta propiedad en false se impide que los archivos de archivado que no tengan archivos beans.xml se conviertan en archivos de archivado de beans implícitos.