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

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

En la implementación CDI 1.2, el siguiente es un ejemplo de un esquema al que se hace referencia 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 de archivos de archivados de beans: explícito e implícito.

Un archivo de archivado de bean 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 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. .

Cuando se actualiza el esquema a una implementación CDI 1.2, para que el archivo de archivado de beans se mantenga como explícito se debe establecer la modalidad de descubrimiento de bean en all:
<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 nuevo tipo de archivo de archivado de beans puede dar como resultado un archivo de archivado que no está pensado para que sea un archivo de archivado de beans de CDI pero en la implementación de CDI 1.2 se convierte en un archivo de 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 es añadir la propiedad siguiente al archivo server.xml de su servidor de 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



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=cwlp_cdi_behavior
Nombre de archivo:cwlp_cdi_behavior.html