Heisenberg est l’implémentation MicroProfile Fault Tolerance 4.1 de l’écosystème Vidocq. Elle applique les politiques @Retry, @Timeout, @CircuitBreaker, @Bulkhead, @Fallback et @Asynchronous aux beans CDI au travers d’un unique intercepteur, branchée sur Vauban pour le container et sur Ravel pour la configuration. Objectif : conformance 100 % au TCK MicroProfile Fault Tolerance 4.1 (actuellement 463/463), zéro dépendance externe au-delà des specs, JPMS strict, prête pour jlink.
Origine du nom
Werner Heisenberg (1901-1976), physicien allemand. Formula en 1927 le principe d’incertitude, pierre angulaire de la mécanique quantique : la position et la quantité de mouvement d’une particule ne peuvent pas être mesurées simultanément avec une précision arbitraire — Δp · Δx ≥ ℏ/2. Prix Nobel de physique 1932 « pour la création de la mécanique quantique ». Voir la fiche Wikipédia.
Heisenberg a posé que l’incertitude est intrinsèque, pas un défaut de l’instrument. Le runtime Heisenberg encapsule l’incertitude inhérente aux appels réseau et aux services distants — latence variable, échecs transitoires, surcharge — et y répond avec des politiques formellement composables, ordonnées comme des opérateurs non-commutatifs.
| Heisenberg, le physicien | Heisenberg, le runtime |
|---|---|
Principe d’incertitude |
L’appel réseau est intrinsèquement incertain — la réussite n’est pas déterminée. |
Matrices observables non-commutatives |
Politiques non-commutatives : |
Mécanique matricielle (Göttingen, 1925) |
Composition formelle des aspects — chaîne d’intercepteurs ordonnée par la spec §2.5. |
Inégalité |
Borne intrinsèque latence × débit (Little’s Law) — un |
Effondrement du paquet d’ondes |
|
États propres et observables compatibles |
Politiques compatibles, composables dans un ordre canonique unique. |
En un coup d’œil
Spec implémentée |
MicroProfile Fault Tolerance 4.1 |
Dépôt |
|
Java |
25 (LTS) |
Modules JPMS |
|
Packages publics |
|
Dépendances runtime |
|
Prête pour jlink |
✅ — chaque sous-module a son |
TCK MP FT 4.1 |
✅ 463 / 463 — voir état détaillé |
Trois traits identitaires
-
Zéro librairie tierce d’implémentation — seules les API Jakarta EE et MicroProfile spécifiées sont compilées. Pas de SmallRye Fault Tolerance, pas de Hystrix, pas de Resilience4j. Les automates (retry, circuit breaker, bulkhead) sont écrits à la main dans
heisenberg-core. -
Virtual threads natifs pour
@Asynchronouset@Timeout—Thread.ofVirtual()+join(Duration)bornent chaque tentative ; aucun pool de threads plateforme n’est créé. Pas desynchronized, pas deThreadLocal—ReentrantLock,Semaphore,LongAdder,ConcurrentHashMapetScopedValuesont préférés. -
Config Ravel + BCE Vauban — toutes les clés
fault-tolerance/…sont résolues via Ravel (MicroProfile Config 3.1) ; l’intercepteur unique est enregistré par une Build Compatible Extension Vauban, qui scanne et indexe les annotations au démarrage.
Positionnement dans l’écosystème
L’ordre d’enveloppement de la chaîne suit la spec MP FT 4.1 §2.5 — @Fallback est l’enveloppe la plus externe, la méthode cible est au coeur. Cassini et tout client HTTP applicatif bénéficient ainsi de la tolérance aux pannes sans modification de code. Humboldt (OpenTelemetry) et l’implémentation MP Metrics Dirac peuvent récolter les métriques §9 et §10 ; le script run-tck-no-observability.sh les coupe pour valider que la tolérance fonctionne sans aucune dépendance d’observabilité au classpath.
Ressources rapides
-
Démarrage rapide — première méthode protégée, première chaîne
@Retry + @CircuitBreaker + @Fallback. -
Concepts — annotations, ordre de composition, états du circuit breaker.
-
Cas d’usage — clients REST robustes,
@Asynchronous,FallbackHandler, surcharges MP Config. -
Référence — artefacts, modules JPMS, annotations, clés
fault-tolerance/*. -
Fonctionnement interne — moteurs purs,
StateRegistry, virtual threads. -
TCK — exécution, statut, mode
no-observability. -
Migration — depuis SmallRye Fault Tolerance ou Resilience4j.
Suivant : Démarrage rapide.