Rechercher un changement de comportement avec une fusion de cible d'injection de référence de ressource

Dans la spécification Servlet 3.0, les éléments <injection-target> d'une référence de ressource définie dans un fichier web-fragment.xml sont ajoutés au fichier web.xml parent uniquement si la définition de la référence de ressource web.xml de même nom n'a pas de <injection-target> même nom n'a pas d'éléments <injection-target>. La spécification Servlet 3.1 précise que pour une ressource du même nom, tous les éléments éléments <injection-target> dans les descripteurs web-fragment.xml sont ajoutés aux descripteurs <span.xml parents au descripteur parent web.xml des éléments <injection-target>. La fonction Servlet 3.1 peut modifier le comportement d'une application existante en activant des cibles d'injection qui étaient auparavant exclues du fichier <span.xml qui étaient auparavant exclues du fichier web.xml.

Cette règle signale l'élément <injection-target> dans le fichier web-fragment.xml si le fichier web.xml contient un élément <injection-target> à l'intérieur d'un élément <resource-ref> défini à l'aide de l'élément le même nom que l'élément <resource-ref> dans le fichier web-fragment.xml.

Les exemples ci-dessous démontrent le changement de comportement lorsque vous utilisez une combinaison d'un fichier web.xml et d'un fichier web-fragment.xml :

web.xml:

< span class= "XmlElement"> < resource-ref> < /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> Container < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Shareable < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /injection-target-class> < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /injection-target-name> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

web-fragment.xml:

< span class= "XmlElement"> < resource-ref> < /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> Container < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Shareable < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class2 < /injection-target-class> < /span>
		< span class= "XmlElement"><injection-target-name>Resource2 < /injection-target-name> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

Dans Servlet 3.0, le résultat combiné ignore la cible d'injection pour Class2 :

< span class= "XmlElement"> < resource-ref> < /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> Container < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Shareable < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /injection-target-class> < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /injection-target-name> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

Dans Servlet 3.1, le résultat combiné utilise la cible d'injection pour 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>

Pour plus d'informations sur les changements de comportement dans Servlet 3.1, consultez la ressource suivante : Changements de comportement dans Servlet 3.1.