SlideShare a Scribd company logo
1 of 50
A look inside JBossRules A look inside JBossRules “ Dal BRMS al BLiP” “ Perchè dovrei usare un Rule Engine? E che cosa ci faccio?” “ Business Rules VS Metodi di Business” “ Oltre il BPM... BPM+Rules” “ E quando ( quando?quasi sempre! ) il business è praticamente scritto su fogli excel???” “ Sistemi Esperti? BRL?? Pattern Matching??? Rete????  AI????? ”
A look inside JBossRules Avvertimenti “programmare a regole”, usare motori di regole, può portarci spesso  ad “esagerare” e a  “ voler sparare ad una mosca con un cannone” ma allo stesso tempo sono sicuro che in moltissime delle applicazioni su cui avete o state lavorando ci sarebbe spazio per le regole... anche perchè (come spero ve ne accorgerete :-) e come spero  si possa sfatare un falso mito )  OO programming + rules  formano un binomio perfetto!
A look inside JBossRules Chi sono     ,[object Object]
Uno dei coordinatori del JBoss User Group Roma http://www.jbugroma.org   http://tech.groups.yahoo.com/group/roma-jbug
Membro e sostenitore delle attività del Jug Roma
My buzzwords: BRMS – BPM – APM – JBoss platform – CI - GateIn Spring – Agile techniques - Flex – Python – pygtk – Grails - Debian
Twitter:  http://twitter.com/giomarigi
A look inside JBossRules Agenda     ,[object Object]
Applicazione dei sistemi esperti
JBossRules/Drools5
Drools Expert
Drools Expert Demo
BRMS: Drools Guvnor
A look inside JBossRules “ I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione” (Albert Einstein)
Sistemi Esperti VS Programmazione Apps, Programs, Facts Solutions, Decisions, Actions Expert System Inference Engine Production   Memory Knowledge   Base Interface REGOLE IF-THEN REGOLE IF-THEN REGOLE IF-THEN RULES REGOLE IF-THEN REGOLE IF-THEN REGOLE IF-THEN FACTS
Sistemi Esperti VS Programmazione Un   sistema esperto  può essere definito come un modulo software che cerca di riprodurre il comportamento e il modo di ragionamento che una o più persone attuerebbero in uno specifico dominio di cui sono esperti.  “ Può un sistema esperto emulare le prestazione di un umano?  Un sistema esperto non equivale a dire sistema intelligente!  Un sistema può apprendere, può essere semi-intelligente ma avrà  sempre una conoscenza limitata!  Un sistema esperto deve agire in  domini limitati !”
Sistemi Esperti VS Programmazione       Un  sistema esperto  specifica  cosa  il nostro modulo deve fare e non come farlo!!!   Usa euristiche e non è detto che arrivi sempre a una soluzione e nel caso in cui la trovi    non è detto che sia ottima e corretta.   Lo sviluppatore non definisce i passi per arrivare alla soluzione, ma essi sono  impliciti !  Definire logica di business attraverso un  linguaggio di programmazione  implica anche    (e soprattutto) scrivere  come  il nostro modulo deve implementarla    (if else, switch,loop, polimorfismo,ecc...).    Gli algoritmi sono delle sequenze  esplicite  (scritte quindi dal programmatore)       “ Riusciremo sempre a scrivere una logica corretta e robusta?”   “E le prestazioni? (es.complessità asintoti ca)”   “E se la logica cambia?”
Sistemi Esperti VS Programmazione Fonte: http://www.codeproject.com/KB/work/Business_Rules_Systems.aspx   z     Logic and data separation   In un sistema esperto gli oggetti di dominio  (fatti)  contengono le proprietà distintive dell'oggetto(stato) La logica (i metodi di business dei domain object) viene  separata dall'oggetto e definita attraverso un insieme di production rules . Cross domain logic    “Decentralizzare” lo stato dalle regole permette di utilizzare da più oggetti, da controllers, uno stesso insieme di regole    “ Vi è mai capitato di scrivere in più parti del vostro progetto dei metodi molto simili (a prescindere dal fatto che l'oggetto    su cui lavori sia di un tipo o di un altro tipo?    Non mentite!!!)  “
Sistemi Esperti VS Programmazione Fonte: http://www.ibm.com/developerworks/library/ar-busrules2/fig03.gif
Sistemi Esperti VS Programmazione       Open the box     Le regole possono essere gestite ed amministrate non solo dagli sviluppatori e dagli architetti  ma addirittura dal cliente stesso (od altri stakeholders) -> concetto di  business ownership ...        “ Se pensate che questa sia una limitazione al nostro lavoro pensate invece alla possibilità di     creare sistemi con una  lifetime  e una  flexibility  estrema. E se il sistema sta in piedi per tanto     tempo e bene,questa significa: fiducia, nuovi sviluppi, nuovi scenari...”    “Business decisions are everywhere...why to hide them?” Open to changes   Cambiare, aggiungere, rimuovere regole di business è diverso da cambiare,aggiungere,  rimuovere dei metodi o accorgersi di dover stravolgere il design di qualche modulo perchè  ci hanno chiesto una change request... “Se la logica di business cambia velocemente un sistema esperto basato su regole  può diventare non solo una soluzione ma la soluzione.”
Applicazione dei sistemi esperti Un   sistema esperto  deve essere applicato per risolvere classi di problemi non banali e che non possono essere risolti con algoritmi e “metodi tradizionali” La definizione è sicuramente vera ed è indubbio che molti problemi possono essere solamente risolti con un sistema esperto... ma...
Applicazione dei sistemi esperti La logica può anche essere non così complessa ma soggetta a  numerosi cambiamenti  (aggiunte,variazioni,”potature”) Il business è definito da un  numero elevato di condizioni ,  difficili da assemblare e da “mettere insieme” Il business risiede in  “fonti” diverse  e difficili da integrare nel codice in modo organico (fogli excel,procedure DBMS,metodi di business “infarciti” di if..else, switch, loop) Un sistema esperto  apprende ...molte condizioni che saremmo costretti a scrivere nel codice nel tempo potrebbero venirci gratis
Applicazione dei sistemi esperti ,[object Object]
Routing e Filtering   es.  antispam – instradamento di messaggi verso le destinazioni con le migliori caratteristiche
Pianificazione e Schedulazione di risorse es.  creazione di piani efficienti di distribuzione della forza lavoro in sistemi di WFM
Forecasting e Previsioning es. andamento mercati finanziari, previsione del rischio in polizze assicurative, analisi curve di  traffico in sistemi di WFM per prevedere una forza lavoro
Diagnosi mediche
Ricerca di itinerari e TSP (commesso viaggiatore)
Giochi
Applicazione dei sistemi esperti We need to schedule matches between N teams while  respecting the following hard constraints: ,[object Object]
Each team has exactly 1 match on each playing day.
No team must have more than 3 consecutive    home or 3 consecutive away matches.
No repeaters: no 2 consecutive matches of the    same 2 opposing teams. Minimize the total distance traveled by all teams. Il problema può sembrare semplice ma non sono state trovate soluzioni ottime anche per N piccoli!!! Un TSP Fonte: http://blog.athico.com/ Alcune soluzioni battle proven: http://mat.tepper.cmu.edu/TOURN
JBossRules/Drools 5 Chiariamo subito che  JBossRules  e  Drools  sono  la stessa cosa dal punto di vista dei moduli software. Drools diventa JBossRules nella versione “enterprise”,  ovvero quando viene venduto all'utente finale con il  supporto RedHat e con il bug fixing incluso. Come tutti i progetti JBoss, Drools è sviluppato  interamente da committer all'interno della community  jboss.org   L'ultima release di Drools è la 5.0 del maggio 2009
JBossRules/Drools 5 JBoss Community projects  are  for individual developers who want to  integrate,  maintain and support their projects  themselves.   JBoss Enterprise products  are for  Enterprise Developers who are building  applications for businesses  and public sector institutions that are  planned to go into production or require  tested, integrated  software with certified patches and  updates, and/or SLA-based support  with a declared  Support Policy   from Red Hat.
JBossRules/Drools 5 Drools 5 può essere, senza essere troppo  pretenziosi, definito una vera rivoluzione. Con Drools 5 non si parla più solamente di BRMS ma di una piattaforma unificata in cui trovano spazio un  Rule Engine  (Expert), un  BRMS  (Guvnor), un  Rules Workflow engine,BPM+Rules  (Flow), un  Event Processing Engine driven by Rules  (Fusion) e un  Solver “ non è ancora stata creata un img per il solver...” Con Drools 5 il BRMS diventa solo uno dei componenti di una piattaforma unificata e completa per realizzare sistemi esperti basati su regole... Una piattaforma di questo tipo è denominata  BLiP , Business Logic integration Platform
Drools Expert Drools Expert è un motore di regole  (Rule Engine)  con un  motore inferenziale di tipo  forward chaining  che sfrutta un implementazione “object-oriented” dell'algoritmo  Rete Drools Expert permette quindi di realizzare sistemi esperti in cui la base di conoscenza è costituita da  fatti  e da un insieme di  business rules  (o production rules). Un software del genere viene classificato come Production Rule System Drools Expert è “costruito” sulle specifiche  JSR-94 JSR-000094 JavaTM Rule Engine API Un Rule Engine è di fatto il fondamento su cui si basano tutti gli altri moduli che costituiscono un BLiP (tra cui il BRMS, Drools Guvnor)
Drools Expert Fonte Drools Official Documentation: http://www.jboss.org/drools
Drools Expert: WorkingMemory I fatti vengono immagazzinati in un'area denominata  WorkingMemory  e non sono quindi parte della Knowledge Base  ( ProductionMemory ). I fatti sono infatti legati ad una  KnowledgeSession  (pensate ad una sessione Hibernate) I fatti non sono altro che oggetti di dominio (pojo) e rappresentano “l'esperienza” che un sistema esperto possiede ed acquisisce rispetto ad un dominio su cui lavora e ragiona In Drools Expert una sessione può essere stateless ( StatelessKnowledgeSession ) o stateful ( StatefulKnowledgeSession ) L'interfaccia  WorkingMemoryEntryPoint  fornisce i metodi di accesso alla WorkingMemory, in modo da poter manipolare i fatti (insert-update-remove) Una WorkingMemory può essere “partizionata” in modo tale da isolare tipologie di fatti fra di loro
Drools Expert: WorkingMemory Fonte Drools Official Documentation: http://www.jboss.org/drools
Drools Expert: ProductionMemory Un qualsiasi motore di inferenza per poter prendere delle  decisioni e compiere azioni deve “confrontare”  la sua esperienzadeterminata dai fatti con un insieme di  regole (Production Rules). Questo processo viene chiamato  Pattern Matching. In Drools vengono caricate non solo regole ma anche funzioni,processi, type models Le regole sono dei predicati espressi nella semplice forma:   when   <condition/s> then   <action/s> Il business di un qualsiasi modulo software è espresso attraverso regole; un linguaggio di programmazione tradizionale tende ad allontanarsi e a realizzare in una forma diversa (sovra-struttura) un insieme di requisiti condizione-azione
Drools Expert: ProductionMemory Expert supporta la definizione di regole in  Java, Python, Groovy e MVEL.  Si possono definire regole attraverso la definizione di DSL!  Le regole possono risiedere in file  *.drl , oppure possono venir caricate da fonti esterne, diverse ed etereogenee ( changeset  feature). C'è supporto per tutti i protocolli definiti in java.net.URL + caricamento da classpath Oltre a file *.drl possono venir caricate decision table in formato *.xls (resource-type DTABLE), il contenuto di una cartella,...     <xs:simpleType name=&quot;ResourceType&quot;>  <xs:restriction base=&quot;xs:string&quot;> <xs:enumeration value=&quot;DRL&quot;/> <xs:enumeration value=&quot;XDRL&quot;/> <xs:enumeration value=&quot;DSL&quot;/> <xs:enumeration value=&quot;DSLR&quot;/> <xs:enumeration value=&quot;DRF&quot;/> <xs:enumeration value=&quot;DTABLE&quot;/> <xs:enumeration value=&quot;PKG&quot;/> <xs:enumeration value=&quot;BRL&quot;/> <xs:enumeration value=&quot;CHANGE_SET&quot;/> </xs:restriction> </xs:simpleType> <xs:simpleType name=&quot;DecTabInpType&quot;> <xs:restriction base=&quot;xs:string&quot;> <xs:enumeration value=&quot;XLS&quot;/> <xs:enumeration value=&quot;CSV&quot;/> </xs:restriction> </xs:simpleType>
Drools Expert: ProductionMemory Tutte le regole (ma anche eventuali processi, decision tables) formano la knowledge base (ProductionMemory), costruita in Expert come un vero e proprio repository. I fatti non sono parte della base di conoscenza ma vengono inseriti a partire da sessioni di lavoro creati da una base di conoscenza su cui si vuole “inferire” qualcosa! Costruire una knowledge base è un processo che richiede risorse--> “cacharla” quando è possibile!
Drools Expert: ProductionMemory Fonte Drools Official Documentation: http://www.jboss.org/drools
Drools Expert: Pattern Matching Torniamo al Pattern Matching... Esistono due modalità con cui un motore inferenziale può ragionare utilizzando regole:  Forward Chaining  e  Backword Chaining Drools Expert usa esclusivamente il meccanismo di Forward Chaining! Il  Forward Chaining  è un meccanismo di ragionamento  data-driven  in quanto il processo parte dai fatti... Tra le regole di inferenza che applica quella basilare è il  modus ponens   in logica... [(A --> B) ∧ A] --> B FC cerca fra le regole finchè non ne trova una che può asserire come vera eseguendone quindi la parte then Sono i fatti iniziali che determinano quale insieme di regole FC deve considerare. La parte then può tramutarsi in azioni, decisioni o aggiornamenti sullo stato dei fatti. Questo meccanismo continua finchè un obiettivo prefissato viene raggiunto. Non è detto che tutte le regole vengano “scatenate”! (anzi)
Drools Expert: Pattern Matching Fonte Drools Official Documentation: http://www.jboss.org/drools
Drools Expert: Rete Expert come algoritmo di pattern matching di tipo forward chaining usa  Rete Rete fu inventato e formalizzato dal Dott. Charles Forgy Rete è l'algoritmo più famoso ed utilizzato dai motori di regole presenti al momento sul mercato... lo usa anche JRules di ILog  Expert implementa una versione di Rete chiamata  ReteOO  ottimizzata per lavorare su oggetti Per una spiegazione esaudiente di come lavora Rete  (non abbiamo tempo :-( ) * Charles Forgy, &quot;On the efficient implementation of production systems.&quot; Ph.D. Thesis, Carnegie-Mellon University, 1979. * Charles Forgy, &quot;Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem&quot;, Artificial Intelligence, 19, pp 17–37, 1982 *  RedHat Documentation
Drools Expert: Demo Fatti:   Ordini,Estratto Conto Regole:   Condizioni che il sito da cui compro applica sugli ordini effettuati e da evadere. Le condizioni sono relative all'anno 2010 Obiettivi/Azioni:   Sapere quanto ho speso e quanti punti premio ho accumulato Stateless/Stateful:   Stateless
Drools Expert: Demo “ Nel caso di un ordine base, l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto comprato ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto e nel caso in cui il cliente utilizzi per l'acquisto dei punti fedeltà,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto; il prezzo viene ulteriormente decrementato di una % di sconto pari a 0.1% * il numero di punti utilizzati. Il saldo punti deve essere incrementato secondo il valore determinato da: punti previsti per l'oggetto – punti fedeltà spes i” “ La spedizione tramite Corriere costa 4 euro, tramite Pacco Celere 3 euro, tramite posta prioritaria 2 euro ”
Drools Expert: Demo “ Nel caso di un ordine base, l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto comprato ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto e nel caso in cui il cliente utilizzi per l'acquisto dei punti fedeltà,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto; il prezzo viene ulteriormente decrementato di una % di sconto pari a 0.1% * il numero di punti utilizzati. Il saldo punti deve essere incrementato secondo il valore determinato da: punti previsti per l'oggetto – punti fedeltà spes i” “ La spedizione tramite Corriere costa 4 euro, tramite Pacco Celere 3 euro, tramite posta prioritaria 2 euro ”

