コンテンツ
目次
全般
Apache Tomcat®のバージョン間の移行またはアップグレードに適用される一般的な考慮事項については、最初に一般的な移行ガイドページをお読みください。
8.0.xまたは8.5.xから9.0.xへの移行
このセクションでは、8.0.x / 8.5.xと9.0.xの間で、アップグレード時に後方互換性の問題を引き起こす可能性のある既知の変更点をすべてリストしています。これらの変更点と新機能の一部は、既にApache Tomcat 8.5.xに存在しています。
Java 8必須
Apache Tomcat 9.0.xには、Java 8以降が必要です。Apache Tomcat 8.0.xと8.5.xにはJava 7が必要でした。
仕様API
Apache Tomcat 9は、Java Servlet 4.0、JavaServer Pages 2.3、Java Unified Expression Language 3.0、およびJava API for WebSocket 1.0の仕様をサポートしています。仕様のバージョン間の変更点は、各仕様ドキュメントの付録「変更点」に記載されています。
Servlet 4.0 API
ワイルドカードインポート構文を使用するJSPページでは、Servlet APIに追加された新しいクラスがWebアプリケーションのクラスと競合する可能性があります。たとえば、パッケージ"a"
にクラスPushBuilder
が含まれている場合、次のJSPページはTomcat 9ではコンパイルできなくなります。
<%@page import="a.*"%>
<% PushBuilder pushBuilder = new PushBuilder(); %>
これは、javax.servlet.http.*
の暗黙的なインポートとa.*
の明示的なインポートにより、Servlet 4.0で追加されたクラスPushBuilder
の競合する定義が提供されるためです。解決策は、明示的なインポートであるimport="a.PushBuilder"
を使用することです。
JavaServer Pages 2.3
これはTomcat 8.xから変更されていません。
式言語 3.0
これはTomcat 8.xから変更されていません。
WebSocket 1.1
これはTomcat 8.xから変更されていません。
BIOコネクタの削除
以下の変更点は8.5.0以降に存在します。
HTTPとAJPの両方について、JavaブロッキングIO実装(BIO)が削除されました。JavaノンブロッキングIO実装(NIO)に切り替えることをお勧めします。
Cometサポートの削除
以下の変更点は8.5.0以降に存在します。
Cometのサポートは、直接の代替手段なしに削除されました。Cometを使用しているアプリケーションは、WebSocketに移行することをお勧めします。
HTTP/2サポートの追加
以下の機能は8.5.0以降で使用可能です。
HTTP/2は、h2(TLS経由、ALPN経由でネゴシエート)とh2c(クリアテキスト、HTTP/1.1アップグレード経由でネゴシエート)でサポートされています。HTTP/2は、コネクタに対して明示的に有効にする必要があります。有効にするには、以下を挿入します。
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
TLS仮想ホスティングと複数証明書サポートの追加
以下の機能は8.5.0以降で使用可能です。
Tomcat 9は、単一のコネクタに対して複数の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 9の内部APIはTomcat 8と概ね互換性がありますが、詳細レベルでは多くの変更があり、バイナリ互換性がありません。Tomcatの内部と対話するカスタムコンポーネントの開発者は、関連するAPIのJavaDocを確認する必要があります。
特に注意すべき点は次のとおりです。
- 重複コードを削減し、実装全体で動作を調整するために、コネクタ全体で大幅なリファクタリングが行われました。(*この変更は8.5.xに存在します。*)
- 非推奨の`digest`属性が`Realm`から削除されました。(*この変更は8.5.xに存在します。*)
JSR-77実装の削除
以下の変更点は8.5.0以降に存在します。
JSR-77実装は不完全であり、8.5.xと9.0.xで削除されました。具体的には、JMXに公開されていた以下のメソッドが削除されました。
StandardContext.getServlets()
StandardContext.isStateManageable()
StandardContext.getDeploymentDescriptor()
StandardWrapper.isStateManageable()
クラスタリング
以下の変更点は8.5.0以降に存在します。
`MessageDispatch15Interceptor`は、Java 5の機能をMessageDispatchInterceptorに追加するために使用されていました。 `MessageDispatch15Interceptor`は、Tomcat 8.5.xと9.0.xで、Java 5の機能を`MessageDispatchInterceptor`にマージすることで削除されました。
InstanceListenerの削除
以下の変更点は8.5.0以降に存在します。
InstanceListenerのサポートは、8.5.xと9.0.xで削除されました。具体的には、以下のクラスが削除されました。
org.apache.catalina.InstanceListener
org.apache.catalina.InstanceEvent
org.apache.catalina.util.InstanceSupport
SessionManager
以下の変更点は8.5.0以降に存在します。
以下のセッションマネージャー属性は、8.5.xと9.0.xで完全に削除されました。
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`ごとに設定可能であり、`LegacyCookieProcessor`を使用して8.0.xの動作を取得できます。
Webアプリケーション
ManagerおよびHostManager Webアプリケーションは、デフォルトで、これらのアプリケーションへのアクセスをlocalhostからの接続に制限する`RemoteAddrValve`で設定されています。
EngineとHostの設定
有効な値が1の場合、`startStopThreads`の動作が変更されました。この場合、子は単一スレッドで構成された`ExecutorService`を介さずに現在のスレッドで開始されます。
Contextの設定
`clearReferencesStatic`属性は8.5.xと9.0.xで削除されました。
ロギング
デフォルトでは、ログファイルは90日間保持され、その後ファイルシステムから削除されます。
9.0.xのアップグレード
Apache TomcatのインスタンスをTomcat 9のあるバージョンから別のバージョンにアップグレードする場合、特に$ CATALINA_HOMEと$ CATALINA_BASEに別々の場所を使用している場合は、設定ファイルの変更(新しい属性やデフォルトの変更など)がアップグレードの一部として適用されていることを確認する必要があります。これらの変更の特定を支援するために、以下のフォームを使用して、Tomcat 9の異なるバージョンにおける設定ファイル間の違いを表示できます。
Tomcat 9.0.xの注目すべき変更点
Tomcat開発者は、各パッチリリースが以前のリリースと完全に後方互換性を持つことを目指しています。ただし、バグを修正するために後方互換性を損なう必要がある場合があります。ほとんどの場合、これらの変更は気づかれないでしょう。このセクションでは、完全に後方互換性がない変更と、アップグレード時に破損を引き起こす可能性のある変更をリストしています。
- 9.0.74以降、Connector属性`maxParameterCount`のデフォルト値は10,000から1,000に削減されました。
9.0.31以降、AJPコネクタのデフォルトのリスニング**アドレス**は、すべてのアドレスではなくループバックアドレスに変更されました。
参考:AJPコネクタ。
9.0.31以降、AJPコネクタの**requiredSecret**属性は非推奨となり、**secret**属性に置き換えられました。
参考:AJPコネクタ。
9.0.31以降、**secretRequired**属性がAJPコネクタに追加されました。 `true`(デフォルト)に設定されている場合、**secret**が指定されていない限り、AJPコネクタは起動しません。
参考:AJPコネクタ。
9.0.31以降、**allowedRequestAttributesPattern**属性がAJPコネクタに追加されました。認識されない属性を持つリクエストは、403でブロックされるようになりました。
参考:AJPコネクタ。
9.0.44以降、`HostConfig.check(String)`メソッドのセマンティクスが変更されました。メソッドを呼び出す前にアプリケーションをサービス済みとしてマークする代わりに、メソッドはリソースをチェックする前にアプリケーションをサービス済みとしてマークし、チェックの完了後にアプリケーションのサービス済みマーキングを解除します。メソッドが呼び出されたときにアプリケーションがサービス済みとしてマークされている場合、メソッドはNO-OPになります。
9.0.48以降、NIOポーラーが簡素化され、ブロックポーラーとセレクターの設定が削除されました。設定に存在する場合でも起動エラーは発生しませんが、警告が表示され、効果はありません。
9.0.51以降、Tomcatは、CONFIDENTIALトランスポート保証のために「Cache-Control:private」を追加するときに、「Expires」HTTPレスポンスヘッダーを追加しなくなりました。これは、独自のヘッダーを明示的に設定せずにTomcatの以前の動作に依存するアプリケーションのキャッシュ動作の変更を引き起こす可能性があります。キャッシュを無効にする場合は、アプリケーションで明示的に設定する必要があります。詳細については、BZ 65513を参照してください。
9.0.53以降、`java.nio.file.Files`を使用するようになったCommons FileUploadの更新されたフォークの結果として、マルチパートアップロードを使用するアプリケーションは、JVMに進行中のすべてのマルチパートアップロードを保存するのに十分なダイレクトメモリが設定されていることを確認する必要があります。
9.0.56以降、システムプロパティ`org.apache.juli.AsyncLoggerPollInterval`は使用されなくなりました。
Tomcat 9.0.xの設定ファイルの差異
以下のボックスから設定ファイル、古いバージョン、新しいバージョンを選択し、「差分を表示」をクリックして差分を表示します。差分は新しいタブ/ウィンドウに表示されます。
注:差分がない場合は、エラーページが表示されます。
ワーキングコピー内で、次のようなGitコマンドも使用できます。
git diff 9.0.0 9.0.12 -- conf/