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.

Mientras que CDI 1.0 está basado en la implementación de CDI para Apache OpenWebBeans, CDI 1.2 está basado en la implementación de Weld. Estos cambios de comportamiento reflejan las diferencias en 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, el CID es exclusivo para cada sesión HTTP. Este comportamiento está en consonancia con la especificación CDI y es implementado por el Weld. Para obtener un CID exclusivo globalmente, el CID se debe especificar al inicio de la conversación invocando Conversation.begin.

Referencia a esquemas en el archivo beans.xml

El ejemplo siguiente de un esquema aparece 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 emite un error de excepción. Especifique org.jboss.weld.xml.disableValidating=true para desactivar la validación del archivo beans.xml e impedir 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 de CDI 1.2 define dos tipos diferentes de archivos de archivado de beans: explícitos e implícitos.

Un archivo de archivado de beans explícito contiene un archivo beans.xml con cualquiera de las siguientes características:
  • Un número de versión 1.1 (o posterior), con la modalidad de descubrimiento de beans establecida en all
  • Ningún número de versión
  • Un archivo vacío

Un archivo de archivado de beans 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 actualiza el esquema a una implementación de CDI 1.2, para que el archivo de archivado de beans se mantenga como explícito, la modalidad de descubrimiento de beans se debe establecer 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"
</beans>
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 ser un archivo de archivado de beans CDI, pero pasa a ser un archivo de archivado de beans implícito en la implementación de CDI 1.2. Para impedir este comportamiento, puede añadir un archivo beans.xml con la modalidad de descubrimiento de beans establecida en none para impedir que el archivo de archivado sea un archivo de archivado de beans. Como solución alternativa, establezca la propiedad del sistema, com.ibm.ws.cdi.enableImplicitBeanArchives en false. Establecer esta propiedad en false impide que los archivos de archivado sin archivos beans.xml pasen a ser archivos de archivado de beans implícitos y reduce el tiempo de arranque. Para conocer cómo establecer esta propiedad del sistema, consulte Valores de máquina virtual Java.

Interceptores de ciclo de vida

Si el enlace de interceptor siguiente está declarado en interceptores de ciclo de vida, ElementType.TYPE es el único destino permitido:
@InterceptorBinding
@Retention( RetentionPolicy.RUNTIME )
@Target( {ElementType.TYPE, ElementType.METHOD} )
public @interface SFCDIInterceptorBinding {} 
 

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_cdi_behavior
File name: cweb_cdi_behavior.html