Sprawdź, czy nie zmieniło się zachowanie w przypadku scalania obiektu docelowego wstrzykiwania odwołania do zasobu

W specyfikacji Servlet 3.0 elementy <injection-target> odwołania do zasobu zdefiniowanego w pliku web-fragment.xml są dodawane do nadrzędnego pliku web.xml tylko wówczas, gdy definicja odwołania do zasobu web.xml o takiej samej nazwie nie ma żadnych elementów <injection-target>. W specyfikacji Servlet 3.1 wyjaśniono, że w przypadku odwołania do zasobu o tej samej nazwie wszystkie elementy <injection-target> w deskryptorach web-fragment.xml są dodawane do nadrzędnej listy deskryptorów web.xml elementów <injection-target>. Składnik specyfikacji Servlet 3.1 może zmienić zachowanie istniejącej aplikacji, aktywując elementy injection-target, które zostały wcześniej wykluczone z pliku web.xml.

Ta reguła powoduje oznaczenie flagą elementu <injection-target> w pliku web-fragment.xml, jeśli plik web.xml zawiera element <injection-target> w elemencie <resource-ref>, który jest zdefiniowany z taką samą nazwą jak element <resource-ref> w pliku web-fragment.xml.

W poniższych przykładach przedstawiono zmianę zachowania w przypadku użycia kombinacji pliku web.xml i pliku 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> Kontener < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Współużytkowalne < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /klasa-docelowa-wstrzykiwania > < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /nazwa-docelowego-wstrzykiwania> < /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> Kontener < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Współużytkowalne < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class2 < /klasa-docelowa-wstrzykiwania > < /span>
		< span class= "XmlElement"><injection-target-name>Resource2 < /nazwa_docelowa_wstrzykiwania> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

W specyfikacji Servlet 3.0 w złożonym wyniku element injection-target dla elementu Class2 jest ignorowany:

< 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> Kontener < span class="XmlElement"> < /res-auth> < /span>
	< span class= "XmlElement"> < res-sharing-scope> < /span> Współużytkowalne < span class="XmlElement"> < /res-sharing-scope> < /span>
	< span class= "XmlElement"> < injection-target> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /klasa-docelowa-wstrzykiwania > < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /nazwa-docelowego-wstrzykiwania> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

W specyfikacji Servlet 3.1 w złożonym wyniku element injection-target dla elementu Class2 jest używany:

<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>

Więcej informacji na temat zmian zachowania specyfikacji Servlet 3.1 zawiera następujący zasób: Zmiany zachowania specyfikacji Servlet 3.1.