SlideShare une entreprise Scribd logo
Prez Flash :: JBoss DroolsRègles MétiersDenis CHALLAS
Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesPattern SpécificationInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOLes langagesDe scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyParser : AntlrMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
Pourquoi recourir à un moteur de règles ?
Approche classiqueApproche classique : impérativele 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éclarativele fonctionnel peut écrire ses règlesWeb ExcelDomain Specific LanguageImage : http://blog.piaction.com/2009/11/gestion-des-regles-metiers-avec-drools-5/
Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesPattern SpécificationInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOParser : AntlrLes langagesDe scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
Programmation logiqueSI PREMISSE ALORS CONCLUSIONPrémisse de la règle Conditions d’application de la règle Pour déclencherVérification des attributs en prémisseConclusions Actionsà envisagerModification du fait, souvent l’ajout de nouveaux faitsSi la règle est déclenchéeAffecter des valeurs à des attributsExempleSI voiture_couleur = rouge ET voiture_marque = Ferrari ALORS conducteur = heureuxFait ( ensemble d’attributs) : voiture_couleur, voiture_marque et conducteur Valeur : rouge, Ferrari et heureuxLa résolution est acquise lorsque l’ensemble des faits n’est plus dans le moteurDifférentes variantes existent : planner : calcul d’un minimum de contraintes levées
Histoire d’inférencesMoteur 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 conclusionsur des propositions tenues pour vraies (prémisses)à partir de règles de baseen concluant à la vérité  3 types d'inférence : la déduction : utiliser dans la programmation logiquel'induction : loi générale à partir d’observationsl'abduction :  hypothèse explicative d’une observationformalisés par Peirce en 1903Charles Sanders PeircePhilosophe américain1839-1914
Programmation  logiqueMoteur d’inférencerègles et faits injectéscherche 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).UtileLogique nécessitant un nombre important de « if »Trouve une solution basée sur un nombre important de règlesImage : http://docs.jboss.org/drools/release/5.2.0.CR1/drools-expert-docs/html/ch01.html
 PROgrammationLOGiqueHistoriquené 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 1970Le moteur d’inférencedétermine les étapes de la résolution des problèmespropositionnelle par chaînage avant, arrière, mixteEn 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-trackingFaits : éléments directement vérifiablesparent(paul, jean).parent(jean, jacques).Règles : prémises basés sur des faits ou autres règlesanc(X,Y):-parent(X,Y).anc(X,Y) :- parent(X,Z), anc(Z,Y).
