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.