コンテンツ

目次

一般

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 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...へ変更されました。Webアプリケーションを新しいAPIに対して再コンパイルする必要があります。

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

あるいは、デプロイ時間の短縮と、より正確な変換構成オプションを利用するために、事前にJakarta EE 用 Apache Tomcat 移行ツールまたは類似の変換ツールを使用できます。

Servlet 5.0 API

Java パッケージは以下のように変更されました:javax.servletからjakarta.servlet.

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 2.0

Java パッケージは以下のように変更されました:javax.security.auth.messageからjakarta.security.auth.message.

内部API

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

特に注目すべき点は以下の通りです:

  • `GenericPrincipal.getPassword()`は削除されました。

システムプロパティ

Tomcat 固有のシステムプロパティの多くに対するサポートは削除され、システムプロパティはコネクタ、コンテキスト、マネージャなどの適切なコンポーネントの属性に置き換えられました。

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/