Chaînage “arrière”En pseudo langageFait	 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 RETE1974 : Dr Charles L. Forgy de l'Université Carnegie Mellon,  publication de 1982Algorithme de filtrage par motifEvite d’exécuter toutes les prémisses de toutes les réglésUtiliser par de nombreux systèmes experts tels que Clips, Jess, JBoss Rules, SoarRETE : Nom communFilet, rets, lacs, toile d’araignée.rete jaculum, Plaute.filet de pêcheur, épervier.quaenimis apparent retia, vitat avis, Ovide. R. A. 516l'oiseau évite les filets qui sont trop visibles.Piège.qui albo rete alienaoppugnantbona, Plaute.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).in retes measincidere, Charis.tomber dans mon piège.
Algorithme RETEAlgorithme de RETE-OO : chaînage « avant »Optimisation  / PerformanceImage : https://oxygen.informatik.tu-cottbus.de/RealRules/?q=node/48
Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOLes langagesPattern « Spécification »De scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyParser : AntlrMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
Programmation  logiquePattern « Spécification »Permet de décrire les règles indépendamment des donnéesPermet de ré-utiliser les règlesPas d’outil supplémentaireFacile à mettre en œuvreAdaptable dans tous les langages OOPar d’apprentissage d’un outilNe contient pas de moteur d’inférencePas de gestion logique, ni d’optimisationDemande d’un développement spécifique pour exécuter ces règles
Expression LanguageEL : Expression Languagelangage de script permettant l'accès (get/set) à des composants Java (les JavaBeans) http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.htmlExemple 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 LanguageUtiliser par des framework de templating, …Tapestry, Spring Web Flow, MyBatisEt encoreJakarta JXPath, Jexel, Java Expression Language (JEXL), JUEL, JEval
MVELMVFLEX Expression LanguageLangage basé sur JavaOrienté utilisateur vs Developpeur javaExpose un model typé (java) et dynamiqueExemple de modification de deux variablesmodify ( m ) {message = "Goodbye cruel world",status = Message.GOODBYE };
DSLExemples de DSLCSS, SQL, expression régulière
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 administrablesDans 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 RecognitionAnalyseur lexical  et parserPermet de décrire une grammaireGénérer ensuite une librairie : .Net, JavaPermet de parser un DSL particulier Ici fonction mathématique spécifique au clientRéférencehttp://www.antlr.org/
DSLUn DSL peut être une simple traduction d’un langage fonctionnel en un langage techniqueThe 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))
DSLExemple de l’éditeur DSL de Drools
Les langages de scriptsLangages généralistesAutres typesLangages 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 compilationLes évolutions des langages  : quasi langage  de programmationAjout Boucle, opérateur BASIC, PHP, Lisp, JavaScriptLangages 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 dynamiquelist = ["Rod", "Carlos", "Chris"] shorts = list.findAll { it.size() <= 4 } shorts.each { printlnit }
EL, LANGAGE, DSLGestion d’un nombre  important de règles nécessiteUtiliser des pattern(s) de gestion des règles pour l’optimisationEvaluer toutes les règles brutalement dégrade les performancesLimiter la traduction de règle métier dans un langage informatiqueCoût de développement, Coût de maintenanceProposer un langage proche du fonctionnelUtilisation de DSLCompilation à l’exécution Image : http://parisjug.org/xwiki/bin/download/Meeting/20101109/PresentationBRMSGenigraphJUGParis20101109.pdf
Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesPattern SpécificationInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOParser : AntlrLes langagesDe scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
Moteurs de règles
DroolsExpert – moteur de règles : ce module va exécuter les règles modéliséesContient l’implémentation du moteur algorithme de RETELa gestion des règles Langage MVELPermet de lancer le moteur en javaÀ partir de fichier DRL : liste des règlesDSL : contient le langage métier si utiliserDSLR : liste des règles en langage DSL
Développement avec DroolsDéveloppement sous EclipseEditeur de règlesDébogage de règlesMonitoring du moteurDémonstration live (Voir écran suivant)Règle dynamique: par re-charchement du packageRègle écrite en DSLEditeur succin proposé dans la demo
Drools ExpertDémonstration smart-content-selectionPOC : 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 GuvnorGuvnorGère les règles suivant différents environnementsAvec une interface graphiqueSe repose sur Drools ExpertHiérarchisation des règlesQui peut utiliser GuvnorExpert fonctionnelExpert ou administrateurs de règlesDéveloppeursQuand utiliser GuvnorGérer des versions et des déploiementsNe pas appeler les développeursNon lié au déploiement du cœur applicatif
Drools PlannerDroolsPlannerMoteur de planification automatique  grâce à la définition de contraintes solver calcule et propose des solutions
Drools PlannerExemple : N-reinesIl s’agit de mettre n reines sur un échiquier de taille n × nsans qu’aucune reine ne soit en prise (4 < n <1000000)Résolution par programme déterministe récursifJe 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 PlannerPrincipe 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 finiOn 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)On atteint 100 000 reinesDrools PlannerDémonstration « Enquête sur des lignes de transports »Klee pour un de ses clients a mis en œuvre Planner afin de résoudre une planification d’enquêtes en prenant en compte des contraintes fonctionnelles exprimées sous la forme de 4 règles métiersRègle 1  Entre deux enquêtes successives concernant la même ligne, il doit y avoir un intervalle minimum de X joursRègle 2 Deux vacations successives concernant la même ligne doivent alterner matin/ après-midiRègle 3 Deux vacations successives concernant la même ligne doivent alterner de prestataireRègle 4  Deux vacations successives concernant la même ligne doivent alterner de jour de la semaineCalcul des conflits Addition du nombre de règles enfreintes pour obtenir l'opposé du score.
Démonstration Enquête sur des lignes de transportsVue sous eclipseVue du réseau RETE sous eclipse
Drools FlowjBPM/ Flow – Moteur de workflowLes règles peuvent être écrite en MVEL (ou java)Le moteur d’inférence est celui de Drools
Drools FusionFusion – Gestion des événementsCentré sur le timing des événementsCas d’utilisationBourse : tradingTarif téléphoniqueDétection de fraude…Algorithme CEPComplex Event Processingsystè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 EnginePropose un moteur intégré dans la plateforme .Net Un moteur de workflowUn moteur de règlesLes outils d’édition avec Visual Studio

