Camunda 8 – Service Task avec Java

 Dans Camunda 8, les Service Tasks ne sont plus exécutées de manière embarquée comme dans Camunda 7. Elles sont traitées par des Job Workers externes, ce qui permet une architecture cloud-native, scalable et découplée.

Avec Spring Boot, l’annotation @JobWorker est la manière la plus simple et la plus propre d’implémenter un Service Task en Java.


🔹 1. Principe de fonctionnement

Dans Camunda 8 :

  • Un Service Task BPMN crée un Job

  • Le Job est identifié par un type

  • Un Job Worker Java s’abonne à ce type

  • Le worker exécute la logique métier et met à jour les variables

👉 Le type du Service Task dans le BPMN doit correspondre exactement au type défini dans @JobWorker.


🔹 2. Configuration du Service Task dans BPMN

Dans Camunda Modeler :

  1. Ajouter un Service Task

  2. Implementation : Job Worker

  3. Type : payment-worker (exemple)

  4. (Optionnel) Retries : 3

📌 Ce type sera utilisé côté Java.


🔹 3. Dépendance Maven (Spring Boot)

<dependency> <groupId>io.camunda</groupId> <artifactId>spring-boot-starter-camunda</artifactId> </dependency>

Cette dépendance permet :

  • la connexion au moteur Zeebe

  • l’utilisation de @JobWorker


🔹 4. Configuration (application.yaml – Self-Managed)

camunda: client: mode: self-managed zeebe: gateway-address: 127.0.0.1:26500 auth: enabled: false

👉 Pour Camunda 8 SaaS, la configuration OAuth est différente.


🔹 5. Implémentation Java avec @JobWorker

Exemple complet : lecture et mise à jour des variables

package com.example.worker; import io.camunda.zeebe.client.api.response.ActivatedJob; import io.camunda.zeebe.spring.client.annotation.JobWorker; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @Component public class PaymentWorker { @JobWorker(type = "payment-worker", autoComplete = true) public Map<String, Object> handle(final ActivatedJob job) { Map<String, Object> vars = job.getVariablesAsMap(); String orderId = (String) vars.get("orderId"); Double amount = vars.get("amount") == null ? null : ((Number) vars.get("amount")).doubleValue(); // Logique métier (exemple) String transactionId = "TXN-" + System.currentTimeMillis(); Map<String, Object> output = new HashMap<>(); output.put("transactionId", transactionId); output.put("paymentStatus", "SUCCESS"); output.put("orderId", orderId); output.put("amount", amount); return output; } }

✅ Avec autoComplete = true, le job est automatiquement complété si aucune exception n’est levée.


🔹 6. Gestion des erreurs et des retries

Option 1 : Exception → Retry automatique

if (amount == null) { throw new RuntimeException("Montant manquant"); }

Lorsque les retries atteignent zéro :

  • un Incident est créé

  • visible dans Operate


Option 2 : Contrôle manuel (autoComplete = false)

@JobWorker(type = "payment-worker", autoComplete = false) public void handle(ActivatedJob job) { try { Map<String, Object> out = Map.of("paymentStatus", "SUCCESS"); job.getClient().newCompleteCommand(job.getKey()) .variables(out) .send() .join(); } catch (Exception e) { job.getClient().newFailCommand(job.getKey()) .retries(job.getRetries() - 1) .errorMessage(e.getMessage()) .send() .join(); } }

🔹 7. Bonnes pratiques Camunda 8

  • Utiliser des variables JSON simples

  • Éviter les objets Java sérialisés

  • Vérifier la cohérence des noms de variables

  • Toujours tester avec Operate

  • Surveiller les incidents en production


🔹 8. Problèmes fréquents

❌ Le worker ne reçoit pas de job :

  • Type BPMN ≠ type @JobWorker

  • Mauvaise adresse du gateway

  • Application Spring Boot non démarrée

  • Variables absentes ou mal typées


✅ Conclusion

Dans Camunda 8, l’exécution des Service Tasks via @JobWorker apporte :

  • une meilleure scalabilité

  • une architecture moderne

  • un découplage clair entre processus et logique métier


💼 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, CMS, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM), DMN/Drools.

📧 Contact: ishikhanirankari@gmail.com | info@realtechnologiesindia.com

🌐 Website: IT Trainings | Digital lectern | Digital rostrum | Digital metal podium     


Comments

Popular posts from this blog

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained

jBPM Installation Guide: Step by Step Setup