More Related Content

More from JBug Italy

JBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logicJBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logicJBug Italy
 
JBoss AS7 Overview
JBoss AS7 OverviewJBoss AS7 Overview
JBoss AS7 OverviewJBug Italy
 
Intro JBug Milano - January 2012
Intro JBug Milano - January 2012Intro JBug Milano - January 2012
Intro JBug Milano - January 2012JBug Italy
 
JBoss AS7 Webservices
JBoss AS7 WebservicesJBoss AS7 Webservices
JBoss AS7 WebservicesJBug Italy
 
Intro JBug Milano - September 2011
Intro JBug Milano - September 2011Intro JBug Milano - September 2011
Intro JBug Milano - September 2011JBug Italy
 
All the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMSAll the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMSJBug Italy
 
Infinispan and Enterprise Data Grid
Infinispan and Enterprise Data GridInfinispan and Enterprise Data Grid
Infinispan and Enterprise Data GridJBug Italy
 
Drools Introduction
Drools IntroductionDrools Introduction
Drools IntroductionJBug Italy
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - ArquillianJBug Italy
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - GateinJBug Italy
 
May 2010 - Infinispan
May 2010 - InfinispanMay 2010 - Infinispan
May 2010 - InfinispanJBug Italy
 
May 2010 - RestEasy
May 2010 - RestEasyMay 2010 - RestEasy
May 2010 - RestEasyJBug Italy
 
