|
Heisenberg est en |
Côté code applicatif, la migration depuis une implémentation MP FT (SmallRye) est triviale : Heisenberg consomme strictement les annotations standard org.eclipse.microprofile.faulttolerance.*. Aucun import propriétaire à remplacer. Les écarts portent sur la configuration, le packaging et le modèle de threading. Depuis Resilience4j (API non standard), la migration est plus structurante.
Depuis SmallRye Fault Tolerance
SmallRye Fault Tolerance est l’implémentation de référence chez Quarkus et certains serveurs Jakarta EE. Migration directe — Heisenberg vise la stricte conformance à la même spec.
| SmallRye Fault Tolerance | Heisenberg | Note |
|---|---|---|
Annotations |
Mêmes annotations |
Aucun changement de code applicatif. |
Clés MP Config |
Mêmes clés |
Précédence méthode > classe > globale identique. |
Pool de threads plateforme ( |
Virtual threads — pas de pool plateforme |
Pas de propriété équivalente. Le nombre de threads s’ajuste seul. |
Stratégies non-spec (SmallRye |
Non implémentées (hors spec) |
Garder uniquement les annotations MP FT 4.1 standard. |
Dépendances : SmallRye Common, Jandex, SmallRye Config |
Aucune (sauf API Jakarta + MicroProfile) |
Empreinte de classpath réduite. Compatibilité jlink immédiate. |
Depuis Resilience4j
Resilience4j est une bibliothèque indépendante (sans CDI obligatoire). La migration demande un remplacement d’annotations et de configuration.
| Resilience4j | Heisenberg | Note |
|---|---|---|
|
|
Pas de notion de "registry" nommé — la config est par classe/méthode. |
|
|
Sémantique équivalente. |
|
|
Spec MP : fenêtre request volume (compte par appels), pas de fenêtre temporelle. |
|
|
|
|
Non implémenté (hors spec MP FT 4.1) |
Garder Resilience4j en parallèle pour ce besoin, ou implémenter côté gateway. |
|
|
Aucun pont fonctionnel — utiliser des records purs. |
Différence de modèle : virtual threads vs pool plateforme
C’est le point d’attention principal lors d’une migration depuis SmallRye ou Resilience4j.
| Aspect | SmallRye / Resilience4j | Heisenberg |
|---|---|---|
Exécution |
|
|
Coût mémoire par tentative |
~512 Ko (stack OS) |
~5 Ko (stack frame virtuelle) |
Saturation |
File |
Le |
Pinning |
Pas pertinent |
|
|
Si du code applicatif utilise |
Deltas de configuration
| SmallRye | Heisenberg |
|---|---|
|
Pas d’équivalent — virtual threads à la demande. |
|
Pas d’équivalent. |
|
Même clé sous le préfixe |
|
Même clé sous le préfixe |
Checklist de portage
-
Déclarer
heisenberg-cdi-vaubanau lieu desmallrye-fault-toleranceouresilience4j-*. -
Vérifier que les annotations applicatives sont issues de
org.eclipse.microprofile.faulttolerance.. Remplacer les annotations propriétaires (io.smallrye.faulttolerance.api.,io.github.resilience4j.*). -
Renommer les clés MP Config si nécessaire —
fault-tolerance/<FQCN>/<méthode>/<Annotation>/<param>est la forme canonique. -
Supprimer les propriétés liées aux pools de threads plateforme — sans effet.
-
Auditer les méthodes
@Asynchronouspoursynchronized/ThreadLocal— basculer versReentrantLock/ScopedValuequand possible. -
Lancer
./mvnw testpuis./run-official-tck-mp-fault-tolerance-4.1.sh(voir TCK). -
Comparer un appel typique avant/après — taux de retry, ouverture du circuit, latence p99.
Pour aller plus loin
-
Concepts — modèle MP FT, ordre canonique.
-
Fonctionnement interne — virtual threads, StateRegistry, observabilité.
-
BUG.md — pièges connus.