Implémentation de Drools pour la Gestion des Règles Métier

Contexte Industriel

Dans les environnements industriels aux logiques complexes, une architecture découplée utilisant un moteur de règles externe est recommandée. Drools, solution open-source d'IBM, permet cette séparation.

Bonnes Pratiques d'Ingénierie des Connaissances

  • À éviter :
    • Architecture monolithique
    • Fuites de responsabilités
  • Recommandé :
    • Découplage des resopnsabilités métier
    • Encapsulation des connaissances
    • Abstractions sémantiques

La séparation entre création et utilisation des règles permet aux consommateurs d'obtenir des conclusions sans détenir la logique conditionnelle sous-jacente.

Fonctionnalités Clés de Drools

  • Résolution des Conflits : Priorité via Salience ou LIFO
  • Modèle Événementiel : Mécanisme pour la programmation orientée aspect (AOP)
  • Formats de Fichiers : .drl, XML, XLS, CSV

Configuration Maven

<dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-api</artifactId>
  <version>7.36.0.Final</version>
</dependency>
<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-core</artifactId>
  <version>7.36.0.Final</version>
</dependency>

Structure de Projet

  1. kmodule.xml doit résider dans src/main/resources/META-INF
  2. Les règles doivent être dans src/main/resources, avec des chemins correspondant aux packages déclarés dans kmodule.xml

Exemple kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
  <kbase name="base_principale" packages="regles.defaut">
    <ksession name="session_par_defaut"/>
  </kbase>
</kmodule>

Exemple de Règle DRL

package regles.defaut;
dialect "mvel"
import com.example.Produit;

regle "remise_speciale"
quand
  article : Produit(prixAvant <= 500)
alors
  double prixFinal = article.getPrixAvant() * 0.50;
  article.setPrixReel(prixFinal);
  System.out.println(article.getNom() + " : " + prixFinal);
fin

Types de Sessions

  • Stateless : Aucune conservation d'état entre les invocations (validation, calculs)
  • Stateful : Maintient l'état pour les règles dépendantess de modifications

Contrôle d'Exécution

  • Salience : Priorité numérique des règles
  • Agenda Groups : Partitionnement logique avec setFocus()
  • Activation Groups : Une seule règle déclenchée par groupe

Requêtes et Événements

requete "clients_mineurs"
  client : Client(age < 18)
fin

Les requêtes live utilisent des listeners pour des mises à jour en temps réel.

Optimisations

  • Mode séquentiel pour les sessions stateless
  • Éviter les opérations lourdes dans les listeners

Étiquettes: Drools MoteurDeRègles Java KIE DRL

Publié le 18 juillet à 20h49