コンテンツ
目次
一般
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 コネクタの変更
HTTP 理由フレーズはデフォルトで削除されましたが、sendReasonPhrase
設定属性を使用することで再有効化できます。
Comet サポートが削除されました
Comet サポートは直接的な代替なしに削除されました。Comet を使用しているアプリケーションは WebSockets への移行が推奨されます。
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 属性を使用してデフォルトが指定されます。証明書定義は仮想ホスト内にネストされます。
以下の例は、単一の APR/ネイティブコネクタを複数の TLS 仮想ホストに対して、各ホストが RSA および EC 証明書の両方を持つように設定する方法を示しています。
<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 に追加するために使用されていました。MessageDispatch15Interceptor
は、Java 5 の機能が MessageDispatchInterceptor
にマージされたことにより、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
属性に置き換えられました。
クッキー
デフォルトの CookieProcessor
は現在 Rfc6265CookieProcessor
です。CookieProcessor
は Context
ごとに設定可能であり、LegacyCookieProcessor
を使用して 8.0.x の動作を得ることができます。
Web アプリケーション
Manager および HostManager の Web アプリケーションは、デフォルトで RemoteAddrValve
を使用して設定されており、これらのアプリケーションへのアクセスを localhost からの接続に制限しています。
コンテキスト設定
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 コネクタのデフォルトのリスンアドレスは、すべてのアドレスではなくループバックアドレスに変更されました。
参照: 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 は CONFIDENTIAL トランスポート保証のために「Cache-Control: private」を追加する際に「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 以降、
<Connector>
のmaxSavePostSize
属性は、HTTP/1.1 アップグレードが実行されている場合に存在するリクエストボディにも適用されます。8.5.76 以降、Tomcat リリースビルドは「Java 7 モード」で Java 11 を使用して実行されます。これにより、Java 7 以降で動作する完全に互換性のあるリリースが生成されるはずです。クラスファイルのバージョンエラー、メソッドの不一致エラー、JVM ベリファイアなどの問題が発生した場合は、直ちに Tomcat チームに報告してください。
Tomcat 8.5.x 設定ファイルの差異
以下のボックスから設定ファイル、古いバージョン、新しいバージョンを選択し、「View differences」をクリックして差分を表示します。差分は新しいタブ/ウィンドウに表示されます。
注意: 差分がない場合はエラーページが表示されます。
作業コピー内から、以下のような Git コマンドを使用することもできます。
git diff 8.5.0 8.5.20 -- conf/