Nella specifica Servlet 3.0, gli elementi <injection-target> di un riferimento a una risorsa definito in un file web-fragment.xml vengono aggiunti al file padre web.xml solo se la definizione del riferimento di risorsa web.xml con lo stesso nome non ha alcun <injection-target nome non ha elementi <injection-target>. La specifica Servlet 3.1 chiarisce che per una risorsa con lo stesso nome, tutti gli elementi elementi <injection-target> nei descrittori web-fragment.xml sono aggiunti ai descrittori <span.xml genitori al descrittore padre web.xml di elementi <injection-target>. La funzione Servlet 3.1 potrebbe modificare il comportamento dell'applicazione esistente, attivando bersagli di iniezione che prima erano esclusi dal file che prima erano esclusi 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 l'opzione lo stesso 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:
< 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> Contenitore < span class="XmlElement"> < /res-auth> < /span> < span class= "XmlElement"> < res - sharing - scope> < /span> Shareable < span class="XmlElement"> < /res - sharing - scope> < /span> < span class= "XmlElement"> < destinazione-iniezione> < /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> Contenitore < span class="XmlElement"> < /res-auth> < /span> < span class= "XmlElement"> < res - sharing - scope> < /span> Shareable < span class="XmlElement"> < /res - sharing - scope> < /span> < span class= "XmlElement"> < destinazione-iniezione> < /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>
In Servlet 3.0 il risultato combinato ignora la destinazione di inserimento per 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> Contenitore < span class="XmlElement"> < /res-auth> < /span> < span class= "XmlElement"> < res - sharing - scope> < /span> Shareable < span class="XmlElement"> < /res - sharing - scope> < /span> < span class= "XmlElement"> < destinazione-iniezione> < /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>
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, vedere le seguenti risorse: Servlet 3.1 behavior changes.