L’écosystème Vidocq se compose de quinze modules indépendants — sept fondations Jakarta EE plus huit implémentations MicroProfile. Cette page décrit leurs frontières, leurs interfaces, et les choix transverses qui s’appliquent uniformément à tous.
Vue C4 — niveau Container
Lecture rapide :
-
Chappe est la seule porte d’entrée HTTP. Foy et Cassini ne parlent jamais directement à un
ServerSocketChannel— ils consomment la SPI d’échange Chappe. -
Vauban est branché à tous les modules qui ont besoin de
@Inject(Cassini, Foy, Mansart, Vidocq Runtime), mais ne dépend de personne. -
Champollion est une feuille côté JSON : Cassini l’utilise comme entity provider par défaut, mais Champollion ne connaît pas Cassini.
-
Mansart ne connaît ni HTTP ni REST. Il consomme uniquement Vauban (intercepteur
@Transactional) et JDBC. -
Vidocq Runtime orchestre l’ensemble via une SPI d’extensions (BuildStep, BuildItem, Recorder).
Matrice de dépendances
Trois propriétés notables :
-
Le graphe est acyclique — aucun module socle ne dépend d’un module aval.
-
Chappe, Vauban et Champollion sont des briques fondatrices : aucune dépendance vers un autre module Vidocq.
-
Foy et Cassini sont interchangeables côté Vidocq Runtime : on peut servir une appli sans Servlet (Cassini direct sur Chappe) ou sans REST (Foy direct sur Chappe).
-
La couche MicroProfile (Ravel, Knock, Dirac, Heisenberg, Cervantes, Cyrano, Humboldt, Grimm) repose sur les fondations : chaque module est une implémentation indépendante, câblée dans Vidocq Runtime via la SPI d’extensions et, le cas échéant, exposée au-dessus de Cassini.
Choix transverses
Quatre invariants s’appliquent à tout l’écosystème.
1. Zéro ou très peu de dépendances
Seules les specs Jakarta / MicroProfile concernées sont autorisées en runtime. Pas de Tomcat, Jetty, Netty, Weld, ArC, Yasson, Hibernate, RESTEasy. Toute dépendance runtime nouvelle doit être justifiée explicitement dans la PR.
2. JPMS strict
Chaque module a son module-info.java. exports minimaux. Pas d'`opens` non justifié. Pas de classpath. Pas d'`add-opens` au lancement. L’intégrité du graphe modulaire est validée par l’agent jpms-guardian du workspace.
3. Codegen statique au lieu de réflexion runtime
Toute construction qui serait ailleurs faite par réflexion ou proxy dynamique est ici générée à la compilation :
-
APT (Annotation Processor) — Vauban (graphe d’injection), Champollion (bindings JSON-B), Mansart (
*RepositoryImpl, métamodèle). -
Class-File API (JEP 484) — Vauban (interceptors), Mansart (proxy
Connection). -
Pas d’ASM, pas de Byte Buddy, pas de proxy JDK dynamique.
Bénéfice direct : compatible GraalVM native-image et Project Leyden CDS sans configuration de réflexion.