コンテンツ
目次
一般
まず、Apache Tomcat®のバージョン間の移行やアップグレードに共通して適用される考慮事項については、一般的なマイグレーションガイドページをお読みください。
8.0.x から 8.5.x へのマイグレーション
このセクションでは、8.0.x と 8.5.x の間で、アップグレード時に後方互換性の問題を引き起こす可能性のある既知の変更点をすべて示します。
BIO コネクタの削除
HTTP および AJP 両方の Java ブロッキング IO 実装(BIO)が削除されました。ユーザーは、Java ノンブロッキング IO 実装(NIO)に切り替えることを推奨します。Tomcat 8.5.17 の時点では、BIO コネクタが明示的に構成されている場合、コネクタの起動に失敗するのではなく、Tomcat は自動的にコネクタを NIO 実装を使用するように切り替え、警告をログに記録します。
HTTP コネクタの変更
Comet サポートの削除
Comet のサポートは、直接的な代替なしに削除されました。Comet を使用するアプリケーションは、WebSocket に移行することを推奨します。
HTTP/2 サポートの追加
HTTP/2 は、h2(TLS 経由、ALPN でネゴシエート)および h2c(クリアテキスト、HTTP/1.1 アップグレードでネゴシエート)でサポートされています。HTTP/2 は、コネクタで明示的に有効にする必要があります。有効にするには、
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
TLS 仮想ホスティングと複数証明書サポートの追加
Tomcat 8.5 は、単一のコネクタに対して複数の TLS 仮想ホストをサポートし、各仮想ホストは複数の証明書をサポートできます。仮想ホストの定義は Connector 要素内にネストされ、複数の仮想ホストが指定されている場合は、Connector の defaultSSLHostConfigName 属性を使用してデフォルトが指定されます。証明書の定義は、仮想ホスト内にネストされます。
次の例は、これを使用して、各ホストに RSA と EC 証明書の両方を持つ複数の TLS 仮想ホストに対して単一の APR/ネイティブコネクタを構成する方法を示しています。
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150"
SSLEnabled="true"
defaultSSLHostConfigName="openoffice.apache.org" >
<SSLHostConfig hostName="openoffice.apache.org" >
<Certificate certificateKeyFile="conf/openoffice.apache.org-rsa-key.pem"
certificateFile="conf/openoffice.apache.org-rsa-cert.pem"
type="RSA" />
<Certificate certificateKeyFile="conf/openoffice.apache.org-ec-key.pem"
certificateFile="conf/openoffice.apache.org-ec-cert.pem"
type="EC" />
</SSLHostConfig>
<SSLHostConfig hostName="www.openoffice.org" >
<Certificate certificateKeyFile="conf/www.openoffice.org-rsa-key.pem"
certificateFile="conf/www.openoffice.org-rsa-cert.pem"
type="RSA" />
<Certificate certificateKeyFile="conf/www.openoffice.org-ec-key.pem"
certificateFile="conf/www.openoffice.org-ec-cert.pem"
type="EC" />
</SSLHostConfig>
</Connector>
内部 API
Tomcat 8.5 の内部 API は Tomcat 8.0 とほぼ互換性がありますが、詳細レベルでは多くの変更があり、バイナリ互換性はありません。Tomcat の内部とやり取りするカスタムコンポーネントの開発者は、関連する API の JavaDoc を確認する必要があります。
特に注意すべき点は次のとおりです。
- 重複するコードを削減し、実装間で動作を一致させるために、コネクタ全体で大幅なリファクタリングが行われました。
- 非推奨の
digest
属性がRealm
から削除されました。これは、CredentialHandler
経由で構成する必要があります。 AuthenticatorBase
実装は、サブクラスでauthenticate()
ではなくdoAuthenticate()
を呼び出すように変更されました。
JSR-77 実装の削除
JSR-77 実装は不完全であり、8.5.x で削除されました。具体的には、JMX に公開されていた次のメソッドが削除されました。
StandardContext.getServlets()
StandardContext.isStateManageable()
StandardContext.getDeploymentDescriptor()
StandardWrapper.isStateManageable()
クラスタリング
MessageDispatch15Interceptor
は、Java 5 の機能を MessageDispatchInterceptor に追加するために使用されていました。Java 5 の機能を MessageDispatchInterceptor
にマージすることにより、MessageDispatch15Interceptor
が Tomcat 8.5.x で削除されました。
InstanceListener の削除
InstanceListener のサポートが 8.5.x で削除されました。具体的には、次のクラスが削除されました。
org.apache.catalina.InstanceListener
org.apache.catalina.InstanceEvent
org.apache.catalina.util.InstanceSupport
SessionManager
次のセッションマネージャーの属性が 8.5 で完全に削除されました。
distributable
maxInactiveInterval
sessionIdLength
代替は次のとおりです。
distributable
属性は 8.0 で非推奨になり、指定された値は無視されます。これは、Context 経由で構成する必要があります。値は、/WEB-INF/web.xml
の<distributable />
要素の有無に基づいて継承されます。maxInactiveInterval
属性は 8.0 で非推奨になりました。値が指定されている場合、警告ログが発行されます。これは、Context 経由で構成する必要があります。値は、/WEB-INF/web.xml
の<session-timeout>
要素の値に基づいて継承されます。Manager
のsessionIdLength
属性は、SessionIdGenerator
のsessionIdLength
属性に置き換えられました。
Cookie
デフォルトの CookieProcessor
は、Rfc6265CookieProcessor
になりました。CookieProcessor
は Context
ごとに構成可能で、8.0.x の動作を取得するために LegacyCookieProcessor
を使用できます。
Web アプリケーション
Manager および HostManager Web アプリケーションは、デフォルトで、localhost からの接続にそれらのアプリケーションへのアクセスを制限する RemoteAddrValve
で構成されています。
コンテキスト構成
clearReferencesStatic
属性が 8.5.x で削除されました。
8.5.x のアップグレード
Apache Tomcat のインスタンスを Tomcat 8 のあるバージョンから別のバージョンにアップグレードする場合、特に $CATALINA_HOME と $CATALINA_BASE に個別の場所を使用する場合は、新しい属性やデフォルトの変更などの構成ファイルの変更がアップグレードの一部として適用されていることを確認する必要があります。これらの変更の識別に役立つように、以下のフォームを使用して、異なるバージョンの Tomcat 8 の構成ファイル間の相違を表示できます。
Tomcat 8.5.x の注目すべき変更点
Tomcat 開発者は、各パッチリリースが前のリリースと完全に後方互換性を持つことを目指しています。場合によっては、バグを修正するために後方互換性を破る必要があります。ほとんどの場合、これらの変更は気づかれることはありません。このセクションでは、完全に後方互換性があるわけではなく、アップグレード時に破損を引き起こす可能性のある変更点を示します。
- 8.5.88 以降では、Connector 属性
maxParameterCount
のデフォルト値が 10,000 から 1,000 に削減されました。 8.5.51 以降では、AJP コネクタのデフォルトの listen address が、すべてのアドレスではなくループバックアドレスに変更されました。
参考資料:AJP コネクタ。
8.5.51 以降では、AJP コネクタの requiredSecret 属性が非推奨になり、secret 属性に置き換えられました。
参考資料:AJP コネクタ。
8.5.51 以降では、secretRequired 属性が AJP コネクタに追加されました。デフォルトの
true
に設定されている場合、secret が指定されていない限り、AJP コネクタは起動しません。参考資料:AJP コネクタ。
8.5.51 以降では、allowedRequestAttributesPattern 属性が AJP コネクタに追加されました。認識されない属性を持つリクエストは、403 でブロックされるようになりました。
参考資料:AJP コネクタ。
8.5.64 以降では、
HostConfig.check(String)
メソッドのセマンティクスが変更されました。メソッドを呼び出す前にアプリケーションをサービス済みとしてマークするのではなく、メソッドはリソースをチェックする前にアプリケーションをサービス済みとしてマークし、チェックが完了した後、アプリケーションをサービスされていない状態としてマークします。メソッドが呼び出されたときにアプリケーションがサービス済みとしてマークされている場合、メソッドは NO-OP になります。8.5.70 以降では、Tomcat は「Cache-Control: private」が CONFIDENTIAL トランスポート保証によるものであっても、「Expires」HTTP レスポンスヘッダーを追加しなくなりました。これにより、明示的に独自のヘッダーを設定せず、Tomcat の以前の動作に依存していたアプリケーションのキャッシング動作が変更される可能性があります。キャッシングを無効にする場合は、アプリケーションで明示的に構成する必要があります。詳細については、BZ 65513を参照してください。
8.5.71 以降では、Commons FileUpload の更新されたフォークで
java.nio.file.Files
を使用するようになった結果、マルチパートアップロードを使用するアプリケーションは、進行中のすべてのマルチパートアップロードを格納するのに十分なダイレクトメモリで JVM を構成する必要があります。8.5.74 以降では、システムプロパティ
org.apache.juli.AsyncLoggerPollInterval
は使用されなくなりました。8.5.75 以降では、JmxRemoteLifecycleListener が削除されました。最近の JVM では、JMXLifecycleListener によって提供される機能は必要なくなったことに注意してください。
8.5.75 以降では、HTTP/1.1 アップグレードが実行されている場合、
<Connector>
のmaxSavePostSize
属性もリクエストボディに適用されます。8.5.76 以降では、Tomcat リリースビルドは「Java 7 モード」で Java 11 を使用して実行されます。これにより、Java 7 以降で動作するはずの完全に互換性のあるリリースが作成されます。クラスファイルバージョンのエラー、メソッドの不一致エラー、JVM 検証ツールなどの問題が発生した場合は、直ちに Tomcat チームに報告する必要があります。
Tomcat 8.5.x 設定ファイルの相違点
以下のボックスから構成ファイル、古いバージョン、新しいバージョンを選択し、「差異を表示」をクリックして、差異を確認します。差異は新しいタブ/ウィンドウに表示されます。
注: 差異がない場合は、エラーページが表示されます。
作業コピー内から、次のような Git コマンドを使用することもできます。
git diff 8.5.0 8.5.20 -- conf/