Request sequence
No body copy: ServletOutputStreamImpl writes straight into the Chappe Body. The ServletInputStream reads straight from the Chappe frame parser.
Threading model
-
One virtual thread per request. Chappe’s
accept()already produces one VT per connection. Foy stays on that thread untilservice()returns. -
No platform pool. No
ExecutorServiceto size. -
Async: no extra cost.
request.startAsync()captures the current VT; the program may detach the response, but the container reserves no platform thread. -
ThreadLocalis used sparingly throughScopedValue(JEP 506) on the Chappe side. Foy inherits that context without pinning.
|
The bridge never |
Container lifecycle
fireContextInitialized() and fireContextDestroyed() are exposed by FoyChappeBoot.Mounted — the caller picks the exact moment (typically right after mount / right before unmount).
CDI integration through Vauban
foy-cdi-vauban is deliberately minimal: its single class, FoyVaubanBootstrap, returns the current VaubanContainer’s `BeanManager, which the caller passes to FoyChappeBoot. WebAppDiscovery then resolves the Servlet/Filter/Listener instances through that BeanManager, so they can @Inject application beans (build-time resolution through Vauban).
|
There are no CDI producers for |
Implementation choices
| Choice | Justification |
|---|---|
No runtime classpath scan |
All |
No runtime reflection |
Aligns with the Vidocq ecosystem’s principles. AOT-friendly (GraalVM, Leyden CDS). |
No body copy |
|
|
Temporary M1 coupling — to be replaced in M2 by a |
No runtime |
Servlet SPIs (e.g. |
Known limits
-
Web fragments (
META-INF/web-fragment.xml) andmetadata-complete: not implemented — the top TCK gap (81 % of failures), see TCK: Jakarta Servlet 6.1. -
Cross-context dispatch (
ServletContext.getContext): implemented viaCrossContextRegistry(strict contextPath match on the contexts deployed in the same JVM). -
Multipart: fully buffered in memory, no streaming parse.
-
WebSocket Servlet 6.1: not implemented (planned, no date).
-
JSP: not supported, not planned.
-
Form-based and Digest authentication: not implemented.
No comparative numbers (Tomcat, Jetty) have been recorded yet — a BENCH.md will be created with the first measured run (workspace convention).