Tomcat 11 と Jakarta EE 11 の技術的進化と実裝戦略

はじめに

Tomcat は Apache Foundation が管理するオープンソースの Web サーバーであり、Java ベースのアプリケーションを実行するための重要なプラットフォームとして広く利用されてきた。2023 年にリリースされた Tomcat 11 は、Jakarta EE 11 の仕様変更に完全に対応し、Java 17 での運用を前提とした技術革新を実現している。本記事では、Tomcat 11 と Jakarta EE 11 の技術的特徴、実裝戦略、および今後の展望について詳細に解説する。

Jakarta EE 11 の仕様変更

Java バージョンの要件向上

Jakarta EE 11 では、最低限必要な Java バージョンが Java 17 に引き上げられた。初期には Java 21 への移行が検討されたが、実用性を考慮して Java 17 に落ち著いた。この変更により、セキュリティ管理者(Security Manager)の依存関係が削除され、過時化した機能の除去が進んだ。

仕様のクリーンアップと更新

  • 過時化 API の削除:Servlet、JSP、WebSocket などの規範で使用されていた非推奨機能(例:HTTPUtil クラス、一部の HTTP ヘッダー処理ロジック)が削除された。
  • HTTP/2 サーバープッシュの廃止:HTTP/2 におけるサーバープッシュ機能は廃止され、代替として 103 早期ヒント(Early Hints)が導入された。
  • 動作規則の明確化:HTTP ヘッダー処理、非同期リクエストの條件、パス正規化などの動作が統一され、予測可能な挙動が実現された。

新機能と改善

  • Servlet:標準リクエスト屬性(例:元のリクエストメソッド、クエリ文字列)が追加され、リダイレクト制御の柔軟性が向上した。
  • Expression Language(EL):JavaBeans パッケージへの強制依存が解除され、Optional 型のサポートが追加された。
  • WebSocket:HTTP セッションの読み取り API が導入され、WebSocket 接続中のセッション狀態管理が可能になった。
  • セキュリティ関連:103 早期ヒントによるリソース読み込み効率の向上、基本認証における SHA-256 暗號化、HTTP 優先度の RFC 9218 による簡略化が実裝された。

Tomcat 11 の実裝狀況

Jakarta EE 11 仕様のサポート

  • Servlet と JSP:TCK テストスイートが統合され、JUnit 5 に基づく実行環境が導入され、効率性と保守性が向上した。
  • WebSocket:HTTP セッション読み取り API の実裝により、WebSocket 接続中のセッション管理が可能になった。
  • Expression Language:JavaBeans への依存が解除され、Optional 型のサポートが導入された。

削除と廃止された機能

  • 32 ビット Windows サポートの削除:Commons Daemon の 32 ビットバイナリが提供されなくなった。
  • HTTP/2 サーバープッシュの廃止:非推奨機能として削除された。
  • セキュリティマネージャーのコード削除:過時化した機能を完全に除去した。
  • 一部のコンネクタ設定の削除:不正な HTTP ヘッダー文字列フィルタリングやホストヘッダー不一致チェックが廃止された。

その他の新機能と改善

  • セキュリティ強化:フォーム認証のデフォルトセッションタイムアウトが短縮され、DoS 攻撃のリスクが軽減された。
  • ログと監視:特定機能用の専用ロガー(例:証明書設定)が追加され、JSON 形式のアクセスログがサポートされた。
  • HTTP/2 の改善:複雑な木構造の優先度メカニズムが RFC 9218 による簡略化に置き換えられた。

その他の技術的詳細

削除されたコンポーネント

  • Commons バイナリ:手動インストールが可能だが、デフォルトでは提供されなくなった。
  • 32 ビット Windows サポート:Java 21 での非対応により、Tomcat 11 では再導入されない。

RFC の更新

  • 基本認証:ユーザー名/パスワードとヘッダー値の空白文字処理が修正され、予期される動作を実現。
  • 摘要認証:SHA-256 と MD5 アルゴリズムのサポートが追加され、セキュリティが強化。
  • HTTP 優先度メカニズム:HDP2 の複雑な木構造が RSA2 による簡略化に置き換えられた。

ログの改善

  • 専用ロガー:特定機能(例:証明書設定)用のロガーが追加され、DB ロギングを手動で有効化可能。
  • アクセスログ:JSON 形式出力がサポートされ、秒/ミリ秒/マイクロ秒レベルの時間粒度が選択可能。

セキュリティの強化

  • フォーム認証:デフォルトセッションタイムアウトの短縮により、DoS 攻撃リスクが軽減。
  • DDoS 対策:RAID 限界フィルタが導入され、サービス拒否攻撃の防止が強化。
  • セッション Cookie:Partition 屬性の設定が可能となり、一般的な Cookie 屬性サポートが拡充。
  • クロスサイトリクエストフォージェリ(CSRF):保護不要なリソースを除外可能にし、Realm 內でのカスタム原則屬性の設定が可能。

パフォーマンスの最適化

  • FFM(Foreign Function Memory):Java 22 の OpenSSL 直接呼び出しをサポートし、APR コネクタの代替として導入。
    • 利點:安定性向上、ネイティブライブラリの追加インストールが不要。
    • 現狀:APR コネクタと同等のパフォーマンスを実現。
  • 仮想スレッド(Virtual Threads):アプリケーションの実行速度向上は限定的だが、高 I/O ブロッキングシナリオ(例:データベース/サービス通信)でのスケーラビリティが大幅に向上。
    • 注意點:大量のブロッキング操作がないアプリケーションでは効果が限定的。

その他の機能

  • エラー報告:外部サーバーへのエラー報告転送が可能。
  • ツールエグゼキューター:Web アプリケーションのデプロイと管理に使用可能なツール。
  • 翻訳支援:PO エディタを介して多言語サポートを拡張。
  • 証明書管理:証明書設定の詳細を追跡する専用ロガーが追加。

結論

Tomcat 11 は Jakarta EE 11 の仕様変更に完全に対応し、Java 17 での運用を前提とした技術革新を実現している。セキュリティ強化、過時化機能の削除、新機能の統合を通じて、パフォーマンスと信頼性が向上した。今後は、Tomcat 11 の Beta 版が夏季にリリースされ、安定版への移行が期待される。開発者は、Java 17 への移行と Jakarta EE 11 の仕様理解を進めることで、Tomcat 11 の利活用を最大化できる。