Repositorio de Liberty[8.5.5.6 o posterior]

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

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

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 explí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 perfiles 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.

Icono que indica el tipo de tema Tema de concepto

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_cdi_behavior
Nombre de archivo:cwlp_cdi_behavior.html