Foy honore la spec Jakarta Servlet 6.1 à la lettre — votre web.xml, vos @WebServlet, vos filtres et listeners sont portés tels quels. Cette page liste les points où l’environnement diffère.
|
Foy est en 0.1.0-SNAPSHOT et le TCK officiel passe à environ 90 % (voir État TCK). Migration non recommandée en production tant que les écarts listés ne sont pas comblés. |
Depuis Tomcat
| Tomcat | Foy | Note |
|---|---|---|
|
|
Configuration programmatique. Le connecteur est Chappe, à monter via |
|
Identique |
Lu par |
|
Identique |
Détectés à la compilation par APT — pas de scan runtime. |
|
Identique |
Idem, mergé avec |
Coyote (HTTP/1.1, HTTP/2) |
HTTP/1.1 + HTTP/2 + virtual threads. |
|
|
|
Implémenter |
JNDI lookups ( |
|
Les datasources / pools sont des beans CDI Vauban. |
|
Beans CDI Vauban |
|
Depuis Jetty (Servlet)
| Jetty | Foy | Note |
|---|---|---|
|
Chappe |
Le connecteur est Chappe. |
|
|
|
|
|
Idem. |
|
|
WebSocket Servlet 6.1 planifié, pas de date. |
|
|
L’API |
Depuis Undertow
| Undertow | Foy | Note |
|---|---|---|
|
|
Configuration programmatique en deux temps : Chappe pour le transport, Foy pour Servlet. |
|
Découverte |
Pas de configuration explicite des Servlet/Filter — annotations + |
|
|
Voir Référence Chappe. |
Manques connus
-
WebSocket Servlet 6.1 / Jakarta WebSocket 2.2 —
// TODO@user: planifié, pas de date. -
Cross-context dispatch (
ServletContext.getContext) — non implémenté, voir TCK. -
JSP — non supporté, non planifié. Pour des pages dynamiques, utiliser Cassini (REST) ou des Servlets pures écrivant du HTML.
-
Form-based / Digest authentication —
// TODO@user: en cours.
Pièges courants
-
Pas d’autoload
META-INF/servicesruntime. Foy n’utilise pasServiceLoaderau démarrage. Si une bibliothèque Servlet dépend d’unServletContainerInitializerchargé par le scan, il faut le déclarer en bean CDI dans Vauban. -
metadata-complete=truerespecté à la lettre. Avecfalse, les annotations APT-détectées priment — comportement Servlet 6.1 standard. -
Pas de proxy dynamique runtime. Les frameworks qui en posent (Spring AOP, certaines libs de profilage) ne fonctionnent pas tels quels. Privilégier les alternatives APT (Vauban, Class-File API).
-
Modules JPMS stricts. Si un legacy fait du
setAccessible(true)réflexif, il faut un--add-opensexplicite — préférer porter le legacy vers@Inject.