フューチャー技術ブログ

Future Tech Night #10 ~進化するJava。標準API/Tomcat編 を開催しました

はじめに

こんにちは。TIG藤野です。

2021/5/21(金)にFuture Tech Night #10 ~進化するJava。標準API/Tomcat編~を開催しました。

私は、Tomcatコミッタがお送りするちょっとマニアックなTomcatのコンフィグレーション10選というタイトルでお話させていただきました。

発表内容

目次は以下の通りです。

  1. 自己紹介
  2. ちょっとマニアックなTomcatのコンフィグレーション10選
  3. Tomcat 10以降のバージョン体系の話

Tomcatでは大々的に機能が追加されるわけではなく、しれっと有益な機能が追加されることが多々あります。そんなしれっと追加されている機能のうち、少しマニアックで且つ、役立ちそうなものを10個紹介しました。

また、発表の後半ではTomcat 10以降の難解なバージョン体系についても説明しました。

では、発表した内容をもう少し詳しく紹介します。

発表で話したことの概要

ちょっとマニアックなTomcatのコンフィグレーション10選

コンフィグレーション10選として以下を紹介しました。

  • 設定値を外部リソースから読み込む
    設定ファイルの設定値を直接値を設定するのではなく、${Key}指定で別ソースから経由する方法の紹介
  • ポートオフセット
    同一筐体で複数台のTomcatを立ち上げる際のポート番号の設定方法の紹介
  • Json Error Report
    TomcatのデフォルトのエラーページをHTMLからJSONに変更する方法の紹介
  • StuckThreadDetectionValve
    スタックしているリクエスト処理スレッドの検知方法の紹介
  • Legacyアプリケーションベース
    javaEE→jakartaEEへのマイグレーションを可能にするLegacyアプリケーションベースの紹介
  • 静的クラスタメンバーシップ
    マルチキャストが利用できない環境下でのクラスタメンバーシップの設定方法
    静的クラスタメンバーシップの紹介
  • Cloudクラスタメンバーシップ
    kubernetesクラスタ上でのTomcatのクラスタメンバーシップ構築方法の紹介
  • 組込みTomcatのコンフィグソース
    組込みTomcatから設定ファイルを読み込む方法の紹介
  • ソースコード生成
    Tomcat起動時に組込みTomcatのソースコードを出力するオプションの紹介
  • 多言語化対応
    最後はコンフィグではないですが、Tomcatの多言語対応はどうやっているかの紹介

Tomcat 10以降のバージョン体系の話

Tomcat 10以降から変更されるTomcatのバージョン体系とサポートする仕様の関係について説明しました。発表内容をダイジェストで紹介します。

まず、はじめに知っておくこととして、従来のバージョン体系と仕様の関係です。TomcatはJava EEのサブセットをsupportしています。

  • Tomcat 7.0.x : support Java EE 6
  • Tomcat 8.5.x : support Java EE 7
  • Tomcat 9.0.x : support Java EE 8

Java EEがEclipse Foundationに移管されたことにより、Java EE 8 → JakartaEE8となりました。JakartaEE8は名前が変わっているだけでJava EE 8とは完全互換になります。

そして、JakartaEE8→JakartaEE9へのバージョンアップにより、javax.* -> jakarta.* のネームスペースの変更が発生します。簡単にいうと、Java EE 8(JakartaEE8)のアプリケーションはJakartaEE9と互換性はありません。つまりはアプリケーションが動かなくなります。

では、Tomcat 10について説明します。Tomcat 10.0.xはJakartaEE9をサポートします。なので、Tomcat 9以前で稼働しているアプリケーションはTomcat 10では(マイグレーションしないと)動作しません。

Tomcat 10を含めたサポート状況は以下のなります(※これが今現在の状態になります)。

  • Tomcat 7.0.x : support Java EE 6
  • Tomcat 8.5.x : support Java EE 7
  • Tomcat 9.0.x : support Java EE 8(JakartaEE8)
  • Tomcat 10.0.x : support JakartaEE9

そして、JakartaEE10がリリースされると、サポート状況は以下のようになります。

  • Tomcat 8.5.x : support Java EE 7
  • Tomcat 9.0.x : support Java EE 8
  • Tomcat 9.10.x : support Java EE 8 with Tomcat 10 API
  • Tomcat 10.0.x : EOL
  • Tomcat 10.1.x : support JakartaEE10

ポイントは、「JakartaEE9をサポートするTomcat 10.0.xはEOLになり、JakartaEEのバージョンとTomcatのメジャーバージョンを合わせ、Java EE 8を長くサポートするため、Tomcat 9系を拡張する」です。

さらに、JakartaEE11がリリースされるとこんな感じになります。

  • Tomcat 8.5.x : support Java EE 7 →EOL
  • Tomcat 9.0.x : support Java EE 8
  • Tomcat 9.10.x : EOL
  • Tomcat 9.11.x : support Java EE 8 with Tomcat 11 API
  • Tomcat 10.1.x : support JakartaEE10
  • Tomcat 11.0.x : support JakartaEE11

少し複雑ですが、自分のアプリケーションをどのTomcatで実行するのか適切に判断してください。

最後に

Tomcatは、その長い歴史故、最新プロダクトではないが、今もなお、様々な場所で現役で稼働しています。コミュニティにより開発も継続して行われ、まだまだ進化していきます。これからもTomcatを安心してお使いいただければと思います。