Drools - Rédaction de règles

Si vous voyez la règle par défaut qui est écrite dans le projet Hello World (Sample.drl), il y a beaucoup de mots-clés utilisés que nous allons expliquer maintenant.

Sample.drl

  • Package- Chaque règle commence par un nom de package. Le package agit comme un espace de noms pour les règles. Les noms de règle dans un package doivent être uniques. Les packages dans Rules sont similaires aux packages en Java.

  • Import statement- Quels que soient les faits sur lesquels vous souhaitez appliquer la règle, ces faits doivent être importés. Par exemple, com.sample.DroolsTest.Message; dans l'exemple ci-dessus.

  • Rule Definition- Il se compose du nom de la règle, de la condition et de la conséquence. Les mots-clés Drools sontrule, when, then, et end. Dans l'exemple ci-dessus, les noms de règle sont «Hello World» et «GoodBye». lewhen une partie est la condition dans les règles et le thenune partie est la conséquence. Dans la terminologie des règles, lewhen la partie est également appelée LHS (côté gauche) et le then partie comme le RHS (côté droit) de la règle.

Passons maintenant en revue les termes utilisés dans le fichier Java utilisé pour charger les Drools et exécuter les règles.

Base de connaissances

La base de connaissances est une interface qui gère un ensemble de règles, de processus et de types internes. Il est contenu dans le paquetorg.drools.KnowledgeBase. Dans Drools, ceux-ci sont communément appelésknowledge definitions ou knowledge. Les définitions de connaissances sont regroupées enknowledge packages. Les définitions de connaissances peuvent être ajoutées ou supprimées. Le but principal de la base de connaissances est de les stocker et de les réutiliser car leur création est coûteuse. La base de connaissances fournit des méthodes pour créer des sessions de connaissances.

Session de connaissances

La session de connaissances est extraite de la base de connaissances. C'est l'interface principale pour interagir avec le moteur Drools. La session de connaissances peut être de deux types -

  • Session de connaissances apatrides

  • Session de connaissances avec état

Session de connaissances apatrides

Stateless Knowledge Session est une session sans état qui constitue le cas d'utilisation le plus simple, n'utilisant pas d'inférence. Une session sans état peut être appelée comme une fonction, en lui passant des données et en recevant des résultats. Les exemples courants de session sans état incluent:

  • Validation

    • Cette personne est-elle admissible à une hypothèque?

  • Calculation

    • Calculez une prime hypothécaire.

  • Routing and Filtering

    • Filtrez les messages entrants, tels que les e-mails, dans des dossiers.

    • Envoyer des messages entrants vers une destination

Session de connaissances avec état

Les sessions avec état ont une durée de vie plus longue et permettent des changements itératifs au fil du temps. Certains cas d'utilisation courants des sessions avec état incluent:

  • Monitoring

    • Suivi et analyse boursière pour les achats semi-automatiques.

  • Diagnostics

    • Recherche de pannes, diagnostic médical

  • Logistics

    • Suivi des colis et approvisionnement en livraison

Générateur de connaissances

L'interface KnoledgeBuilder est responsable de la construction d'un KnowledgePackage à partir de définitions de connaissances (règles, processus, types). Il est contenu dans le paquetorg.drools.builder.KnowledgeBuilder. Les définitions des connaissances peuvent être dans différents formats. S'il y a des problèmes avec la construction, le KnowledgeBuilder signalera les erreurs via ces deux méthodes:hasErrors et getError.

Le diagramme suivant explique le processus

Dans l'exemple ci-dessus, comme nous prenons un exemple simple de session de connaissances sans état, nous avons inséré le fait dans la session, puis la méthode fireAllRules () est appelée et vous voyez la sortie.

Dans le cas d'une session de connaissance avec état, une fois les règles déclenchées, l'objet de session de connaissance avec état doit appeler la méthode dispose() pour libérer la session et éviter les fuites de mémoire.