Contenu connexe

Tendances

Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
TheBest Icanbe
 
JavaScript Interview Questions and Answers | Full Stack Web Development Train...
JavaScript Interview Questions and Answers | Full Stack Web Development Train...JavaScript Interview Questions and Answers | Full Stack Web Development Train...
JavaScript Interview Questions and Answers | Full Stack Web Development Train...
Edureka!
 
超簡単!TELNETの話
超簡単!TELNETの話超簡単!TELNETの話
超簡単!TELNETの話
ogatay
 
Angular & RXJS: examples and use cases
Angular & RXJS: examples and use casesAngular & RXJS: examples and use cases
Angular & RXJS: examples and use cases
Fabio Biondi
 
Json
JsonJson
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
visual khh
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
Eric Bourdet
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQL
Alphorm
 
React js
React jsReact js
React js
Jai Santhosh
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
ritika1
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
Jean-Baptiste Vigneron
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
Wei-Yu Chen
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
Jimit Shah
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
Thanh Tuong
 
An introduction to React.js
An introduction to React.jsAn introduction to React.js
An introduction to React.js
Emanuele DelBono
 
Introduction to D programming language at Weka.IO
Introduction to D programming language at Weka.IOIntroduction to D programming language at Weka.IO
Introduction to D programming language at Weka.IO
Liran Zvibel
 
React js
React jsReact js
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
Thibault Martinez
 
Node.js Express Framework
Node.js Express FrameworkNode.js Express Framework
Node.js Express Framework
TheCreativedev Blog
 
Fetch API Talk
Fetch API TalkFetch API Talk
Fetch API Talk
Chiamaka Nwolisa
 

Tendances (20)

Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
JavaScript Interview Questions and Answers | Full Stack Web Development Train...
JavaScript Interview Questions and Answers | Full Stack Web Development Train...JavaScript Interview Questions and Answers | Full Stack Web Development Train...
JavaScript Interview Questions and Answers | Full Stack Web Development Train...
 
超簡単!TELNETの話
超簡単!TELNETの話超簡単!TELNETの話
超簡単!TELNETの話
 
Angular & RXJS: examples and use cases
Angular & RXJS: examples and use casesAngular & RXJS: examples and use cases
Angular & RXJS: examples and use cases
 
Json
JsonJson
Json
 
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQL
 
React js
React jsReact js
React js
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
 
An introduction to React.js
An introduction to React.jsAn introduction to React.js
An introduction to React.js
 
Introduction to D programming language at Weka.IO
Introduction to D programming language at Weka.IOIntroduction to D programming language at Weka.IO
Introduction to D programming language at Weka.IO
 
React js
React jsReact js
React js
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Node.js Express Framework
Node.js Express FrameworkNode.js Express Framework
Node.js Express Framework
 
Fetch API Talk
Fetch API TalkFetch API Talk
Fetch API Talk
 

Similaire à 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
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
lolopetit
 
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
 
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
Yannick Chartois
 
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
5pidou
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
teejug
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
tareq
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
HamdiBaklouti
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
Tugdual Grall
 
Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptx
FrancisRUKAN
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
Rémi Alvado
 
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
ABES
 
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
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
JS Bournival
 

Similaire à Drools (20)

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
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 bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
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
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 

Plus de Klee Group

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

