コンテンツ

目次

一般

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" />
HTTP/2 を有効にしたいコネクタ内に挿入してください。セキュアな NIO または NIO2 コネクタで HTTP/2 を有効にするには、それらのコネクタが TLS に OpenSSL エンジンを使用している必要があることに注意してください。

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> 要素の値に基づいて継承されます。
  • ManagersessionIdLength 属性は、SessionIdGeneratorsessionIdLength 属性に置き換えられました。

クッキー

デフォルトの CookieProcessor は現在 Rfc6265CookieProcessor です。CookieProcessorContext ごとに設定可能であり、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/