May 2010 - Drools flow
May 2010 - Drools flowMay 2010 - Drools flow
May 2010 - Drools flowJBug Italy
 
May 2010 - Hibernate search
May 2010 - Hibernate searchMay 2010 - Hibernate search
May 2010 - Hibernate searchJBug Italy
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5JBug Italy
 
April 2010 - JBoss Web Services
April 2010 - JBoss Web ServicesApril 2010 - JBoss Web Services
April 2010 - JBoss Web ServicesJBug Italy
 
JavaDayIV - Leoncini Writing Restful Applications With Resteasy
JavaDayIV - Leoncini Writing Restful Applications With ResteasyJavaDayIV - Leoncini Writing Restful Applications With Resteasy
JavaDayIV - Leoncini Writing Restful Applications With ResteasyJBug Italy
 
November 2009 - Walking on thin ice… from SOA to EDA
November 2009 - Walking on thin ice… from SOA to EDANovember 2009 - Walking on thin ice… from SOA to EDA
November 2009 - Walking on thin ice… from SOA to EDAJBug Italy
 
November 2009 - JSR-299 Context & Dependency Injection
November 2009 - JSR-299 Context & Dependency InjectionNovember 2009 - JSR-299 Context & Dependency Injection
November 2009 - JSR-299 Context & Dependency InjectionJBug Italy
 

