Buscar un cambio de comportamiento de la fusión de destino de inyección de referencia de recurso

En la especificación Servlet 3.0, los elementos elementos <injection-target> de una referencia de recurso que se define en un archivo web-fragment.xml</span se añaden al archivo web.xml principal sólo si la definición de referencia de recurso web.xml con el mismo nombre no tiene ningún <injection-target nombre no tiene elementos <injection-target>. La especificación Servlet 3.1 aclara que para un recurso del mismo nombre, todos los elementos elementos <injection-target> de los descriptores web-fragment.xml se añaden a los descriptores padres <span.xml los descriptores web.xml principales de elementos <injection-target>. La función Servlet 3.1 función podría cambiar el comportamiento de la aplicación existente mediante la activación de la inyección que antes estaban excluidos del archivo web.xml.

Esta regla marca el elemento <injection-target> en el archivo web-fragment.xml si el archivo web.xml contiene un elemento <injection-target> dentro de un elemento <resource-ref> que está definido con el mismo nombre que el elemento <resource-ref> del archivo web-fragment.xml.

Los ejemplos siguientes muestran el cambio de comportamiento cuando se utiliza una combinación de un archivo web.xml y un archivo web-fragment.xml:

web.xml:

< span class= "XmlElement"> < ref-recurso> < /span>
	< span class= "XmlElement"> < res-ref-name> < /span>ReferenceName< span class="XmlElement"> < /res-ref-name> < /span>
	< span class= "XmlElement"> < res-type> < /span>javax.sql.DataSource< span class="XmlElement"> < /res-type> < /span>
	< span class= "XmlElement"> < res-auth> < /span> Contenedor < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Compartible < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /clase-destino-inyección> < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /nombre-destino-inyección> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

web-fragment.xml:

< span class= "XmlElement"> < ref-recurso> < /span>
	< span class= "XmlElement"> < res-ref-name> < /span>ReferenceName< span class="XmlElement"> < /res-ref-name> < /span>
	< span class= "XmlElement"> < res-type> < /span>javax.sql.DataSource< span class="XmlElement"> < /res-type> < /span>
	< span class= "XmlElement"> < res-auth> < /span> Contenedor < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Compartible < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class2 < /clase-destino-inyección> < /span>
		< span class= "XmlElement"><injection-target-name>Resource2 < /nombre-destino-inyección> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

En Servlet 3.0 el resultado combinado ignora el destino de inyección para Class2:

< span class= "XmlElement"> < ref-recurso> < /span>
	< span class= "XmlElement"> < res-ref-name> < /span>ReferenceName< span class="XmlElement"> < /res-ref-name> < /span>
	< span class= "XmlElement"> < res-type> < /span>javax.sql.DataSource< span class="XmlElement"> < /res-type> < /span>
	< span class= "XmlElement"> < res-auth> < /span> Contenedor < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Compartible < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /clase-destino-inyección> < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /nombre-destino-inyección> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

En Servlet 3.1, el resultado combinado utiliza el destino de inyección para Class2:

<resource-ref>
	<res-ref-name>ReferenceName</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
	<res-sharing-scope>Shareable</res-sharing-scope>
	<injection-target>
		<injection-target-class>Class1</injection-target-class>
		<injection-target-name>Resource1</injection-target-name>
	</injection-target>
	<injection-target>
		<injection-target-class>Class2</injection-target-class>
		<injection-target-name>Resource2</injection-target-name>
	</injection-target>
</resource-ref>

Para obtener más información sobre los cambios de comportamiento de Servlet 3.1, consulte el recurso siguiente: Cambios de comportamiento de Servlet 3.1.