Проверить изменение алгоритма слияния целевых объектов внедрения ссылок на ресурсы

В спецификации Servlet 3.0 элементы <injection-target> ссылки на ресурс, которая определена в web-fragment.xml файле добавляются в родительский web.xml файл только в том случае, если web.xml определение ссылки ресурса с тем же именем не содержит элементов <injection-target>. Спецификация Servlet 3.1 уточняет, что для ресурса одноименной ссылки, все элементы <injection-target> в дескрипторах web-fragment.xml добавляются к родительские дескрипторы web.xml список элементов <injection-target>. Сервлет Функция Servlet 3.1 может изменить существующее поведение приложения, активировав цели инъекций, которые ранее были исключены из файла <span.xml цели, которые ранее были исключены из файла web.xml.

Это правило помечает элемент <injection-target> в файле web-fragment.xml если в файле web.xml содержит элемент <injection-target> в элементе <resource-ref>, который определен с помощью the с тем же именем, что и элемент <resource-ref> в файле web-fragment.xml.

Приведенные ниже примеры демонстрируют изменение алгоритма работы при использовании файла web.xml в сочетании с файлом 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> 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"> < 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> 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"> < 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>

В Servlet 3.0 результат объединения приводит к тому, что целевой объект внедрения для 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> 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"> < 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>

В Servlet 3.1 результат объединения приводит к тому, что целевой объект внедрения для 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>

Дополнительные сведения об изменении поведения Servlet 3.1 см. в ресурсе: Изменение поведения Servlet 3.1.