More from JBug Italy (20)

JBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logicJBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logic
 
JBoss AS7 Overview
JBoss AS7 OverviewJBoss AS7 Overview
JBoss AS7 Overview
 
Intro JBug Milano - January 2012
Intro JBug Milano - January 2012Intro JBug Milano - January 2012
Intro JBug Milano - January 2012
 
JBoss AS7 Webservices
JBoss AS7 WebservicesJBoss AS7 Webservices
JBoss AS7 Webservices
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
 
Intro JBug Milano - September 2011
Intro JBug Milano - September 2011Intro JBug Milano - September 2011
Intro JBug Milano - September 2011
 
All the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMSAll the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMS
 
Infinispan and Enterprise Data Grid
Infinispan and Enterprise Data GridInfinispan and Enterprise Data Grid
Infinispan and Enterprise Data Grid
 
Drools Introduction
Drools IntroductionDrools Introduction
Drools Introduction
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
 
May 2010 - Infinispan
May 2010 - InfinispanMay 2010 - Infinispan
May 2010 - Infinispan
 
May 2010 - RestEasy
May 2010 - RestEasyMay 2010 - RestEasy
May 2010 - RestEasy
 
May 2010 - Drools flow
May 2010 - Drools flowMay 2010 - Drools flow
May 2010 - Drools flow
 
May 2010 - Hibernate search
May 2010 - Hibernate searchMay 2010 - Hibernate search
May 2010 - Hibernate search
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
 
April 2010 - JBoss Web Services
April 2010 - JBoss Web ServicesApril 2010 - JBoss Web Services
April 2010 - JBoss Web Services
 
JavaDayIV - Leoncini Writing Restful Applications With Resteasy
JavaDayIV - Leoncini Writing Restful Applications With ResteasyJavaDayIV - Leoncini Writing Restful Applications With Resteasy
JavaDayIV - Leoncini Writing Restful Applications With Resteasy
 
November 2009 - Walking on thin ice… from SOA to EDA
November 2009 - Walking on thin ice… from SOA to EDANovember 2009 - Walking on thin ice… from SOA to EDA
November 2009 - Walking on thin ice… from SOA to EDA
 
November 2009 - JSR-299 Context & Dependency Injection
November 2009 - JSR-299 Context & Dependency InjectionNovember 2009 - JSR-299 Context & Dependency Injection
November 2009 - JSR-299 Context & Dependency Injection
 

Recently uploaded

Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 

Recently uploaded (9)

Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 

