リソース参照注入ターゲットのマージでの振る舞いの変更を確認する

サーブレット 3.0 仕様では ファイルで定義されたリソース参照の <injection-target> 要素を指します。 class="FilePath">web-fragment.xml で定義されているリソース参照の <injection-target> 要素は、親 web.xml ファイルに追加されます。 class="FilePath">web.xml ファイルに追加されます。 ファイルに追加されます。 サーブレット 3.1 仕様は、同じ名前のリソース参照に対して 参照に対して、すべての web-fragment.xml 記述子の <injection-target> 要素は、親 <span.xml 記述子に追加されます。 親 web.xml ディスクリプタに追加されます。 の <injection-target> 要素のリストに追加される。 そのため サーブレット 3.1 機能は、以前は <span.xml ファイルから除外されていたインジェクション ターゲットを有効にすることで web.xml ファイルから以前は除外されていた注入ターゲットを有効にすることによって、既存のアプリケーションの動作を変更する可能性があります。

このルールは、web-fragment.xml ファイルの <injection-target> 要素にフラグを立てる。 class="FilePath">web ファイル内の <injection-target> 要素にフラグを立てます。 ファイル内に <injection-target> 要素がある場合、このルールは <span.xml ファイル内の <injection-target> 要素にフラグを立てます。 要素内に web-fragment.xml ファイル内の <resource-ref> 要素と同じ名前で定義されている <resource-ref> 要素内に <injection-target> 要素が含まれている場合。

以下の例は、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> コンテナー < 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> コンテナー < 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> コンテナー < 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 behavior changes』を参照してください。