Plus 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 DroolsRègles MétiersDenis CHALLAS
  • 2. Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesPattern SpécificationInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOLes langagesDe scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyParser : AntlrMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
  • 3. Pourquoi recourir à un moteur de règles ?
  • 4. Approche classiqueApproche classique : impérativele 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éclarativele fonctionnel peut écrire ses règlesWeb ExcelDomain Specific LanguageImage : http://blog.piaction.com/2009/11/gestion-des-regles-metiers-avec-drools-5/
  • 6. Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesPattern SpécificationInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOParser : AntlrLes langagesDe scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
  • 7. Programmation logiqueSI PREMISSE ALORS CONCLUSIONPrémisse de la règle Conditions d’application de la règle Pour déclencherVérification des attributs en prémisseConclusions Actionsà envisagerModification du fait, souvent l’ajout de nouveaux faitsSi la règle est déclenchéeAffecter des valeurs à des attributsExempleSI voiture_couleur = rouge ET voiture_marque = Ferrari ALORS conducteur = heureuxFait ( ensemble d’attributs) : voiture_couleur, voiture_marque et conducteur Valeur : rouge, Ferrari et heureuxLa résolution est acquise lorsque l’ensemble des faits n’est plus dans le moteurDifférentes variantes existent : planner : calcul d’un minimum de contraintes levées
  • 8. Histoire d’inférencesMoteur 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 conclusionsur des propositions tenues pour vraies (prémisses)à partir de règles de baseen concluant à la vérité  3 types d'inférence : la déduction : utiliser dans la programmation logiquel'induction : loi générale à partir d’observationsl'abduction :  hypothèse explicative d’une observationformalisés par Peirce en 1903Charles Sanders PeircePhilosophe américain1839-1914
  • 9. Programmation  logiqueMoteur d’inférencerègles et faits injectéscherche 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).UtileLogique nécessitant un nombre important de « if »Trouve une solution basée sur un nombre important de règlesImage : http://docs.jboss.org/drools/release/5.2.0.CR1/drools-expert-docs/html/ch01.html
  • 10.  PROgrammationLOGiqueHistoriquené 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 1970Le moteur d’inférencedétermine les étapes de la résolution des problèmespropositionnelle par chaînage avant, arrière, mixteEn 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-trackingFaits : éléments directement vérifiablesparent(paul, jean).parent(jean, jacques).Règles : prémises basés sur des faits ou autres règlesanc(X,Y):-parent(X,Y).anc(X,Y) :- parent(X,Z), anc(Z,Y).
  • 12. Chaînage “arrière”En pseudo langageFait oiseau(Tweety) “Tweety est un oiseau”Règle (∀ x) oiseau(x) ⇒ vole(x) “Tous les oiseaux volent”Est-ce que vole(Tweety) Oui
  • 13. Chaînage “avant”Algorithme de RETE1974 : Dr Charles L. Forgy de l'Université Carnegie Mellon,  publication de 1982Algorithme de filtrage par motifEvite d’exécuter toutes les prémisses de toutes les réglésUtiliser par de nombreux systèmes experts tels que Clips, Jess, JBoss Rules, SoarRETE : Nom communFilet, rets, lacs, toile d’araignée.rete jaculum, Plaute.filet de pêcheur, épervier.quaenimis apparent retia, vitat avis, Ovide. R. A. 516l'oiseau évite les filets qui sont trop visibles.Piège.qui albo rete alienaoppugnantbona, Plaute.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).in retes measincidere, Charis.tomber dans mon piège.
  • 14. Algorithme RETEAlgorithme de RETE-OO : chaînage « avant »Optimisation / PerformanceImage : https://oxygen.informatik.tu-cottbus.de/RealRules/?q=node/48
  • 15. Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOLes langagesPattern « Spécification »De scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyParser : AntlrMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
  • 16. Programmation  logiquePattern « Spécification »Permet de décrire les règles indépendamment des donnéesPermet de ré-utiliser les règlesPas d’outil supplémentaireFacile à mettre en œuvreAdaptable dans tous les langages OOPar d’apprentissage d’un outilNe contient pas de moteur d’inférencePas de gestion logique, ni d’optimisationDemande d’un développement spécifique pour exécuter ces règles
  • 17. Expression LanguageEL : Expression Languagelangage de script permettant l'accès (get/set) à des composants Java (les JavaBeans) http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.htmlExemple 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 LanguageUtiliser par des framework de templating, …Tapestry, Spring Web Flow, MyBatisEt encoreJakarta JXPath, Jexel, Java Expression Language (JEXL), JUEL, JEval
  • 18. MVELMVFLEX Expression LanguageLangage basé sur JavaOrienté utilisateur vs Developpeur javaExpose un model typé (java) et dynamiqueExemple de modification de deux variablesmodify ( m ) {message = "Goodbye cruel world",status = Message.GOODBYE };
  • 19. DSLExemples de DSLCSS, SQL, expression régulière
  • 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 administrablesDans 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 RecognitionAnalyseur lexical et parserPermet de décrire une grammaireGénérer ensuite une librairie : .Net, JavaPermet de parser un DSL particulier Ici fonction mathématique spécifique au clientRéférencehttp://www.antlr.org/
  • 25. DSLUn DSL peut être une simple traduction d’un langage fonctionnel en un langage techniqueThe 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))
  • 27. Les langages de scriptsLangages généralistesAutres typesLangages 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 compilationLes évolutions des langages : quasi langage de programmationAjout Boucle, opérateur BASIC, PHP, Lisp, JavaScriptLangages 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 dynamiquelist = ["Rod", "Carlos", "Chris"] shorts = list.findAll { it.size() <= 4 } shorts.each { printlnit }
  • 28. EL, LANGAGE, DSLGestion d’un nombre important de règles nécessiteUtiliser des pattern(s) de gestion des règles pour l’optimisationEvaluer toutes les règles brutalement dégrade les performancesLimiter la traduction de règle métier dans un langage informatiqueCoût de développement, Coût de maintenanceProposer un langage proche du fonctionnelUtilisation de DSLCompilation à l’exécution Image : http://parisjug.org/xwiki/bin/download/Meeting/20101109/PresentationBRMSGenigraphJUGParis20101109.pdf
  • 29. Implémenter les règles : un métierPourquoi recourir à un moteur de règles ?Programmation  logiqueFaits, RèglesPattern SpécificationInférence : description du problème Backtracking : PrologPerformance : Algorithme de RETE/RETEOOParser : AntlrLes langagesDe scripts (EL : Expression Language) EL-JSP, MVEL, OGNLDédiés métier (DSL : Domain SpecificLanguages)Généralistes (General PurposeLanguages)dynamiques : GroovyMoteurs de règlesOffre DroolsExpert, Flow (jBpm), Planer, Fusion(Event Processing), (BRMS/BPMS)Les alternatives
  • 31. DroolsExpert – moteur de règles : ce module va exécuter les règles modéliséesContient l’implémentation du moteur algorithme de RETELa gestion des règles Langage MVELPermet de lancer le moteur en javaÀ partir de fichier DRL : liste des règlesDSL : contient le langage métier si utiliserDSLR : liste des règles en langage DSL
  • 32. Développement avec DroolsDéveloppement sous EclipseEditeur de règlesDébogage de règlesMonitoring du moteurDémonstration live (Voir écran suivant)Règle dynamique: par re-charchement du packageRègle écrite en DSLEditeur succin proposé dans la demo
  • 33. Drools ExpertDémonstration smart-content-selectionPOC : 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 GuvnorGuvnorGère les règles suivant différents environnementsAvec une interface graphiqueSe repose sur Drools ExpertHiérarchisation des règlesQui peut utiliser GuvnorExpert fonctionnelExpert ou administrateurs de règlesDéveloppeursQuand utiliser GuvnorGérer des versions et des déploiementsNe pas appeler les développeursNon lié au déploiement du cœur applicatif
  • 36. Drools PlannerDroolsPlannerMoteur de planification automatique grâce à la définition de contraintes solver calcule et propose des solutions
  • 37. Drools PlannerExemple : N-reinesIl s’agit de mettre n reines sur un échiquier de taille n × nsans qu’aucune reine ne soit en prise (4 < n <1000000)Résolution par programme déterministe récursifJe 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. Drools PlannerPrincipe 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 finiOn 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)On atteint 100 000 reinesDrools PlannerDémonstration « Enquête sur des lignes de transports »Klee pour un de ses clients a mis en œuvre Planner afin de résoudre une planification d’enquêtes en prenant en compte des contraintes fonctionnelles exprimées sous la forme de 4 règles métiersRègle 1 Entre deux enquêtes successives concernant la même ligne, il doit y avoir un intervalle minimum de X joursRègle 2 Deux vacations successives concernant la même ligne doivent alterner matin/ après-midiRègle 3 Deux vacations successives concernant la même ligne doivent alterner de prestataireRègle 4 Deux vacations successives concernant la même ligne doivent alterner de jour de la semaineCalcul des conflits Addition du nombre de règles enfreintes pour obtenir l'opposé du score.
  • 39. Démonstration Enquête sur des lignes de transportsVue sous eclipseVue du réseau RETE sous eclipse
  • 40. Drools FlowjBPM/ Flow – Moteur de workflowLes règles peuvent être écrite en MVEL (ou java)Le moteur d’inférence est celui de Drools
  • 41. Drools FusionFusion – Gestion des événementsCentré sur le timing des événementsCas d’utilisationBourse : tradingTarif téléphoniqueDétection de fraude…Algorithme CEPComplex Event Processingsystè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 EnginePropose un moteur intégré dans la plateforme .Net Un moteur de workflowUn moteur de règlesLes outils d’édition avec Visual Studio
  • 43. Questions ?Retrouvez nous sur le blog technique de Kleehttp://blog.kleegroup.com/teknicsteKnics@kleegroup.com@teKnics_Klee