SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

パッケージの循環参照
パッケージの循環参照パッケージの循環参照
パッケージの循環参照pospome
 
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkA Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkRed Hat Developers
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking toolsNobuyuki Matsui
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxaissamjadli
 
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...Edureka!
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装Kenjiro Kubota
 
CSS Grid Layout for Topconf, Linz
CSS Grid Layout for Topconf, LinzCSS Grid Layout for Topconf, Linz
CSS Grid Layout for Topconf, LinzRachel Andrew
 
React js programming concept
React js programming conceptReact js programming concept
React js programming conceptTariqul islam
 
今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】
今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】
今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】Trainocate Japan, Ltd.
 
Redux Toolkit - Quick Intro - 2022
Redux Toolkit - Quick Intro - 2022Redux Toolkit - Quick Intro - 2022
Redux Toolkit - Quick Intro - 2022Fabio Biondi
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成Naoto Nishizono
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기Changyol BAEK
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話dcubeio
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージTakashi Hoshino
 
Creating Domain Specific Languages in Python
Creating Domain Specific Languages in PythonCreating Domain Specific Languages in Python
Creating Domain Specific Languages in PythonSiddhi
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgnitermirahman
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 

What's hot (20)

パッケージの循環参照
パッケージの循環参照パッケージの循環参照
パッケージの循環参照
 
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkA Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
 
React
React React
React
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptx
 
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
 
React dom
React domReact dom
React dom
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装
 
CSS Grid Layout for Topconf, Linz
CSS Grid Layout for Topconf, LinzCSS Grid Layout for Topconf, Linz
CSS Grid Layout for Topconf, Linz
 
React js programming concept
React js programming conceptReact js programming concept
React js programming concept
 
今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】
今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】
今さら聞けない! Windows Server 2012 R2 Active Directory入門【グローバルナレッジ無料セミナー資料】
 
Redux Toolkit - Quick Intro - 2022
Redux Toolkit - Quick Intro - 2022Redux Toolkit - Quick Intro - 2022
Redux Toolkit - Quick Intro - 2022
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成ぼくの考えた最強のpipeline構成
ぼくの考えた最強のpipeline構成
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージ
 
Creating Domain Specific Languages in Python
Creating Domain Specific Languages in PythonCreating Domain Specific Languages in Python
Creating Domain Specific Languages in Python
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 

Similar to Drools

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojurelolopetit
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyGuillaume Laforge
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume 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 8Yannick 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 web5pidou
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un bliantareq
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilanteejug
 
Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxFrancisRUKAN
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRé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'ABESABES
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer FacesJS Bournival
 

Similar to 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
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 

More from Klee Group

Web Sémantique — Linked Data
Web Sémantique — Linked DataWeb Sémantique — Linked Data
Web Sémantique — Linked DataKlee Group
 
Introduction AOP
Introduction AOPIntroduction AOP
Introduction AOPKlee Group
 
Panorama d'applications Web
Panorama d'applications WebPanorama d'applications Web
Panorama d'applications WebKlee Group
 
Sécurité des applications Web
Sécurité des applications WebSécurité des applications Web
Sécurité des applications WebKlee Group
 
Application lifecycle management
Application lifecycle managementApplication lifecycle management
Application lifecycle managementKlee Group
 
Intégration continue
Intégration continueIntégration continue
Intégration continueKlee Group
 
Architecture orientée service (SOA)
Architecture orientée service (SOA)Architecture orientée service (SOA)
Architecture orientée service (SOA)Klee Group
 

More from 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