Séquence d’une requête HTTP
Aucune copie de body : ServletOutputStreamImpl écrit directement dans le Body Chappe. Le ServletInputStream lit directement depuis le frame parser Chappe.
Modèle de threading
-
Un virtual thread par requête. Chappe
accept()produit déjà un VT par connexion. Foy reste sur ce thread jusqu’à la fin deservice(). -
Pas de pool plateforme. Aucun
ExecutorServiceà dimensionner. -
Async : aucun coût supplémentaire.
request.startAsync()capture le VT courant ; le programme peut détacher la réponse, mais le container ne réserve aucun thread plateforme. -
ThreadLocal: utilisé prudemment viaScopedValue(JEP 506) côté Chappe. Foy hérite de ce contexte sans le bloquer.
|
Le bridge ne |
Lifecycle du container
fireContextInitialized() et fireContextDestroyed() sont exposés par FoyChappeBoot.Mounted — l’appelant choisit le moment exact (typiquement après / avant ChappeMountPoint.mount / unmount).
Intégration CDI via Vauban
foy-cdi-vauban agit en deux temps :
-
build-time (Vauban) — le processeur d’annotations Vauban génère les bean producers pour
ServletContext,HttpServletRequestetHttpSession. Aucune réflexion, tout est enClass-File API(JEP 484). -
runtime (Foy) —
FoyVaubanBootstrap.beanManager()retourne leBeanManagerinjecté àFoyChappeBoot. À chaque requête,ServletDispatcherpousse l’instance courante deHttpServletRequestdans leRequestScopedcontext.
Bénéfice : @Inject HttpServletRequest req fonctionne dans n’importe quelle Servlet ou Filter, sans proxy dynamique runtime.
Choix d’implémentation
| Choix | Justification |
|---|---|
Pas de scan classpath runtime |
Tous les |
Pas de réflexion runtime |
Conformité aux principes de l’écosystème Vidocq. Compatibilité AOT (GraalVM, Leyden CDS). |
Pas de copie de body |
|
|
Couplage M1 temporaire — sera remplacé en M2 par une SPI |
Pas de |
Les SPI Servlet (ex. |
Limites connues
-
Cross-context dispatch (
ServletContext.getContext) : pas implémenté — voir TCK : Jakarta Servlet 6.1. -
WebSocket Servlet 6.1 :
// TODO@user: planifié, pas de date. -
JSP : non supporté, non planifié.
-
Form-based authentication :
// TODO@user: en cours.
Pour des chiffres comparatifs (Tomcat, Jetty), voir lien:https://codeberg.org/Vidocq/foy/src/branch/main/BENCH.md[BENCH.md].