Prüfen, ob sich das Verhalten durch die Zusammenführung von Ressourcenreferenz und Injektionsziel ändert

In der Servlet-Spezifikation 3.0 werden die <injection-target>-Elemente einer Ressourcenreferenz, die in einer web-fragment.xml Datei werden der übergeordneten web.xml Datei nur hinzugefügt, wenn die web.xml-Ressourcenreferenz-Definition mit demselben name keine <injection-target> Elemente hat. Die Servlet 3.1 Spezifikation stellt klar, dass für eine gleichnamige Ressource referenz desselben Namens, alle <injection-target> Elemente in web-fragment.xml Deskriptoren hinzugefügt werden den übergeordneten web.xml Deskriptoren liste der <injection-target> Elemente hinzugefügt. Die Funktion Funktion Servlet 3.1 kann das bestehende Anwendungsverhalten durch die Aktivierung von Injektionszielen ändern ziele aktiviert werden, die zuvor von der web.xml-Datei ausgeschlossen waren.

Diese Regel kennzeichnet das <injection-target>-Element in der web-fragment.xml datei, wenn die web.xml datei ein <injection-target>-Element innerhalb eines <resource-ref>-Elements enthält, das mit dem gleichen Namen definiert ist wie das <resource-ref>-Element in der web-fragment.xml-Datei.

Die folgenden Beispiele veranschaulichen die Verhaltensänderung bei der kombinierten Verwendung der Dateien web.xml und web-fragment.xml:

web.xml:

< span class= "XmlElement"> < Ressourcenref> < /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"> < Injektionsziel> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /injection-target-class> < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /Injektionszielname> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

web-fragment.xml:

< span class= "XmlElement"> < Ressourcenref> < /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"> < Injektionsziel> < /span>
		< span class= "XmlElement"><injection-target-class>Class2 < /injection-target-class> < /span>
		< span class= "XmlElement"><injection-target-name>Resource2 < /Injektionszielname> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

In Servlet 3.0 ignoriert das kombinierte Ergebnis das Injektionsziel für Klasse 2:

< span class= "XmlElement"> < Ressourcenref> < /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"> < Injektionsziel> < /span>
		< span class= "XmlElement"><injection-target-class>Class1 < /injection-target-class> < /span>
		< span class= "XmlElement"><injection-target-name>Resource1 < /Injektionszielname> < /span>
	< span class= "XmlElement"> < /injection-target> < /span> < span class="XmlElement"> < /resource-ref> < /span>

In Servlet 3.1 verwendet das kombinierte Ergebnis das Injektionsziel von Klasse 2:

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

Weitere Informationen zu den Verhaltensänderungen in Servlet 3.1 finden Sie unter Servlet 3.1 behavior changes.