CHAPTER 10 / KOHAKU
機能と制限
対応する機能とサーバ構成、導入・運用時に確認する制限をまとめます。
要求処理と配備の流れ
要求処理の主要経路
bin/kohaku.sh
→ kohaku.bootstrap.Main(YAMLを読みServerを構築)
→ Server.init / start
→ webapps走査 → WAR展開 → 記述子解析
→ webappクラスローダ → JNDI束縛 → webapp初期化
→ HTTP / HTTPSコネクタ
→ ServletContainer → Filter / Servlet / JSP
→ 管理listener → HealthProbes / MetricRegistryJava 21の仮想スレッドとblocking I/Oを軸にしたJPMS構成です。アプリの WEB-INF/classes と WEB-INF/lib はwebappクラスローダで読み込み、通常のアプリクラスは子優先です。java.* は親のみ、javax.* / jdk.* 等は親優先、Kohaku内部パッケージは限定した例外以外を親から隠します。同一JVM内のクラスローダ分離を、悪意あるアプリに対するOSサンドボックスと解釈しないでください。
| モジュール | 役割 |
|---|---|
| kohaku-core | 設定、YAML、ライフサイクル、ログ、診断、メトリクス、共通呼出し文脈 |
| kohaku-io / kohaku-http | blocking I/O、HTTP/1.1、HTTP/2、TLS、request-id |
| kohaku-loader / kohaku-deployer | クラスローダ分離、WAR展開、記述子・アノテーション解析 |
| kohaku-container | Servlet、セッション、dispatch、非同期、アプリライフサイクル |
| kohaku-security | realm、認証、パスワード保存形式 |
| kohaku-naming / kohaku-jta | JNDI、JDBCプール、トランザクション管理 |
| kohaku-el / kohaku-jsp / kohaku-jstl | EL評価、JSP翻訳・コンパイル、標準タグ |
| kohaku-concurrent | 管理Executor、Scheduler、ThreadFactory、ContextService |
| kohaku-websocket / kohaku-websocket-shim | サーバ・クライアントWebSocket、webappでの発見 |
| kohaku-agent / kohaku-bootstrap | 常駐エージェントと全体の起動・配線・運用機能 |
対応範囲と既知の制限
| 項目 | 現在の位置づけ |
|---|---|
| 仕様適合 | Servlet 4.0等のAPI対応・適合作業中。全ての仕様要件への対応や認証を保証するものではありません |
| Web Profile | CDI 2.0、Interceptors 1.2、JSF 2.3、JAX-RS 2.1、JPA 2.2等は未対応 |
| 自動注入 | @Resourceやinjection-targetの対応に制限あり。アプリから明示的にJNDI lookupを使用します |
| JTAの宣言的機能 | @Transactional / @TransactionScopedは未実装 |
| 永続トランザクション復旧 | durable recoveryログなし。XAを使ってもクラッシュ後の自動復旧保証なし |
| 非XA複数参加 | 1相のローカル参加者が複数の場合、全体の原子性保証なし |
| 標準data-source記述子 | web.xmlの標準data-sourceは未実装。Kohaku固有記述子または共有設定を使用 |
| ホットデプロイ | ポーリング。WAR更新は撤去後に配備。展開ディレクトリ内編集の自動再配備なし |
| セッション永続化 | 現行はメモリ内。プロセス再起動や再配備を跨ぐ保持を前提にしない |
| 共有ライブラリ | libはmodule path、sharedはコンテナ提供物。任意の共通jarの公開拡張点ではない |
| TLS終端プロキシ | 正規authorityは明示設定。Forwarded等の一般的な信頼プロキシ設定として扱わない |
| 管理面 | 未認証・平文、既定無効。readinessはwebapp/DBの業務正常性を保証しない |
| 自動再起動 | 起動・停止スクリプトに、異常終了を監視して自動で再起動する機能はありません |
| 停止・資源回収 | 止まらない処理を安全に強制終了できず、quarantine・作業世代の保持が起こり得る |