SlideShare una empresa de Scribd logo
1 de 42
Prez Flash :: JBoss Drools Règles Métiers Denis CHALLAS
Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Pattern Spécification Inférence : description du problème  Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Les langages De scripts (EL : Expression Language)  EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Parser : Antlr Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
Pourquoi recourir à un moteur de règles ?
Approche classique Approche classique : impérative le développeur écrit les règles métiers qui lui sont transmises par le fonctionnel  Image : http://blog.piaction.com/2009/11/gestion-des-regles-metiers-avec-drools-5/
Approche avec un moteur de règles : déclarative le fonctionnel peut écrire ses règles Web  Excel Domain Specific Language Image : http://blog.piaction.com/2009/11/gestion-des-regles-metiers-avec-drools-5/
Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Pattern Spécification Inférence : description du problème  Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Parser : Antlr Les langages De scripts (EL : Expression Language)  EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
Programmation logique SI PREMISSE ALORS CONCLUSION Prémisse de la règle  Conditions d’application de la règle  Pour déclencher Vérification des attributs en prémisse Conclusions  Actionsà envisager Modification du fait, souvent l’ajout de nouveaux faits Si la règle est déclenchée Affecter des valeurs à des attributs Exemple SI voiture_couleur = rouge ET voiture_marque = Ferrari ALORS conducteur = heureux Fait ( ensemble d’attributs) : voiture_couleur, voiture_marque et conducteur  Valeur : rouge, Ferrari et heureux La résolution est acquise lorsque l’ensemble des faits n’est plus dans le moteur Différentes variantes existent :  planner : calcul d’un minimum de contraintes levées
Histoire d’inférences Moteur de règles est un système capable  de définir des règles  (= traitement) et de les appliquer à des faits ( = données) Moteur d’Inférence  opération mentale, ou jugement, qui consiste à tirer une conclusion sur des propositions tenues pour vraies (prémisses) à partir de règles de base en concluant à la vérité   3 types d'inférence :  la déduction : utiliser dans la programmation logique l'induction : loi générale à partir d’observations l'abduction :  hypothèse explicative d’une observation formalisés par Peirce en 1903 Charles Sanders Peirce Philosophe américain 1839-1914
Programmation  logique Moteur d’inférence règles et faits injectés cherche les règles applicables aux faits (pattern matching) optimise l’exécution de règles en les agençant de la manière la plus efficace possible (agenda). Utile Logique nécessitant un nombre important de « if » Trouve une solution basée sur un nombre important de règles Image : http://docs.jboss.org/drools/release/5.2.0.CR1/drools-expert-docs/html/ch01.html
 PROgrammationLOGique Historique né dans les années 1960  programme de recherche américain sur le GPS (General ProblemSolving)  Prolog II — inventé par Alain Colmerauer à Marseille dans les années 1970 Le moteur d’inférence détermine les étapes de la résolution des problèmes propositionnelle par chaînage avant, arrière, mixte En Prolog : chaînage arrière 	parent(paul,jean). parent(jean,anne). parent(anne,marie).  	homme(paul). homme(jean).  pere(X,Y) :- parent(X,Y), homme(X).  grand_pere(X,Y) :- pere(X,Z), parent(Z,Y).
