コンテンツ

目次

一般

Apache Tomcat® のバージョン間の移行またはアップグレードに適用される一般的な考慮事項については、最初に一般的な移行ガイドページをお読みください。

9.0.x から 10.0.x への移行

このセクションでは、9.0.x から 10.0.x へのアップグレード時に後方互換性の問題を引き起こす可能性のある、すべての既知の変更点をリストしています。

Java 8 が必要

Apache Tomcat 10.0.x には、Java 8 以降が必要です。これは Tomcat 9.0.x から変更ありません。

仕様 API

Apache Tomcat 10 は、Jakarta Servlet 5.0、Jakarta Server Pages 3.0、Jakarta Expression Language 4.0、Jakarta WebSocket 2.0、および Jakarta Authentication 2.0 の仕様をサポートしています。

Tomcat 9.0.x と Tomcat 10.0.x の間には、重大な非互換性の変更点があります。仕様 API で使用される Java パッケージがjavax...からjakarta...に変更されました。新しい API に対して Web アプリケーションを再コンパイルする必要があります。

Tomcat は、Jakarta EE 向け Apache Tomcat 移行ツールを使用して、デプロイ時に既存の Web アプリケーションを Java EE 8 から Jakarta EE 9 に変換できます。この機能を利用するには、Web アプリケーションを Host の legacyAppBase フォルダ(デフォルト名は webapps-javaee)に配置する必要があります。すると、同等の Jakarta EE Web アプリケーションに 変換され、Host の appBase フォルダ(デフォルト名は webapps)に配置されます。

あるいは、Jakarta EE向けApache Tomcat移行ツールまたは同様の変換ツールを事前に使用することで、デプロイ時間の短縮と、より正確な変換設定オプションの利点を得ることができます。

Servlet 5.0 API

Java パッケージが変更されましたjavax.servletからjakarta.servlet.

Server Pages 3.0

Java パッケージが変更されましたjavax.servlet.jspからjakarta.servlet.jsp.

Expression Language 4.0

Java パッケージが変更されましたjavax.elからjakarta.el.

WebSocket 2.0

Java パッケージが変更されましたjavax.websocketからjakarta.websocket.

Authentication 4.0

Java パッケージが変更されましたjavax.security.auth.messageからjakarta.security.auth.message.

内部 API

Tomcat 10 の内部 API は Tomcat 9 と広く互換性がありますが、詳細レベルでは多くの変更があり、バイナリ互換性がありません。Tomcat の内部と対話するカスタムコンポーネントの開発者は、関連する API の JavaDoc を確認する必要があります。

特に注意が必要なのは

  • GenericPrincipal.getPassword()が削除されたことです。

web.xml のデフォルト

conf/web.xml は、デフォルトのリクエストとレスポンスの文字エンコーディングを UTF-8 に設定します。

セッション管理

再起動時のセッションの永続化は、デフォルトで無効になっています。これはグローバルにconf/context.xmlまたは Web アプリケーションごとに再度有効にすることができます。

HTTP/2

HTTP/1.1 コネクタと HTTP/2 コネクタの間で重複していた構成設定が HTTP/2 コネクタから削除され、関連付けられた HTTP/1.1 コネクタから継承されるようになりました。

ロギング

ロギング実装は、ログファイルに書き込むものができた場合にのみログファイルを作成するようになりました。

アクセスログパターン

httpd と合わせるため、%D パターンはリクエスト時間をミリ秒ではなくマイクロ秒で記録するようになりました。リクエスト時間をミリ秒単位で記録するには、%{ms}T を使用してください。

10.0.x のアップグレード

Apache Tomcat のインスタンスをあるバージョンの Tomcat 10 から別のバージョンにアップグレードする場合、特に $CATALINA_HOME と $CATALINA_BASE に別々の場所を使用している場合は、新しい属性やデフォルトの変更など、設定ファイルの変更がアップグレードの一部として適用されるようにする必要があります。これらの変更の識別を支援するために、以下のフォームを使用して、異なるバージョンの Tomcat 10 の設定ファイル間の違いを確認できます。

Tomcat 10.0.x の注目すべき変更点

Tomcat 開発者は、各パッチリリースが以前のリリースと完全に後方互換性があることを目指しています。場合によっては、バグを修正するために後方互換性を破る必要があります。ほとんどの場合、これらの変更は気づかれないでしょう。このセクションでは、完全に後方互換性がない変更と、アップグレード時に破損を引き起こす可能性のある変更をリストしています。

  • 10.0.3 以降、HostConfig.check(String) メソッドのセマンティクスが変更されました。メソッドを呼び出す前にアプリケーションをサービス済みとしてマークするのではなく、メソッドはリソースをチェックする前にアプリケーションをサービス済みとしてマークし、チェックが完了した後にアプリケーションのサービス済みマークを解除します。メソッドが呼び出されたときにアプリケーションがサービス済みとしてマークされている場合、メソッドは NO-OP になります。

  • 10.0.9 以降、Tomcat は、CONFIDENTIALトランスポート保証のために「Cache-Control: private」を追加する際に、「Expires」HTTP レスポンスヘッダーを追加しなくなりました。これは、独自のヘッダーを明示的に設定せずに Tomcat の以前の動作に依存するアプリケーションのキャッシュ動作の変更を引き起こす可能性があります。キャッシュを無効にする場合は、アプリケーションで明示的に設定する必要があります。詳細については、BZ 65513 を参照してください。

  • 10.0.11 以降、更新された Commons FileUpload のフォークで java.nio.file.Files が使用されるようになったため、マルチパートアップロードを使用するアプリケーションは、進行中のすべてのマルチパートアップロードを保存するのに十分なダイレクトメモリが JVM に設定されていることを確認する必要があります。

  • 10.0.14 以降、システムプロパティ org.apache.juli.AsyncLoggerPollInterval は使用されなくなりました。

Tomcat 10.0.x 設定ファイルの差異

以下のボックスから設定ファイル、古いバージョン、新しいバージョンを選択し、「差分を表示」をクリックして差分を表示します。差分は新しいタブ/ウィンドウに表示されます。

注: 差分がない場合は、エラーページが表示されます。

作業コピー内から、次のような Git コマンドを使用することもできます

git diff 10.0.0 10.0.12 -- conf/