Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 保守/移行編


12.3.2 Servletの変更点

〈この項の構成〉

(1) Servlet 3.0の非サポートAPIの扱い

アプリケーションサーバ Version 11およびDeveloper Version 11では,Version 9で非サポートだった一部のServlet 3.0 APIが新たにサポート対象になりました。そのため,アプリケーションサーバ Version 9では該当するAPIを使用するとUnsupportedOperationException例外がスローされる仕様となっていましたが,アプリケーションサーバ Version 11およびDeveloper Version 11ではServlet 3.0仕様に従って動作します。

該当するAPIを次の表に示します。もし,これらのAPIから常にUnsupportedOperationException例外がスローされることを期待しているアプリケーションだった場合は,例外がスローされない前提の実装となるようにアプリケーションの改修が必要です。

表12‒4 アプリケーションサーバ Version 11およびDeveloper Version 11からサポートされるようになったServlet 3.0 API

パッケージ

クラス

メソッド

javax.servlet

AsyncContext

すべてのメソッド

AsyncListener

すべてのメソッド

ServletRequest

startAsync

isAsyncStarted

isAsyncSupported

getAsyncContext

getDispatcherType

AsyncEvent

すべてのメソッド

ServletRequestWrapper

startAsync

isAsyncStarted

isAsyncSupported

getAsyncContext

getDispatcherType

Registration

setAsyncSupported

また,アプリケーションサーバVersion 11およびDeveloper Version 11で引き続き非サポートとなるAPIについても,アプリケーションサーバ Version 9およびDeveloper Version 9ではUnsupportedOperationException例外がスローされていましたが,アプリケーションサーバ Version 11およびDeveloper Version11ではデフォルトでは例外がスローされません。該当するAPIを次の表に示します。

表12‒5 アプリケーションサーバ Version 11およびDeveloper Version 11でも非サポートのServlet 3.0 API

パッケージ

クラス

メソッド

webserver.servlet_api.unsupported.throwUnsupportedOperationExceptionの指定値に対する動作

false(デフォルト)

true

javax.servlet

ServletContext

getJspConfigDescriptor

nullが返ります

UnsupportedOperationException例外がスローされます

もし,これらのAPIから常にUnsupportedOperationException例外がスローされることを期待しているアプリケーションだった場合は,例外がスローされない前提の実装となるようにアプリケーションを改修するか,または次の定義をJ2EEサーバ用ユーザプロパティに追加してください。

webserver.servlet_api.unsupported.throwUnsupportedOperationException=true

(2) コンテキストルートにマッピングする動的サーブレット追加処理について

アプリケーションサーバ Version 9およびDeveloper Version 9では,javax.servlet.ServletRegistrationのaddMappingメソッドの引数にコンテキストルートを示す”/”を指定した場合,すでにデフォルトサーブレットがマッピング済みであるためにマッピングの上書きができませんでした。

アプリケーションサーバ Version 11およびDeveloper Version 11では,同一ServletContextに対して1度だけ,コンテキストルートに対するマッピングを上書きできます。これによって,デフォルトサーブレットの代わりにユーザ定義サーブレットをコンテキストルートにマッピングできます。

もし,アプリケーションサーバ Version 11およびDeveloper Version 11の動作を期待しておらず,addMappingメソッドがマッピングの上書きを拒否することを期待しているアプリケーションだった場合,コンテキストルートにマッピングするaddMappingメソッドの呼び出しをしないようにアプリケーションの改修が必要です。アプリケーションを改修しないでアプリケーションサーバ Version11およびDeveloper Version 11に移行すると,デフォルトサーブレットへのマッピングがユーザサーブレットへのマッピングに上書きされるおそれがあります。