Cambios en el comportamiento de Contexts and Dependency Injection (CDI) entre releases

La implementación de Contexts and Dependency Injection (CDI) 1.2 contiene algunos cambios de comportamiento que podrían hacer que una aplicación migrada desde CDI 1.0 se comporte de forma distinta 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 va a verse afectada negativamente por cambios de comportamiento en la característica CDI 1.2, utilizando la característica CDI 1.0 se conserva 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 introducidos se deben a las diferencias entre las dos implementaciones.

Migración de CDI 1.0 a CDI 1.2

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 a nivel de 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
En una implementación CDI 1.2, el ejemplo siguiente muestra un esquema referenciado en el archivo beans.xml:
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"
Si utiliza un esquema no válido, el servidor da un error de excepción. Puede desactivar la validación del archivo beans.xml estableciendo la propiedad org.jboss.weld.xml.disableValidating=true jvm de 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 distintos de archivados de beans: explícito e implícito.

Un archivado de beans explícito es un archivo que contiene un archivo beans.xml:
  • 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 archivado de beans implícito es cualquier otro archivado que contiene una o varias clases de bean 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.

Cuando se actualiza el esquema a una implementación CDI 1.2 para que el archivado de beans se mantenga explícito hay que establecer el modo de descubrimiento de beans a all (todos):
<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">
Nota: Un archivo de archivado de beans implícito solo descubre los beans que tienen una anotación de definición de bean.
Este tipo de archivado de beans puede resultar en un archivado que no esté pensado para ser un archivado de beans de CDI, pero en la implementación de CDI 1.2 se convierte en un archivado de beans implícito. Para impedir este comportamiento, puede añadir un archivo beans.xml con el valor de bean-discovery-mode establecido en none, con lo que se impide que el archivo de archivado sea un archivo de archivado de beans. Una solución alternativa consiste en añadir la propiedad enableImplicitBeanArchives al archivo server.xml del servidor: Liberty
<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.

El establecimiento de esta propiedad en false proporciona un rendimiento mejorado en tiempo de inicio.


Icono que indica el tipo de tema Tema de concepto

Nombre de archivo: cwlp_cdi_behavior.html