Ricerca di una modifica al comportamento relativo all'unione della destinazione dell'inserimento del riferimento alla risorsa

Nella specifica Servlet 3.0, gli elementi <injection-target> di una risorsa di riferimento definita in un file web-fragment.xml vengono aggiunti al file web.xml parent solo se la definizione del riferimento della risorsa web.xml con lo stesso nome non ha elementi <injection-target>. La specifica Servlet 3.1 chiarisce che per un riferimento della risorsa con lo stesso nome, tutti gli elementi <injection-target> in web-fragment.xml vengono aggiunti all'elenco di descrittori web.xml parent degli elementi <injection-target>. La funzione Servlet 3.1 può modificare il comportamento dell'applicazione esistente attivando le destinazioni di inserimento precedentemente escluse dal file web.xml.

Questa regola contrassegna l'elemento <injection-target> nel file web-fragment.xml se il file web.xml contiene un elemento <injection-target> all'interno di un elemento <resource-ref> definito con lo stesso nome dell'elemento <resource-ref> nel file web-fragment.xml.

I seguenti esempi dimostrano la modifica al comportamento quando si utilizza una combinazione del file web.xml e del file web-fragment.xml:

web.xml:

<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>
</resource-ref>

web-fragment.xml:

<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>Class2</injection-target-class>
		<injection-target-name>Resource2</injection-target-name>
	</injection-target>
</resource-ref>

In Servlet 3.0 il risultato combinato ignora la destinazione di inserimento per 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>
</resource-ref>

In Servlet 3.1 il risultato combinato utilizza la destinazione di inserimento per 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>

Per ulteriori informazioni sulle modifiche al comportamento di Servlet 3.1, consultare la seguente risorsa: Servlet 3.1 behavior changes.