In der Servlet 3.0-Spezifikation werden die <injection-target>-Elemente einer Ressourcenreferenz, die in einer web-fragment.xml-Datei definiert ist, nur zur übergeordneten Datei web.xml hinzugefügt, wenn die web.xml-Ressourcenreferendefinition mit demselben Namen keine <injection-target>-Elemente hat. Die Servlet 3.1-Spezifikation legt fest, dass für eine Ressourcenreferenz mit demselben Namen alle <injection-target>-Elemente in web-fragment.xml-Deskriptoren der übergeordneten web.xml-Deskriptorenliste mit <injection-target>-Elementen hinzugefügt werden. Das Feature Servlet 3.1 kann das aktuelle Anwendungsverhalten durch die Aktivierung von Injektionszielen, die zuvor aus der Datei web.xml ausgeschlossen waren, ändern.
Diese Regel markiert das Element <injection-target> in der Datei web-fragment.xml, wenn die Datei web.xml ein <injection-target>-Element mit einem <resource-ref>-Element enthält, für das derselbe Name definiert wurde wie für das Element <resource-ref> in der Datei web-fragment.xml.
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.