Verificaţi modificarea de comportament pentru combinarea ţintei la injectare referinţei de resursă

În specificaţia Servlet 3.0, elementele <injection-target> ale unei referinţe resursă care este definită într-un fişier web-fragment.xml sunt adăugate la fişierul părinte web.xml doar dacă definiţia referinţei resursă web.xml cu acelaşi nume nu are elemente <injection-target>. Specificaţia Servlet 3.1 clarifică faptul că pentru o referinţă de resursă cu acelaşi nume, toate elementele <injection-target> din descriptorii web-fragment.xml sunt adăugate la lista descriptorilor părinte web.xml a elementelor <injection-target>. Caracteristica Servlet 3.1 s-ar putea să modifice comportamentul aplicaţiei existente prin activarea ţintelor injectare care erau anterior excluse din fişierul web.xml.

Această regulă semnalează elementul <injection-target> din fişierul web-fragment.xml dacă fişierul web.xml conţine un element <injection-target> cu un element <resource-ref> care este definit cu acelaşi nume ca elementul <resource-ref> din fişierul web-fragment.xml.

Următoarele exemple demonstrează modificarea comportamentului când folosiţi o combinaţie dintre un fişier web.xml şi un fişier 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>

În Servlet 3.0 rezultatul combinat ignoră ţinta de injectare pentru 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>

În Servlet 3.1 rezultatul combinat utilizează ţinta de injectare pentru 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>

Pentru informaţii suplimentare despre modificările comportamentului Servlet 3.1, vedeţi următoarea resursă: Servlet 3.1 behavior changes.