Chaînage “arrière” Chaînage “arrière” ou back-tracking Faits : éléments directement vérifiables parent(paul, jean). parent(jean, jacques). Règles : prémises basés sur des faits ou autres règles anc(X,Y):-parent(X,Y). anc(X,Y) :- parent(X,Z), anc(Z,Y).
Chaînage “arrière” En pseudo langage Fait 	 oiseau(Tweety) 	 	“Tweety est un oiseau” Règle          (∀ x) oiseau(x) ⇒ vole(x) 	“Tous les oiseaux volent” Est-ce que vole(Tweety) 	Oui
Chaînage “avant” Algorithme de RETE 1974 : Dr Charles L. Forgy de l'Université Carnegie Mellon,  publication de 1982 Algorithme de filtrage par motif Evite d’exécuter toutes les prémisses de toutes les réglés Utiliser par de nombreux systèmes experts tels que Clips, Jess, JBoss Rules, Soar RETE : Nom commun Filet, rets, lacs, toile d’araignée. ,[object Object],filet de pêcheur, épervier. ,[object Object],l'oiseau évite les filets qui sont trop visibles. Piège. ,[object Object],qui se servent du rôle des procès comme filet pour s'emparer du bien d'autrui (= qui savent soustraire fort habilement le bien d'autrui). ,[object Object],tomber dans mon piège.
Algorithme RETE Algorithme de RETE-OO : chaînage « avant » Optimisation  / Performance Image : https://oxygen.informatik.tu-cottbus.de/RealRules/?q=node/48
Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Inférence : description du problème  Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Les langages Pattern « Spécification » De scripts (EL : Expression Language)  EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Parser : Antlr Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
Programmation  logique Pattern « Spécification » Permet de décrire les règles indépendamment des données Permet de ré-utiliser les règles Pas d’outil supplémentaire Facile à mettre en œuvre Adaptable dans tous les langages OO Par d’apprentissage d’un outil Ne contient pas de moteur d’inférence Pas de gestion logique, ni d’optimisation Demande d’un développement spécifique pour exécuter ces règles
Expression Language EL : Expression Language langage de script permettant l'accès (get/set) à des composants Java (les JavaBeans)  http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html Exemple JSP 2 ${unBean.unChamp} ${customer.age + 20} le nom est ${unBean.nom} et l'age est ${unBean.age} Exemple ${MonObjet.maPropriete != null} OGNL : Object-Graph Navigation Language Utiliser par des framework de templating, … Tapestry, Spring Web Flow, MyBatis Et encore Jakarta JXPath, Jexel, Java Expression Language (JEXL), JUEL, JEval
MVEL MVFLEX Expression Language Langage basé sur Java Orienté utilisateur vs Developpeur java Expose un model typé (java) et dynamique Exemple de modification de deux variables modify ( m ) {message = "Goodbye cruel world",status = Message.GOODBYE };
DSL Exemples de DSL ,[object Object]
Fichiers de configuration
Langages dédiés de polices d'assurance vie,  de simulation de combat ,  de facturationhttp://martinfowler.com/bliki/DomainSpecificLanguage.html
DSL : exemple saisie de formules (1/3) Les formules de révision sont administrables Dans le cadre d’un projet pour un de ses clients, Klee a développé un assistant permettant de saisir des formules comptables (dite de révision).
DSL : exemple saisie de formules (2/3) Un grand nombre de formules sont administrables
DSL : exemple saisie de formules (3/3) ANother Tool for Language Recognition Analyseur lexical  et parser Permet de décrire une grammaire Générer ensuite une librairie : .Net, Java Permet de parser un DSL particulier  Ici fonction mathématique spécifique au client Référence http://www.antlr.org/
DSL Un DSL peut être une simple traduction d’un langage fonctionnel en un langage technique The product "{product}" gains focus more than {times} in {minutes} minutes 	Equivalent $list: List( $n: size == {times} ) from accumulate( $visit: ProductFocusGainedEvent(product.category == "{product}")over window:time({minutes}m) from entry-point "visit-product-stream",collectList($visit))
DSL Exemple de l’éditeur DSL de Drools
Les langages de scripts Langages généralistes Autres types Langages de script  : (abus de langage) programmation interprétée, statique  Permet de manipuler les fonctionnalités d'un système informatique  Evite la phase de compilation Les évolutions des langages  : quasi langage  de programmation Ajout Boucle, opérateur  BASIC, PHP, Lisp, JavaScript Langages dynamiques  la compilation exécutée au runtime évaluation et la modification du programme   Groovy : précompile ou à la volée, surcharge opérateur, typage dynamique list = ["Rod", "Carlos", "Chris"]  shorts = list.findAll { it.size() <= 4 }  shorts.each { printlnit }
EL, LANGAGE, DSL Gestion d’un nombre  important de règles nécessite Utiliser des pattern(s) de gestion des règles pour l’optimisation Evaluer toutes les règles brutalement dégrade les performances Limiter la traduction de règle métier dans un langage informatique Coût de développement, Coût de maintenance Proposer un langage proche du fonctionnel Utilisation de DSL Compilation à l’exécution  Image : http://parisjug.org/xwiki/bin/download/Meeting/20101109/PresentationBRMSGenigraphJUGParis20101109.pdf
Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Pattern Spécification Inférence : description du problème  Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Parser : Antlr Les langages De scripts (EL : Expression Language)  EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
Moteurs de règles
Drools Expert – moteur de règles : ce module va exécuter les règles modélisées Contient l’implémentation du moteur  algorithme de RETE La gestion des règles  Langage MVEL Permet de lancer le moteur en java À partir de fichier  DRL : liste des règles DSL : contient le langage métier si utiliser DSLR : liste des règles en langage DSL
Développement avec Drools Développement sous Eclipse Editeur de règles Débogage de règles Monitoring du moteur Démonstration live (Voir écran suivant) Règle dynamique: par re-charchement du package Règle écrite en DSL Editeur succin proposé dans la demo
Drools Expert Démonstration  smart-content-selection POC : http://salaboy.wordpress.com/2011/04/01/smart-content-selection-poc-drools-5-jbpm5/
Drools Guvnor  Guvnor – interface d’administration Web (Business Rules Management System)
Drools Guvnor Guvnor Gère les règles suivant différents environnements Avec une interface graphique Se repose sur Drools Expert Hiérarchisation des règles Qui peut utiliser Guvnor Expert fonctionnel Expert ou administrateurs de règles Développeurs Quand utiliser Guvnor Gérer des versions et des déploiements Ne pas appeler les développeurs Non lié au déploiement du cœur applicatif
Drools Planner DroolsPlanner Moteur de planification automatique   grâce à la définition de contraintes  solver calcule et propose des solutions
Drools Planner Exemple : N-reines Il s’agit de mettre n reines sur un échiquier de taille n × n sans qu’aucune reine ne soit en prise (4 < n <1000000) Résolution par programme déterministe récursif Je place une reine , j’avance d’une colonne  => blocage à partir de n = 20  En optimisant, en cas d’erreur je reviens et choisi un autre chemin  => blocage à partir de n = 100, voir 5000 avec autres optims
Drools Planner Principe utilisé  Engendrer une permutation aléatoire (yi) des nombres de 1 à n. les couples (i, yi) représentent les positions des reines. On calcule le nombre de conflits. Si ce nombre est 0 alors c’est fini On choisit 2 reines en conflit. Si en permutant ces deux reines on diminue le nombre de conflits, alors on permute ces reines. Si on ne peut plus diminuer le nombre de conflits, on recommence tout. (1) ,[object Object],[object Object]
Démonstration Enquête sur des lignes de transports Vue sous eclipse Vue du réseau RETE sous eclipse
Drools Flow jBPM/ Flow – Moteur de workflow Les règles peuvent être écrite en MVEL (ou java) Le moteur d’inférence est celui de Drools
Drools Fusion Fusion – Gestion des événements Centré sur le timing des événements Cas d’utilisation Bourse : trading Tarif téléphonique Détection de fraude … Algorithme CEP Complex Event Processing système d’évènement proche de CEP avec la possibilité de gérer des évènement changeant dans le temps.
Microsoft                                    . Windows Workflow Foundation Rules Engine Propose un moteur intégré dans la plateforme .Net  Un moteur de workflow Un moteur de règles Les outils d’édition avec Visual Studio

Más contenido relacionado

La actualidad más candente

Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
Armando Daniel
 

La actualidad más candente (20)

Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
 
Logica programacao python-slides
Logica programacao python-slidesLogica programacao python-slides
Logica programacao python-slides
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
 
La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
Apostila C ANSI
Apostila C ANSIApostila C ANSI
Apostila C ANSI
 
系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
系統程式 -- 第 8 章
系統程式 -- 第 8 章系統程式 -- 第 8 章
系統程式 -- 第 8 章
 
Kotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is comingKotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is coming
 
TDOH x 台科 pwn課程
TDOH x 台科 pwn課程TDOH x 台科 pwn課程
TDOH x 台科 pwn課程
 
CMake - Introduction and best practices
CMake - Introduction and best practicesCMake - Introduction and best practices
CMake - Introduction and best practices
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
 
Memory safety in rust
Memory safety in rustMemory safety in rust
Memory safety in rust
 
TMUX Rocks!
TMUX Rocks!TMUX Rocks!
TMUX Rocks!
 
系統程式 -- 第 4 章
系統程式 -- 第 4 章系統程式 -- 第 4 章
系統程式 -- 第 4 章
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
 
JNA - Let's C what it's worth
JNA - Let's C what it's worthJNA - Let's C what it's worth
JNA - Let's C what it's worth
 
BDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalBDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra Relacional
 

Similar a Drools

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
guest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
JS Bournival
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
cyrilgandon
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec Groovy
Guillaume Laforge
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
Guillaume Laforge
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
Rémi Alvado
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
Fredy Fadel
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
goldoraf
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
Mejdeddine Bouzouita
 

Similar a Drools (20)

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec Groovy
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
 
Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptx
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABES
 
Presentation JPA
Presentation JPAPresentation JPA
Presentation JPA
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 

Más de Klee Group (11)

HTML5
HTML5HTML5
HTML5
 
Web Sémantique — Linked Data
Web Sémantique — Linked DataWeb Sémantique — Linked Data
Web Sémantique — Linked Data
 
Introduction AOP
Introduction AOPIntroduction AOP
Introduction AOP
 
Panorama d'applications Web
Panorama d'applications WebPanorama d'applications Web
Panorama d'applications Web
 
Internet@TV
Internet@TVInternet@TV
Internet@TV
 
Sécurité des applications Web
Sécurité des applications WebSécurité des applications Web
Sécurité des applications Web
 
noSQL
noSQLnoSQL
noSQL
 
Talend
TalendTalend
Talend
 
Application lifecycle management
Application lifecycle managementApplication lifecycle management
Application lifecycle management
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Architecture orientée service (SOA)
Architecture orientée service (SOA)Architecture orientée service (SOA)
Architecture orientée service (SOA)
 

Drools

  • 1. Prez Flash :: JBoss Drools Règles Métiers Denis CHALLAS
  • 2. Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Pattern Spécification Inférence : description du problème Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Les langages De scripts (EL : Expression Language) EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Parser : Antlr Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
  • 3. Pourquoi recourir à un moteur de règles ?
  • 4. Approche classique Approche classique : impérative le développeur écrit les règles métiers qui lui sont transmises par le fonctionnel Image : http://blog.piaction.com/2009/11/gestion-des-regles-metiers-avec-drools-5/
  • 5. Approche avec un moteur de règles : déclarative le fonctionnel peut écrire ses règles Web Excel Domain Specific Language Image : http://blog.piaction.com/2009/11/gestion-des-regles-metiers-avec-drools-5/
  • 6. Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Pattern Spécification Inférence : description du problème Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Parser : Antlr Les langages De scripts (EL : Expression Language) EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
  • 7. Programmation logique SI PREMISSE ALORS CONCLUSION Prémisse de la règle Conditions d’application de la règle Pour déclencher Vérification des attributs en prémisse Conclusions Actionsà envisager Modification du fait, souvent l’ajout de nouveaux faits Si la règle est déclenchée Affecter des valeurs à des attributs Exemple SI voiture_couleur = rouge ET voiture_marque = Ferrari ALORS conducteur = heureux Fait ( ensemble d’attributs) : voiture_couleur, voiture_marque et conducteur  Valeur : rouge, Ferrari et heureux La résolution est acquise lorsque l’ensemble des faits n’est plus dans le moteur Différentes variantes existent : planner : calcul d’un minimum de contraintes levées
  • 8. Histoire d’inférences Moteur de règles est un système capable de définir des règles (= traitement) et de les appliquer à des faits ( = données) Moteur d’Inférence  opération mentale, ou jugement, qui consiste à tirer une conclusion sur des propositions tenues pour vraies (prémisses) à partir de règles de base en concluant à la vérité   3 types d'inférence : la déduction : utiliser dans la programmation logique l'induction : loi générale à partir d’observations l'abduction :  hypothèse explicative d’une observation formalisés par Peirce en 1903 Charles Sanders Peirce Philosophe américain 1839-1914
  • 9. Programmation  logique Moteur d’inférence règles et faits injectés cherche les règles applicables aux faits (pattern matching) optimise l’exécution de règles en les agençant de la manière la plus efficace possible (agenda). Utile Logique nécessitant un nombre important de « if » Trouve une solution basée sur un nombre important de règles Image : http://docs.jboss.org/drools/release/5.2.0.CR1/drools-expert-docs/html/ch01.html
  • 10.  PROgrammationLOGique Historique né dans les années 1960  programme de recherche américain sur le GPS (General ProblemSolving)  Prolog II — inventé par Alain Colmerauer à Marseille dans les années 1970 Le moteur d’inférence détermine les étapes de la résolution des problèmes propositionnelle par chaînage avant, arrière, mixte En Prolog : chaînage arrière parent(paul,jean). parent(jean,anne). parent(anne,marie). homme(paul). homme(jean). pere(X,Y) :- parent(X,Y), homme(X). grand_pere(X,Y) :- pere(X,Z), parent(Z,Y).
  • 11. Chaînage “arrière” Chaînage “arrière” ou back-tracking Faits : éléments directement vérifiables parent(paul, jean). parent(jean, jacques). Règles : prémises basés sur des faits ou autres règles anc(X,Y):-parent(X,Y). anc(X,Y) :- parent(X,Z), anc(Z,Y).
  • 12. Chaînage “arrière” En pseudo langage Fait oiseau(Tweety) “Tweety est un oiseau” Règle (∀ x) oiseau(x) ⇒ vole(x) “Tous les oiseaux volent” Est-ce que vole(Tweety) Oui
  • 13.
  • 14. Algorithme RETE Algorithme de RETE-OO : chaînage « avant » Optimisation / Performance Image : https://oxygen.informatik.tu-cottbus.de/RealRules/?q=node/48
  • 15. Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Inférence : description du problème Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Les langages Pattern « Spécification » De scripts (EL : Expression Language) EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Parser : Antlr Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
  • 16. Programmation  logique Pattern « Spécification » Permet de décrire les règles indépendamment des données Permet de ré-utiliser les règles Pas d’outil supplémentaire Facile à mettre en œuvre Adaptable dans tous les langages OO Par d’apprentissage d’un outil Ne contient pas de moteur d’inférence Pas de gestion logique, ni d’optimisation Demande d’un développement spécifique pour exécuter ces règles
  • 17. Expression Language EL : Expression Language langage de script permettant l'accès (get/set) à des composants Java (les JavaBeans) http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html Exemple JSP 2 ${unBean.unChamp} ${customer.age + 20} le nom est ${unBean.nom} et l'age est ${unBean.age} Exemple ${MonObjet.maPropriete != null} OGNL : Object-Graph Navigation Language Utiliser par des framework de templating, … Tapestry, Spring Web Flow, MyBatis Et encore Jakarta JXPath, Jexel, Java Expression Language (JEXL), JUEL, JEval
  • 18. MVEL MVFLEX Expression Language Langage basé sur Java Orienté utilisateur vs Developpeur java Expose un model typé (java) et dynamique Exemple de modification de deux variables modify ( m ) {message = "Goodbye cruel world",status = Message.GOODBYE };
  • 19.
  • 21. Langages dédiés de polices d'assurance vie,  de simulation de combat ,  de facturationhttp://martinfowler.com/bliki/DomainSpecificLanguage.html
  • 22. DSL : exemple saisie de formules (1/3) Les formules de révision sont administrables Dans le cadre d’un projet pour un de ses clients, Klee a développé un assistant permettant de saisir des formules comptables (dite de révision).
  • 23. DSL : exemple saisie de formules (2/3) Un grand nombre de formules sont administrables
  • 24. DSL : exemple saisie de formules (3/3) ANother Tool for Language Recognition Analyseur lexical et parser Permet de décrire une grammaire Générer ensuite une librairie : .Net, Java Permet de parser un DSL particulier Ici fonction mathématique spécifique au client Référence http://www.antlr.org/
  • 25. DSL Un DSL peut être une simple traduction d’un langage fonctionnel en un langage technique The product "{product}" gains focus more than {times} in {minutes} minutes Equivalent $list: List( $n: size == {times} ) from accumulate( $visit: ProductFocusGainedEvent(product.category == "{product}")over window:time({minutes}m) from entry-point "visit-product-stream",collectList($visit))
  • 26. DSL Exemple de l’éditeur DSL de Drools
  • 27. Les langages de scripts Langages généralistes Autres types Langages de script : (abus de langage) programmation interprétée, statique  Permet de manipuler les fonctionnalités d'un système informatique Evite la phase de compilation Les évolutions des langages : quasi langage de programmation Ajout Boucle, opérateur  BASIC, PHP, Lisp, JavaScript Langages dynamiques la compilation exécutée au runtime évaluation et la modification du programme  Groovy : précompile ou à la volée, surcharge opérateur, typage dynamique list = ["Rod", "Carlos", "Chris"] shorts = list.findAll { it.size() <= 4 } shorts.each { printlnit }
  • 28. EL, LANGAGE, DSL Gestion d’un nombre important de règles nécessite Utiliser des pattern(s) de gestion des règles pour l’optimisation Evaluer toutes les règles brutalement dégrade les performances Limiter la traduction de règle métier dans un langage informatique Coût de développement, Coût de maintenance Proposer un langage proche du fonctionnel Utilisation de DSL Compilation à l’exécution Image : http://parisjug.org/xwiki/bin/download/Meeting/20101109/PresentationBRMSGenigraphJUGParis20101109.pdf
  • 29. Implémenter les règles : un métier Pourquoi recourir à un moteur de règles ? Programmation  logique Faits, Règles Pattern Spécification Inférence : description du problème Backtracking : Prolog Performance : Algorithme de RETE/RETEOO Parser : Antlr Les langages De scripts (EL : Expression Language) EL-JSP, MVEL, OGNL Dédiés métier (DSL : Domain SpecificLanguages) Généralistes (General PurposeLanguages) dynamiques : Groovy Moteurs de règles Offre Drools Expert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS) Les alternatives
  • 31. Drools Expert – moteur de règles : ce module va exécuter les règles modélisées Contient l’implémentation du moteur algorithme de RETE La gestion des règles Langage MVEL Permet de lancer le moteur en java À partir de fichier DRL : liste des règles DSL : contient le langage métier si utiliser DSLR : liste des règles en langage DSL
  • 32. Développement avec Drools Développement sous Eclipse Editeur de règles Débogage de règles Monitoring du moteur Démonstration live (Voir écran suivant) Règle dynamique: par re-charchement du package Règle écrite en DSL Editeur succin proposé dans la demo
  • 33. Drools Expert Démonstration smart-content-selection POC : http://salaboy.wordpress.com/2011/04/01/smart-content-selection-poc-drools-5-jbpm5/
  • 34. Drools Guvnor Guvnor – interface d’administration Web (Business Rules Management System)
  • 35. Drools Guvnor Guvnor Gère les règles suivant différents environnements Avec une interface graphique Se repose sur Drools Expert Hiérarchisation des règles Qui peut utiliser Guvnor Expert fonctionnel Expert ou administrateurs de règles Développeurs Quand utiliser Guvnor Gérer des versions et des déploiements Ne pas appeler les développeurs Non lié au déploiement du cœur applicatif
  • 36. Drools Planner DroolsPlanner Moteur de planification automatique grâce à la définition de contraintes solver calcule et propose des solutions
  • 37. Drools Planner Exemple : N-reines Il s’agit de mettre n reines sur un échiquier de taille n × n sans qu’aucune reine ne soit en prise (4 < n <1000000) Résolution par programme déterministe récursif Je place une reine , j’avance d’une colonne => blocage à partir de n = 20 En optimisant, en cas d’erreur je reviens et choisi un autre chemin => blocage à partir de n = 100, voir 5000 avec autres optims
  • 38.
  • 39. Démonstration Enquête sur des lignes de transports Vue sous eclipse Vue du réseau RETE sous eclipse
  • 40. Drools Flow jBPM/ Flow – Moteur de workflow Les règles peuvent être écrite en MVEL (ou java) Le moteur d’inférence est celui de Drools
  • 41. Drools Fusion Fusion – Gestion des événements Centré sur le timing des événements Cas d’utilisation Bourse : trading Tarif téléphonique Détection de fraude … Algorithme CEP Complex Event Processing système d’évènement proche de CEP avec la possibilité de gérer des évènement changeant dans le temps.
  • 42. Microsoft . Windows Workflow Foundation Rules Engine Propose un moteur intégré dans la plateforme .Net Un moteur de workflow Un moteur de règles Les outils d’édition avec Visual Studio
  • 43. Questions ? Retrouvez nous sur le blog technique de Klee http://blog.kleegroup.com/teknics teKnics@kleegroup.com @teKnics_Klee