🇫🇷 Événements Intermédiaires dans jBPM – Guide Complet avec Exemples

 Les événements intermédiaires dans jBPM (Business Process Management Suite de Red Hat / KIE) sont des éléments BPMN2 utilisés entre le début et la fin d’un processus.

Ils permettent d’attendre, de capturer un message, de déclencher un signal, de gérer une erreur, d’exécuter une compensation, ou d’activer un flux basé sur une condition métier.

Pour construire des workflows robustes et réels dans jBPM, comprendre les événements intermédiaires est indispensable.


🌟 Qu’est-ce qu’un Événement Intermédiaire ?

Un événement intermédiaire peut :

Attendre un événement (Catch)
Déclencher un événement (Throw)

Ils peuvent être placés :

  • Sur le chemin du flux,

  • Attachés à une activité (boundary events),

  • Ou en isolation, selon le besoin.


1️⃣ Événement Intermédiaire de Minuteur (Timer)

Permet d’imposer un délai ou d’exécuter une action programmée.

📌 Exemples :

  • Attendre 48 heures pour recevoir des documents

  • Exécuter une vérification journalière

  • Gérer une SLA

Exemple XML

<intermediateCatchEvent id="Attente2Jours"> <timerEventDefinition> <timeDuration>P2D</timeDuration> </timerEventDefinition> </intermediateCatchEvent>

2️⃣ Événement Intermédiaire de Message (Catch)

Le processus attend un message externe.
Dans jBPM, vous pouvez utiliser un signalEvent, un MessageRef, ou un CorrelationKey.

📌 Exemples :

  • Attendre une réponse d’un microservice

  • Attendre une validation externe

  • Attendre une confirmation de paiement

XML

<intermediateCatchEvent id="AttenteMessage"> <messageEventDefinition messageRef="MsgPaiement"/> </intermediateCatchEvent>

Envoi depuis Java

ksession.signalEvent("MsgPaiement", payload, processInstanceId);

3️⃣ Événement Intermédiaire d’Envoi de Message (Throw)

Permet d’envoyer un message à un autre processus ou système.

📌 Exemples :

  • Lancer un workflow secondaire

  • Notifier un service externe

  • Déclencher une action asynchrone


4️⃣ Événements Intermédiaires de Signal (Catch & Throw)

Un signal est diffusé globalement.
Tous les processus actifs écoutant ce signal réagissent.

📌 Exemples :

  • PaiementEffectue

  • FraudeDetectee

  • DocumentUpload

Catch

<intermediateCatchEvent id="SignalAttente"> <signalEventDefinition signalRef="PaiementEffectue"/> </intermediateCatchEvent>

Throw

<intermediateThrowEvent id="EnvoyerSignal"> <signalEventDefinition signalRef="PaiementEffectue"/> </intermediateThrowEvent>

Depuis Java

ksession.signalEvent("PaiementEffectue", data);

5️⃣ Événement Intermédiaire d’Erreur (Error Catch Event)

Permet de gérer des erreurs générées par :

  • un Service Task,

  • un Script Task,

  • un WorkItemHandler personnalisé.

📌 Exemples :

  • API en échec

  • Problème de transaction BD

  • Données invalides

XML

<intermediateCatchEvent id="AttrapeErreur"> <errorEventDefinition errorRef="ERREUR_API"/> </intermediateCatchEvent>

Throw côté Java

throw new WorkItemHandlerException("ERREUR_API", "Service indisponible");

6️⃣ Événements d’Escalade (Throw & Catch)

Une escalade n’arrête pas le processus.
Elle signale un problème important mais non fatal.

📌 Exemples :

  • SLA presque dépassée

  • Intervention managériale nécessaire

  • Alerte métier

XML (Throw)

<intermediateThrowEvent id="EscaladeSLA"> <escalationEventDefinition escalationRef="SLA_WARNING"/> </intermediateThrowEvent>

7️⃣ Événement Intermédiaire de Compensation

Permet d’annuler ou de revenir sur une action précédente.

📌 Exemples :

  • Annuler une réservation

  • Rembourser un paiement

  • Libérer du stock

XML

<intermediateThrowEvent id="DeclencheCompensation"> <compensateEventDefinition activityRef="ReserverHotel"/> </intermediateThrowEvent>

8️⃣ Événement Intermédiaire Conditionnel

Déclenché lorsque une condition devient vraie.

📌 Exemple :

  • Lorsque montant > 50000, activer un chemin spécifique.

XML

<intermediateCatchEvent id="EvtConditionnel"> <conditionalEventDefinition> <condition xsi:type="tFormalExpression"> #{montant > 50000} </condition> </conditionalEventDefinition> </intermediateCatchEvent>

📊 Tableau Comparatif



Type


Catch


Throw


Utilisation
TimerDélai / planification
MessageIntégrations systèmes
SignalDiffusion globale
ErreurGestion d’exception
EscaladeAlerte non fatale
CompensationAnnulation / rollback
ConditionnelDéclenchement dynamique

🏦 Exemple Réel : Processus de Réclamation Assurance

  1. Réception de la réclamation

  2. Minuteur de 24h pour documents manquants

  3. Message de validation reçu

  4. Si incohérence → Erreur → révision manuelle

  5. SLA proche → Escalade

  6. Fraude détectée → Signal pour audit

  7. Réclamation rejetée → Compensation (remboursement)

  8. Finalisation du dossier

🔧 Bonnes Pratiques jBPM

✔ Utiliser message events pour les microservices
✔ Réserver les signal events pour des diffusions globales
✔ Utiliser error events pour remplacer les XOR compliqués
✔ Exploiter timer events pour SLA et rappels
✔ Garder les compensations simples et idempotentes
✔ Éviter de combiner message + signal + erreur dans le même flux
✔ Documenter correctement le CorrelationKey si nécessaire


🎯 Conclusion

Les événements intermédiaires dans jBPM rendent vos processus:

✔ plus intelligents
✔ plus stables
✔ plus flexibles
✔ parfaitement adaptés aux environnements d’entreprise

Maîtriser ces événements améliore la qualité et la résilience de vos workflows.

💼 Support professionnel disponible

Si vous rencontrez des problèmes sur des projets réels liés au développement backend d’entreprise ou à l’automatisation des workflows, je propose des services de conseil payants, de débogage en production, de support projet et de formations ciblées.

Les technologies couvertes incluent Java, Spring Boot, PL/SQL, Azure, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM).

🌐 WebsiteIT Trainings | Digital lectern | Digital rostrum | Digital metal podium 



Comments

Popular posts from this blog

jBPM Installation Guide: Step by Step Setup

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained