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

server.xml (<Connector>, <Engine>, <Host>)

FoyChappeBoot.builder() + Chappe

Configuration programmatique. Le connecteur est Chappe, à monter via ChappeMountPoint.

WEB-INF/web.xml

Identique

Lu par WebXmlParser au démarrage.

@WebServlet, @WebFilter, @WebListener

Identique

Détectés à la compilation par APT — pas de scan runtime.

META-INF/web-fragment.xml

Identique

Idem, mergé avec web.xml selon metadata-complete.

Coyote (HTTP/1.1, HTTP/2)

Chappe

HTTP/1.1 + HTTP/2 + virtual threads.

Realm / AuthMethod

SecurityProvider (foy-api)

Implémenter io.vidocq.foy.spi.security.SecurityProvider. Basic Auth fournie via BasicAuthenticator.

JNDI lookups (@Resource)

@Inject via foy-cdi-vauban

Les datasources / pools sont des beans CDI Vauban.

Context.xml resources

Beans CDI Vauban

// TODO@user: clarifier le mapping pour les ressources JNDI applicatives.

Depuis Jetty (Servlet)

Jetty Foy Note

Server + ServerConnector

Chappe ChappeBoot

Le connecteur est Chappe.

WebAppContext

FoyChappeBoot.builder().contextPath(…​)

// TODO@user: déploiement WAR direct quand stabilisé.

ServletContextHandler

VidocqServletContext (interne)

Idem.

JettyWebSocketServletContainerInitializer

// TODO@user

WebSocket Servlet 6.1 planifié, pas de date.

Handler Jetty custom

Handler Chappe

L’API io.vidocq.chappe.api.Handler est l’équivalent — voir Référence Chappe.

Depuis Undertow

Undertow Foy Note

Undertow.builder()

FoyChappeBoot.builder() + Chappe

Configuration programmatique en deux temps : Chappe pour le transport, Foy pour Servlet.

DeploymentInfo

Découverte WebAppDiscovery automatique via BeanManager

Pas de configuration explicite des Servlet/Filter — annotations + web.xml.

HttpHandler Undertow

Handler Chappe

Voir Référence Chappe.

Depuis Helidon Servlet

// TODO@user: à documenter dès qu’un cas réel de migration se présente.

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/services runtime. Foy n’utilise pas ServiceLoader au démarrage. Si une bibliothèque Servlet dépend d’un ServletContainerInitializer chargé par le scan, il faut le déclarer en bean CDI dans Vauban.

  • metadata-complete=true respecté à la lettre. Avec false, 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-opens explicite — préférer porter le legacy vers @Inject.