Conception d'architecture – Moteur de workflow Camunda avec Spring Boot

Introduction au moteur de workflows Camunda

La gestion des processus métier (BPM) est au cœur de nombreuses applications d'entreprise. Camunda s'impose comme une solution légère, puissante et bien intégrée à l'écosystème Spring pour orchestrer des workflows complexes. Cet article présente l'intégration de Camunda dans une application Spring Boot, depuis la modélisation jusqu'à l'exécution des processus.

Outil de modélisation : Camunda Modeler

Camunda Modeler est un outil graphique permettant de concevoir des diagrammes BPMN 2.0. Il est accessible aux développeurs comme aux métiers, favorisant la collaboration. Le fichier généré (.bpmn) peut être directement utilisé dans le projet comme ressource déployable.

  • Téléchargement disponible sur le site officiel
  • Intégration possible via plugin dans IntelliJ IDEA ou utilisation autonome (exécutable)

Gestion des assignations de tâches

Dans les tâches utilisateur (User Tasks), l'attribut assignee définit qui doit exécuter la tâche. Plusieusr méthodes d'assignation sont possibles :

  • Valeur statique : jdoe
  • Expression UEL (Value) : ${employeeId} — lit une variable du contexte d’exécution
  • Expression UEL (Méthode) : ${userService.findApprover(department)} — invoque une méthode d’un bean Spring, en passant des variables de processus comme paramètres

Configuration de base dans Spring Boot

Voici une configuration minimale dans application.yml pour activer Camunda avec une base MySQL :

server:
  port: 3001

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/growthsouldb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: growthsoul
    password: admin123

camunda:
  bpm:
    admin-user:
      id: admin
      password: admin123
      first-name: Admin
    filter:
      create: All tasks
    auto-deployment-enabled: false

Cette configuration active un utilisateur administrateur et désactive le déploeiment automatique pour un contrôle explicite.

Déploiement manuel d’un procesuss BPMN

Le fichier holiday.bpmn doit être placé dans src/main/resources/bpmn/. Un composant Spring peut alors charger et déployer ce fichier au démarrage :

@Component
public class DeploymentConfig implements ApplicationRunner {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Override
    public void run(ApplicationArguments args) {
        deployProcess();
        queryLatestDefinition();
    }

    private void deployProcess() {
        Deployment deployment = repositoryService.createDeployment()
            .addClasspathResource("bpmn/holiday.bpmn")
            .name("Demande de congés - v1")
            .deploy();

        if (deployment != null) {
            System.out.println("ID du déploiement : " + deployment.getId());
            System.out.println("Nom du déploiement : " + deployment.getName());
        }
    }

    private void queryLatestDefinition() {
        ProcessDefinition definition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionKey("Process_0rldteu")
            .active()
            .latestVersion()
            .singleResult();

        if (definition != null) {
            System.out.println("Dernière version du processus : " + definition.getId());
        }
    }
}

Démarrage d’une instance de processus

Pour lancer un processus, on utilise la clé du processus (définie dans le BPMN) et on peut passer des variables initiales :

private void startProcessInstance() {
    Map<String, Object> variables = new HashMap<>();
    variables.put("employee", "zhangsan");
    variables.put("days", 5);

    ProcessInstance instance = runtimeService.startProcessInstanceByKey(
        "Process_0rldteu", variables);

    System.out.println("Instance créée avec ID : " + instance.getId());
}

Les variables sont ensuite accessibles dans les tâches suivantes via des expressions UEL, par exemple ${employee}.

Interface d’administration Camunda

Une fois l’application démarrée, l’interface web de gestion est accessible à l’adresse http://localhost:3001/camunda. Elle permet de surveiller les instances, gérer les tâches et inspecter les logs.

Étiquettes: camunda spring-boot BPMN workflow-engine Java

Publié le 4 septembre à 20h53