はじめに
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 の利活用を最大化できる。