JavadayIV - A look Inside JBoss Rules

  • 1. A look inside JBossRules A look inside JBossRules “ Dal BRMS al BLiP” “ Perchè dovrei usare un Rule Engine? E che cosa ci faccio?” “ Business Rules VS Metodi di Business” “ Oltre il BPM... BPM+Rules” “ E quando ( quando?quasi sempre! ) il business è praticamente scritto su fogli excel???” “ Sistemi Esperti? BRL?? Pattern Matching??? Rete???? AI????? ”
  • 2. A look inside JBossRules Avvertimenti “programmare a regole”, usare motori di regole, può portarci spesso ad “esagerare” e a “ voler sparare ad una mosca con un cannone” ma allo stesso tempo sono sicuro che in moltissime delle applicazioni su cui avete o state lavorando ci sarebbe spazio per le regole... anche perchè (come spero ve ne accorgerete :-) e come spero si possa sfatare un falso mito ) OO programming + rules formano un binomio perfetto!
  • 3.
  • 4. Uno dei coordinatori del JBoss User Group Roma http://www.jbugroma.org http://tech.groups.yahoo.com/group/roma-jbug
  • 5. Membro e sostenitore delle attività del Jug Roma
  • 6. My buzzwords: BRMS – BPM – APM – JBoss platform – CI - GateIn Spring – Agile techniques - Flex – Python – pygtk – Grails - Debian
  • 8.
  • 14. A look inside JBossRules “ I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione” (Albert Einstein)
  • 15. Sistemi Esperti VS Programmazione Apps, Programs, Facts Solutions, Decisions, Actions Expert System Inference Engine Production Memory Knowledge Base Interface REGOLE IF-THEN REGOLE IF-THEN REGOLE IF-THEN RULES REGOLE IF-THEN REGOLE IF-THEN REGOLE IF-THEN FACTS
  • 16. Sistemi Esperti VS Programmazione Un sistema esperto può essere definito come un modulo software che cerca di riprodurre il comportamento e il modo di ragionamento che una o più persone attuerebbero in uno specifico dominio di cui sono esperti. “ Può un sistema esperto emulare le prestazione di un umano? Un sistema esperto non equivale a dire sistema intelligente! Un sistema può apprendere, può essere semi-intelligente ma avrà sempre una conoscenza limitata! Un sistema esperto deve agire in domini limitati !”
  • 17. Sistemi Esperti VS Programmazione Un sistema esperto specifica cosa il nostro modulo deve fare e non come farlo!!! Usa euristiche e non è detto che arrivi sempre a una soluzione e nel caso in cui la trovi non è detto che sia ottima e corretta. Lo sviluppatore non definisce i passi per arrivare alla soluzione, ma essi sono impliciti ! Definire logica di business attraverso un linguaggio di programmazione implica anche (e soprattutto) scrivere come il nostro modulo deve implementarla (if else, switch,loop, polimorfismo,ecc...). Gli algoritmi sono delle sequenze esplicite (scritte quindi dal programmatore) “ Riusciremo sempre a scrivere una logica corretta e robusta?” “E le prestazioni? (es.complessità asintoti ca)” “E se la logica cambia?”
  • 18. Sistemi Esperti VS Programmazione Fonte: http://www.codeproject.com/KB/work/Business_Rules_Systems.aspx z Logic and data separation In un sistema esperto gli oggetti di dominio (fatti) contengono le proprietà distintive dell'oggetto(stato) La logica (i metodi di business dei domain object) viene separata dall'oggetto e definita attraverso un insieme di production rules . Cross domain logic “Decentralizzare” lo stato dalle regole permette di utilizzare da più oggetti, da controllers, uno stesso insieme di regole “ Vi è mai capitato di scrivere in più parti del vostro progetto dei metodi molto simili (a prescindere dal fatto che l'oggetto su cui lavori sia di un tipo o di un altro tipo? Non mentite!!!) “
  • 19. Sistemi Esperti VS Programmazione Fonte: http://www.ibm.com/developerworks/library/ar-busrules2/fig03.gif
  • 20. Sistemi Esperti VS Programmazione Open the box Le regole possono essere gestite ed amministrate non solo dagli sviluppatori e dagli architetti ma addirittura dal cliente stesso (od altri stakeholders) -> concetto di business ownership ... “ Se pensate che questa sia una limitazione al nostro lavoro pensate invece alla possibilità di creare sistemi con una lifetime e una flexibility estrema. E se il sistema sta in piedi per tanto tempo e bene,questa significa: fiducia, nuovi sviluppi, nuovi scenari...” “Business decisions are everywhere...why to hide them?” Open to changes Cambiare, aggiungere, rimuovere regole di business è diverso da cambiare,aggiungere, rimuovere dei metodi o accorgersi di dover stravolgere il design di qualche modulo perchè ci hanno chiesto una change request... “Se la logica di business cambia velocemente un sistema esperto basato su regole può diventare non solo una soluzione ma la soluzione.”
  • 21. Applicazione dei sistemi esperti Un sistema esperto deve essere applicato per risolvere classi di problemi non banali e che non possono essere risolti con algoritmi e “metodi tradizionali” La definizione è sicuramente vera ed è indubbio che molti problemi possono essere solamente risolti con un sistema esperto... ma...
  • 22. Applicazione dei sistemi esperti La logica può anche essere non così complessa ma soggetta a numerosi cambiamenti (aggiunte,variazioni,”potature”) Il business è definito da un numero elevato di condizioni , difficili da assemblare e da “mettere insieme” Il business risiede in “fonti” diverse e difficili da integrare nel codice in modo organico (fogli excel,procedure DBMS,metodi di business “infarciti” di if..else, switch, loop) Un sistema esperto apprende ...molte condizioni che saremmo costretti a scrivere nel codice nel tempo potrebbero venirci gratis
  • 23.
  • 24. Routing e Filtering es. antispam – instradamento di messaggi verso le destinazioni con le migliori caratteristiche
  • 25. Pianificazione e Schedulazione di risorse es. creazione di piani efficienti di distribuzione della forza lavoro in sistemi di WFM
  • 26. Forecasting e Previsioning es. andamento mercati finanziari, previsione del rischio in polizze assicurative, analisi curve di traffico in sistemi di WFM per prevedere una forza lavoro
  • 28. Ricerca di itinerari e TSP (commesso viaggiatore)
  • 30.
  • 31. Each team has exactly 1 match on each playing day.
  • 32. No team must have more than 3 consecutive home or 3 consecutive away matches.
  • 33. No repeaters: no 2 consecutive matches of the same 2 opposing teams. Minimize the total distance traveled by all teams. Il problema può sembrare semplice ma non sono state trovate soluzioni ottime anche per N piccoli!!! Un TSP Fonte: http://blog.athico.com/ Alcune soluzioni battle proven: http://mat.tepper.cmu.edu/TOURN
  • 34. JBossRules/Drools 5 Chiariamo subito che JBossRules e Drools sono la stessa cosa dal punto di vista dei moduli software. Drools diventa JBossRules nella versione “enterprise”, ovvero quando viene venduto all'utente finale con il supporto RedHat e con il bug fixing incluso. Come tutti i progetti JBoss, Drools è sviluppato interamente da committer all'interno della community jboss.org L'ultima release di Drools è la 5.0 del maggio 2009
  • 35. JBossRules/Drools 5 JBoss Community projects are for individual developers who want to integrate, maintain and support their projects themselves. JBoss Enterprise products are for Enterprise Developers who are building applications for businesses and public sector institutions that are planned to go into production or require tested, integrated software with certified patches and updates, and/or SLA-based support with a declared Support Policy from Red Hat.
  • 36. JBossRules/Drools 5 Drools 5 può essere, senza essere troppo pretenziosi, definito una vera rivoluzione. Con Drools 5 non si parla più solamente di BRMS ma di una piattaforma unificata in cui trovano spazio un Rule Engine (Expert), un BRMS (Guvnor), un Rules Workflow engine,BPM+Rules (Flow), un Event Processing Engine driven by Rules (Fusion) e un Solver “ non è ancora stata creata un img per il solver...” Con Drools 5 il BRMS diventa solo uno dei componenti di una piattaforma unificata e completa per realizzare sistemi esperti basati su regole... Una piattaforma di questo tipo è denominata BLiP , Business Logic integration Platform
  • 37. Drools Expert Drools Expert è un motore di regole (Rule Engine) con un motore inferenziale di tipo forward chaining che sfrutta un implementazione “object-oriented” dell'algoritmo Rete Drools Expert permette quindi di realizzare sistemi esperti in cui la base di conoscenza è costituita da fatti e da un insieme di business rules (o production rules). Un software del genere viene classificato come Production Rule System Drools Expert è “costruito” sulle specifiche JSR-94 JSR-000094 JavaTM Rule Engine API Un Rule Engine è di fatto il fondamento su cui si basano tutti gli altri moduli che costituiscono un BLiP (tra cui il BRMS, Drools Guvnor)
  • 38. Drools Expert Fonte Drools Official Documentation: http://www.jboss.org/drools
  • 39. Drools Expert: WorkingMemory I fatti vengono immagazzinati in un'area denominata WorkingMemory e non sono quindi parte della Knowledge Base ( ProductionMemory ). I fatti sono infatti legati ad una KnowledgeSession (pensate ad una sessione Hibernate) I fatti non sono altro che oggetti di dominio (pojo) e rappresentano “l'esperienza” che un sistema esperto possiede ed acquisisce rispetto ad un dominio su cui lavora e ragiona In Drools Expert una sessione può essere stateless ( StatelessKnowledgeSession ) o stateful ( StatefulKnowledgeSession ) L'interfaccia WorkingMemoryEntryPoint fornisce i metodi di accesso alla WorkingMemory, in modo da poter manipolare i fatti (insert-update-remove) Una WorkingMemory può essere “partizionata” in modo tale da isolare tipologie di fatti fra di loro
  • 40. Drools Expert: WorkingMemory Fonte Drools Official Documentation: http://www.jboss.org/drools
  • 41. Drools Expert: ProductionMemory Un qualsiasi motore di inferenza per poter prendere delle decisioni e compiere azioni deve “confrontare” la sua esperienzadeterminata dai fatti con un insieme di regole (Production Rules). Questo processo viene chiamato Pattern Matching. In Drools vengono caricate non solo regole ma anche funzioni,processi, type models Le regole sono dei predicati espressi nella semplice forma: when <condition/s> then <action/s> Il business di un qualsiasi modulo software è espresso attraverso regole; un linguaggio di programmazione tradizionale tende ad allontanarsi e a realizzare in una forma diversa (sovra-struttura) un insieme di requisiti condizione-azione
  • 42. Drools Expert: ProductionMemory Expert supporta la definizione di regole in Java, Python, Groovy e MVEL. Si possono definire regole attraverso la definizione di DSL! Le regole possono risiedere in file *.drl , oppure possono venir caricate da fonti esterne, diverse ed etereogenee ( changeset feature). C'è supporto per tutti i protocolli definiti in java.net.URL + caricamento da classpath Oltre a file *.drl possono venir caricate decision table in formato *.xls (resource-type DTABLE), il contenuto di una cartella,... <xs:simpleType name=&quot;ResourceType&quot;> <xs:restriction base=&quot;xs:string&quot;> <xs:enumeration value=&quot;DRL&quot;/> <xs:enumeration value=&quot;XDRL&quot;/> <xs:enumeration value=&quot;DSL&quot;/> <xs:enumeration value=&quot;DSLR&quot;/> <xs:enumeration value=&quot;DRF&quot;/> <xs:enumeration value=&quot;DTABLE&quot;/> <xs:enumeration value=&quot;PKG&quot;/> <xs:enumeration value=&quot;BRL&quot;/> <xs:enumeration value=&quot;CHANGE_SET&quot;/> </xs:restriction> </xs:simpleType> <xs:simpleType name=&quot;DecTabInpType&quot;> <xs:restriction base=&quot;xs:string&quot;> <xs:enumeration value=&quot;XLS&quot;/> <xs:enumeration value=&quot;CSV&quot;/> </xs:restriction> </xs:simpleType>
  • 43. Drools Expert: ProductionMemory Tutte le regole (ma anche eventuali processi, decision tables) formano la knowledge base (ProductionMemory), costruita in Expert come un vero e proprio repository. I fatti non sono parte della base di conoscenza ma vengono inseriti a partire da sessioni di lavoro creati da una base di conoscenza su cui si vuole “inferire” qualcosa! Costruire una knowledge base è un processo che richiede risorse--> “cacharla” quando è possibile!
  • 44. Drools Expert: ProductionMemory Fonte Drools Official Documentation: http://www.jboss.org/drools
  • 45. Drools Expert: Pattern Matching Torniamo al Pattern Matching... Esistono due modalità con cui un motore inferenziale può ragionare utilizzando regole: Forward Chaining e Backword Chaining Drools Expert usa esclusivamente il meccanismo di Forward Chaining! Il Forward Chaining è un meccanismo di ragionamento data-driven in quanto il processo parte dai fatti... Tra le regole di inferenza che applica quella basilare è il modus ponens in logica... [(A --> B) ∧ A] --> B FC cerca fra le regole finchè non ne trova una che può asserire come vera eseguendone quindi la parte then Sono i fatti iniziali che determinano quale insieme di regole FC deve considerare. La parte then può tramutarsi in azioni, decisioni o aggiornamenti sullo stato dei fatti. Questo meccanismo continua finchè un obiettivo prefissato viene raggiunto. Non è detto che tutte le regole vengano “scatenate”! (anzi)
  • 46. Drools Expert: Pattern Matching Fonte Drools Official Documentation: http://www.jboss.org/drools
  • 47. Drools Expert: Rete Expert come algoritmo di pattern matching di tipo forward chaining usa Rete Rete fu inventato e formalizzato dal Dott. Charles Forgy Rete è l'algoritmo più famoso ed utilizzato dai motori di regole presenti al momento sul mercato... lo usa anche JRules di ILog Expert implementa una versione di Rete chiamata ReteOO ottimizzata per lavorare su oggetti Per una spiegazione esaudiente di come lavora Rete (non abbiamo tempo :-( ) * Charles Forgy, &quot;On the efficient implementation of production systems.&quot; Ph.D. Thesis, Carnegie-Mellon University, 1979. * Charles Forgy, &quot;Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem&quot;, Artificial Intelligence, 19, pp 17–37, 1982 * RedHat Documentation
  • 48. Drools Expert: Demo Fatti: Ordini,Estratto Conto Regole: Condizioni che il sito da cui compro applica sugli ordini effettuati e da evadere. Le condizioni sono relative all'anno 2010 Obiettivi/Azioni: Sapere quanto ho speso e quanti punti premio ho accumulato Stateless/Stateful: Stateless
  • 49. Drools Expert: Demo “ Nel caso di un ordine base, l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto comprato ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto e nel caso in cui il cliente utilizzi per l'acquisto dei punti fedeltà,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto; il prezzo viene ulteriormente decrementato di una % di sconto pari a 0.1% * il numero di punti utilizzati. Il saldo punti deve essere incrementato secondo il valore determinato da: punti previsti per l'oggetto – punti fedeltà spes i” “ La spedizione tramite Corriere costa 4 euro, tramite Pacco Celere 3 euro, tramite posta prioritaria 2 euro ”
  • 50. Drools Expert: Demo “ Nel caso di un ordine base, l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto comprato ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto ed incrementando il saldo punti fedeltà ” “ Nel caso di un ordine su un oggetto che prevede uno sconto e nel caso in cui il cliente utilizzi per l'acquisto dei punti fedeltà,l'estratto conto del cliente deve essere aggiornato addebitando il prezzo dell'oggetto a cui viene applicata la % di sconto; il prezzo viene ulteriormente decrementato di una % di sconto pari a 0.1% * il numero di punti utilizzati. Il saldo punti deve essere incrementato secondo il valore determinato da: punti previsti per l'oggetto – punti fedeltà spes i” “ La spedizione tramite Corriere costa 4 euro, tramite Pacco Celere 3 euro, tramite posta prioritaria 2 euro ”
  • 51. Drools Expert: Demo Plugin per Eclipse 3.4 (e superiori) per poter creare progetti Drools http://www.jboss.org/drools/downloads.html http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk JSE 1.5.x Componenti necessari: - drools-core.jar: il rule engine di expert - drools-compiler.jar: compilazione ed installazione delle regole nella production memory - drools-api.jar: interfacce e factories Extra: - drools-decisiontables.jar: compilatore per regole inserite in file xls e csv Bug: org.eclipse.jdt.core_3.5.1.v_972_R35x.jar va messo come external jar
  • 52. Drools Expert: Demo Editor testaule e grafico per creare business rule Wizard per creare Drools Project Rules Debugging Rules Code Assist Eclipse View sui vari componenti di Expert: WorkingMemoryView AuditView AgendaView
  • 53. Drools Expert: Demo Rule Gui Editor
  • 54. Drools Expert: Demo package it.gmarigi.javaday2010.drools.rules import it.gmarigi.javaday2010.drools.pojo.Ordine; import it.gmarigi.javaday2010.drools.pojo.Bilancio; rule &quot;acquisto base&quot; when bilancio : Bilancio() Ordine( $nomeOggetto:nomeOggetto, $prezzo : prezzo, $puntiAcquisiti:puntiAcquisiti, puntiSpesi == null, scontoUsato == null) then bilancio.aggiungiOrdine( $nomeOggetto,$prezzo,$puntiAcquisiti); end rule &quot;acquisto con sconto&quot; when bilancio : Bilancio() Ordine( $nomeOggetto:nomeOggetto, $prezzo : prezzo, $scontoUsato : scontoUsato, $puntiAcquisiti:puntiAcquisiti, puntiSpesi == null, scontoUsato != null) then bilancio.aggiungiOrdine($nomeOggetto,$prezzo-(($prezzo*$scontoUsato)/100),$puntiAcquisiti); end Ordini.drl
  • 55. Drools Expert: Demo rule &quot;acquisto con sconto ed utilizzo punti&quot; when bilancio : Bilancio() Ordine( $nomeOggetto:nomeOggetto, $prezzo : prezzo, $scontoUsato : scontoUsato, $puntiAcquisiti:puntiAcquisiti, $puntiSpesi:puntiSpesi, puntiSpesi != null, scontoUsato != null) then bilancio.aggiungiOrdine($nomeOggetto, $prezzo - (($prezzo*$scontoUsato)/100) (($prezzo*($puntiSpesi*0.1f))/100) ,$puntiAcquisiti-$puntiSpesi); end rule &quot;Spedizione Corriere&quot; when $bilancio : Bilancio() Ordine(tipoSpedizione==&quot;CORRIERE&quot;) then $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+4f); end rule &quot;Spedizione Pacco Celere&quot; when $bilancio : Bilancio() Ordine(tipoSpedizione==&quot;PACCO CELERE&quot;) then $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+3f); end
  • 56. Drools Expert: Demo rule &quot;Spedizione Posta Prioritaria&quot; when $bilancio : Bilancio() Ordine(tipoSpedizione==&quot;POSTA PRIORITARIA&quot;) then $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+2f); end rule &quot;Stampa Bilancio&quot; salience -100 when $bilancio : Bilancio() then System.out.println(&quot;Bilancio di[&quot;+$bilancio.getNominativo()+&quot;]Somma Spesa:&quot;+ $bilancio.getSommaSpesa()+&quot;(euro)Punti Accumulati:&quot;+ $bilancio.getPuntiTotali() ); end Il rule language di Drools è molto potente e completo -> doc ufficiale Il simbolo $ fa sì che la variabile sia utilizzabile anche nella parte then di una regola Il rule language è molto “java-oriented” L'azione definita nella regola &quot;Stampa Bilancio&quot; è un azione “didattica”;questa regola non è propriamente una business rule
  • 57. Drools Expert: Demo // Creazione Working memory(Base di conoscenza ) kbase = KnowledgeUtil. readKnowledgeBase (); // Creazione sessione ksession = kbase.newStatefulKnowledgeSession(); // Aggiunta event handlers alla sessione (auditing sui componenti del rule engine) KnowledgeUtil. addCustomListeners (ksession); //Logging su file logger = KnowledgeRuntimeLoggerFactory. newFileLogger (ksession, &quot;ordini&quot; ); /***********************CREAZIONE FATTI**********************************/ Ordine ordine1 = new Ordine( &quot;RAM 2GB&quot; , &quot;15/03/2010&quot; ,100f); ordine1.setPuntiAcquisiti(50); ordine1.setTipoSpedizione( &quot;CORRIERE&quot; ); ........ Bilancio bilancio = new Bilancio(); bilancio.setNominativo( &quot;Antonio Rossi&quot; ); /**********************************************************************/ // Inserimento dei fatti nella working memory ksession.insert(ordine1); ksession.insert(ordine2); ksession.insert(ordine3); ksession.insert(ordine4); ksession.insert(bilancio); //Pattern matching con tutte le production rules ksession.fireAllRules(); La sessione di lavoro valuterà tutte le regole sui fatti inseriti -> fireAllRules
  • 58. Drools Expert: Demo Dovendo valutare tutte le regole della production memory, per un determinato set di fatti è possibile che esattamente tutte le regole definite vengano soddisfatte (con la conseguente azione associata) Nel nostro caso quindi è molto probabile che l'azione associata alla regola “Stampa Bilancio” venga eseguita non per ultima! (e quindi non sapremo il bilancio finale relativo ai nostri 4 ordini ) Quello che succede è che esistono più Activations che vanno in conflitto fra di loro. Le activations vengono accumulate in un modulo del Rule Engine chiamato Agenda Agenda deve avere una funzione che gli permette di risolvere i vari conflitti fra regole e per poterli risolvere deve attuare una determinata strategia
  • 59. Drools Expert: Demo rule &quot;Stampa Bilancio&quot; salience -100 when $bilancio : Bilancio() then System.out.println(&quot;Bilancio di[&quot;+$bilancio.getNominativo()+&quot;]Somma Spesa:&quot;+ $bilancio.getSommaSpesa()+&quot;(euro)Punti Accumulati:&quot;+ $bilancio.getPuntiTotali() ); end Si può istruire Agenda (e quindi suggerirle una strategia) applicando una priorità di esecuzione sulle regole (salience) Per default tutte le regole hanno un salience pari a 0. Mettendo sulla regola &quot;Stampa Bilancio&quot; una salience negativa siamo sicuri che l'azione di questa regola verrà eseguita per ultima
  • 60. Drools Expert: Demo “ Vorrei che gli ordini siano stampati in ordine sulla base della loro data di evasione...” Nella sessione vista avevano un motore inferenziale che non aveva bisogno di aggiornare (e quindi acquisire esperienza) la sua base di conoscenza con lo stato interno dei fatti! Questa sessione era per natura una sessione stateless; sessioni di questo tipo vengono usate per decision service type scenarios (StatelessKnowledgeSession) Nella demo abbiamo usato una sessione stateful (StatefulKnowledgeSession) solamente per poter sfruttare il metodo fireAllRules()...ma la natura era stateless Per garantire questo requisito il motore inferenziale deve quantomeno poter ordinare sulla base della data evasione i fatti che deve valutare... questa è inferenza!
  • 61. Drools Expert: Demo rule &quot;Stampa Ordini&quot; salience -100 when $ordine : Ordine( $data : data) not Ordine( data < $data) then System.out.println(&quot;Ordine: &quot;+$ordine); retract($ordine); end La regola “Stampa Ordine” istruisce il motore di regole a rimuovere un fatto dalla WorkingMemory... in questo modo avremo una stampa degli ordini coerente con il requisito Otterremo anche che al termine della valutazione di questa regola la working memory non avrà più esperienza di alcun fatto (per questo va eseguita per ultima altrimenti comprometterebbe le altre regole di business) Sulla WM si può fare insert,update,retract
  • 62. BRMS: Drools Guvnor Il BRMS (Business Rules Management System) in Drools 5 è realizzato dal modulo Drools Guvnor Un BRMS non è altro che un ambiente (tipicamente una web-application) che permette di lavorare e di gestire set di business rules offrendo delle viste user friendly Attraverso il BRMS il dominio e le regole su cui esso si basa, vengono resi gestibili ed amministrabili da diversi stakeholders : business analysts,developers,il cliente stesso. Occorre anche individuare amministratori di un BRMS! Guvnor permette di fare versioning delle regole (historicals assets) e di organizzare le regole in categorie. Le regole in Guvnor si chiamano Assets Possono essere creati users con differenti ruoli sul BRMS
  • 63. BRMS: Drools Guvnor Guvnor è una web-application (.war); può essere “deployata” su qualsiasi Application Server http://<your-app-server>/drools-guvnor Usa come repository per gli assets e per tutti gli oggetti che amministra Apache JackRabbit . Per default il data store è su file, potete comunque decidere di mettere il repository su un qualsiasi RDBMS Potete sincronizzare sul repository di Guvnor i progetti Drools che create con Eclipse direttamente dall'IDE Il Rule GUI Editor in Guvnor ha molte più funzionalità di quello che c'è in Eclipse... (non bisogna per forza essere degli esperti in scrittura di rules per usare Guvnor )
  • 67.
  • 68. Drools Official Blog http://blog.athico.com
  • 69. Drools Mailing Lists http://www.jboss.org/drools/lists.html
  • 71. JBoss User Group Roma http:// www.jbugroma.org
  • 72. BRMS: Drools Guvnor Grazie per aver assistito al talk!!!