Dans le précedent post sur ce blog nous avons vu rapidement comment créer sa définition et modelisation des règle d’un KYC basé sur le standard DMN. Nous allons voir comment faire tourner cet exemple et éxecuter sur un moteur implémentant le standard DMN.

Éxecution d’un moteur KYC en DMN avec Kogito

Introdution Kogito

Faisons un focus rapide sur Kogito. Kogito est un moteur de règle orienté cloud. Ce moteur de règle reprend en grande partie tout le coeur et le developpement de Drools et jBPM mais propose des fonctionnalités purement Cloud notamment le fait qu’il est prévu d’être éxecuter dans un container de type OCI / Docker et deployé sur un cluster Cloud K8S / Openshift par exemple.

Business Domain first approach

Un apport de Kogito au moteur Drools, c’est qu’il génére automatiquement l’API REST des règles DMN. Dans notre exemple nous allons copier/coller le fichier DMN KYC du post précédent et le faire tourner tel quel avec Kogito. Kogito va proposer une API KYC acceptant le model des Input. Il sera donc possible de faire un appel REST / HTTP avec des données métiers sans tout le liant technique que nous aurions pu avoir avec l’implémentation purement Drools. Nous allons avoir donc une API orientée métier dépourvue de spécificité technique.

Execution du projet

Afin de pourvoir éxecuter le modele de règle KYC dans moteur Kogito il va falloir cloner le repository disponible sur Github.

Compilation

> git clone   --depth 1  --branch blog  https://github.com/gautric/dmn-knative.git
> cd dmn-knative

Execution

Nous allons copier le fichier KYC.dmn que nous avons fait dans le post précédent.


> curl -L https://raw.githubusercontent.com/gautric/dmn-knative/master/src/main/resources/KYC.dmn \
-o src/main/resources/KYC.dmn 2> /dev/null 

> mvn clean package quarkus:dev 

... OMIT ...

__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2020-06-05 17:22:27,522 INFO  [io.quarkus] (main) dmn-knative 1.0-SNAPSHOT (powered by Quarkus 1.3.2.Final) started in 3.600s. Listening on: http://0.0.0.0:8080
2020-06-05 17:22:27,525 INFO  [io.quarkus] (main) Profile dev activated. Live Coding activated.
2020-06-05 17:22:27,526 INFO  [io.quarkus] (main) Installed features: [cdi, kogito, resteasy, resteasy-jackson, smallrye-openapi, swagger-ui]

Swagger

Dès que vous avez correctment la sortie standard précédente, il est possible d’accéder à l’URL suivante : http://localhost:8080/

Vous allez atterrir sur la page swagger du moteur Kogito, une API KYC est disponible et peut être utilisée directement via cette page ou bien un appel CURL.

Kogito DMN

L’appel CURL

> export DMN_URL=http://localhost:8080

> curl -X POST -H "Content-Type: application/json"  ${DMN_URL}/KYC  --data-binary @- << EOF  2> /dev/null | jq
{
  "Amount": 250000,
  "PEP": false,
  "Fiscal Residency": "JP"
}
EOF

Attention la commande précédente utilise l’outil jq

Vous devriez obtenir le résultat suivant :

{
  "Amount Rule": "MEDIUM",
  "KYC": 25,
  "Fiscal Residency Rule": "LOW",
  "Amount": 250000,
  "PEP Rule": "LOW",
  "PEP": false,
  "Level": "function Level( input )",
  "Fiscal Residency": "JP"
}

Nous voyons qu’avec Kogito le détail de tous les calculs intermédiaires des Decision est disponible, jusqu’au calcul final au niveau de la valeur KYC ici dans notre exemple ci-dessus. Cela est intéressant à la fois pour du debugging ou bien pour une problématique d’auditabilité du moteur.

Exemples

Des exemples sont disponibles dans le répertoire data du projet que l’on vient de cloner.

Conclusion

Avec cette exemple, nous voyons que la complexité technique d’utiliser un moteur DMN est très faible via Kogito qui propose directement une API métier. Il n’y a plus d’excuse pour ne pas utiliser à minima le standard DMN dans vos applications. Le projet Kogito est encore récent mais rien ne vous empeche de proposer des améliorations et/ou suggestions.