Na especificação do Servlet 3.0, os elementos elementos <injection-target> de uma referência de recurso que é definida em um arquivo web-fragment.xml arquivo são adicionados ao arquivo pai web.xml somente se a definição de referência de recurso web.xml com o mesmo nome não tiver elementos <injection-target>. A especificação do Servlet 3.1 esclarece que, para um recurso com o mesmo nome, todos os elementos elementos <injection-target> em web-fragment.xml descritores são adicionados aos aos descritores pai web.xml lista de elementos <injection-target>. O recurso Servlet 3.1 pode alterar o comportamento do aplicativo existente, ativando alvos de injeção que foram excluídos anteriormente do arquivo web.xml.
Essa regra sinaliza o elemento <injection-target> no arquivo web-fragment.xml se o arquivo web.xml contiver um elemento <injection-target> em um elemento <resource-ref> definido com o mesmo nome que o elemento <resource-ref> no arquivo web-fragment.xml.
Os exemplos a seguir demonstram a mudança de comportamento quando você usa uma combinação de um arquivo web.xml e um arquivo 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> Contêiner < 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> Contêiner < 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>
No Servlet 3.0, o resultado combinado ignora o destino da injeção para 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> Contêiner < 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>
No Servlet 3.1, o resultado combinado usa o destino da injeção para 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>
Para obter informações adicionais sobre mudanças de comportamento do Servlet 3.1, veja o recurso a seguir: Mudanças de comportamento do Servlet 3.1.