SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Drools Flow
   Dal process workflow al rules workflow

               Cagliari Jug Sardegna – 29/05/2010 -




giomarigi    Giovanni Marigi – JBoss User Group Roma Coordinator -
About me

✔   System Architect per ValueTeam SPA
http://www.valueteam.com

✔   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




          giomarigi             Giovanni Marigi – JBoss User Group Roma Coordinator -
BRMS




giomarigi   Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools 5: BLiP




Drools           Drools            Drools            Drools
Expert           Flow              Fusion            Guvnor


            Business Logic integration System

giomarigi        Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools 5: BLiP

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(Flow)
un Event Processing Engine driven by Rules (Fusion)
e un Planner

Unica piattaforma per sviluppo di business solutions
(driven by rules not by hard coded decisions!!!)
Technology Overlap
Business Overlap




     giomarigi       Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

FlowChart → Business Workflow →
Business & Rules Workflow → Drools Flow

Drools Flow è un workflow engine che integra
e unifica processi e regole

Processi e regole vengono tipicamente
considerati come paradigmi distinti e
scarsamente integrabili nella realizzazioni della
business logic




    giomarigi     Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

Integrazione
- assets diversi ma integrati nella definizione di
workflow: rules, processes, events, DSL items, actions

- diversi paradigmi nella realizzazione di workflow
decision services vs process rules

Unificazione
- Common BLiP API

 - Support for different process languages
(RuleFlow language – WS-BPEL – jPDL - OSWorkflow)

- IDE, unified tooling, auditing and debugging


     giomarigi        Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Process Workflow caratteristiche
  Control flow
  Procedurale
  Long-living
  Focus è sull'integrazione con sistemi esterni


Rules Workflow caratteristiche
  Data flow (rules flow)
  Dichiarativo
  Domini specifici
  Focus è sulla business logic




     giomarigi       Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Rules Workflow vantaggi
(Drools Flow Official User Guide www.jboss.org/drools)
Simplicity: Complex decisions are usually easier to specify using a set of
rules. Rules can pinpoint complex business logic more easily, using their
advanced constraint language. Multiple rules can be combined, each
describing a part of the business logic.

Agility: Rules and processes can have a separate life cycle. This means that
we can change the rules describing some crucial decision points without having
to change the process itself. Rules can be added, removed or modified to fine-
tune the behavior of the process to the constantly evolving requirements and
environment.

Different scope: Rules can be reused across processes or outside processes.
Therefore, your business logic is not locked inside your processes.




       giomarigi              Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Rules Workflow vantaggi
(Drools Flow Official User Guide www.jboss.org/drools)
Declarativeness: Focus on describing "what" instead of "how".

Granularity: It is easy to write simple rules that handle specific circumstances.
Processes are more suited to describe the overall control flow but tend to
become very complex if they also need to describe a lot of exceptional
situations.

Performance: Rule evaluation is optimized.

Advanced condition and action language: Rule languages support
advanced features like custom functions, collections, conditional elements,
including quantifiers, etc.

High-level: By using DSLs, business editors, decision tables, and decision
trees, your business logic could be described in a way that can be understood
(and possibly even modified) by business users.



       giomarigi              Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
 Nei rules workflow la logica decisonale viene separata
 dalla logica di definizione del processo
 (decision service)

 I blocchi decisionali vengono realizzati attraverso
 business rules


rule "acquisto con sconto"
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




         giomarigi                Giovanni Marigi – JBoss User Group Roma Coordinator -
generic
                                                      Drools Flow




                                        ?
                                                                 Decision
                                                                 Services
SCOPE




                   Process
                    Rules
specific




              tightly coupled            COUPLING               loosely coupled



           giomarigi            Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
- Download Drools jar
- Download Drools Eclipse Plugin (3.4.x – 3.5.x)
Ancora non disponibile plugin per IntelliJ IDEA (working in progress)




                                           Drools Runtime → folder with drools jar




      giomarigi            Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Rich palette
start/end
ruleflow group
split/join
wait states, timers, events,
actions (mvel or java action)
composite nodes, subflows
human tasks

Easy to use work items
sending email
finding files
FTP
google calendar
instant messaging
REST services
RSS feeds
executing system commands
transforming data




       giomarigi                Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow




giomarigi   Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://drools.org/drools-5.0/process"
     xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
     type="RuleFlow"
     name="ruleflow"
     id="com.sample.ruleflow"
     package-name="com.sample" >

 <header/>

 <nodes>
  <start id="1" name="Start" x="16" y="16" />
  <actionNode id="2" name="Hello" x="128" y="16" >
   <action type="expression" dialect="mvel">System.out.println("Hello World");</action>
  </actionNode>
  <end id="3" name="End" x="240" y="16" />
 </nodes>

 <connections>
  <connection from="1" to="2" />
  <connection from="2" to="3" />
 </connections>

</process>




         giomarigi                   Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
RuleFlowProcessFactory factory =
  RuleFlowProcessFactory.createProcess("org.drools.HelloWorldRuleSet");

factory
   // Header
   .name("HelloWorldRuleSet")
   .version("1.0")
   .packageName("org.drools")
   // Nodes
   .startNode(1).name("Start").done()
   .ruleSetNode(2)
      .name("RuleSet")
      .ruleFlowGroup("someGroup").done()
   .endNode(3).name("End").done()
   // Connections
   .connection(1, 2)
   .connection(2, 3);

RuleFlowProcess process = factory.validate().getProcess();




        giomarigi                Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

Eseguire un Drools Rule Flow Process
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource("Prenotazioni.rf"),ResourceType.DRF );

KnowledgeBuilderErrors errors = kbuilder.getErrors();       In una knowledge base drools
if (errors.size() > 0) {
    for (KnowledgeBuilderError error: errors) {
                                                            ci sono tutti gli assets:
       System.err.println(error);                           rules, decison tables, process
    }
    throw new IllegalArgumentException("Could not parse knowledge.");
}

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.startProcess("it.gmarigi.drools.PrenotazioniProcess");
ksession.fireAllRules();




         giomarigi               Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

RuleFlow
Tutte le regole, processi, decision tables
formano la knowledge base (ProductionMemory), costruita in
Drools come un vero e proprio repository

Costruire una knowledge base è un processo che richiede
risorse--> “cacharla” quando è possibile!

Le regole sono dei predicati espressi nella semplice forma:
   when
    <condition/s>
   then
    <action/s>




     giomarigi          Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

RuleFlow
Drools 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,...




      giomarigi           Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

RuleFlow
“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à spesi”

“La spedizione tramite Corriere costa 4 euro, tramite Pacco Celere 3 euro, tramite posta
prioritaria 2 euro”




        giomarigi                Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

 RuleFlow




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



      giomarigi        Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
RuleFlow
package it.gmarigi.javaday2010.drools.rules

import it.gmarigi.drools.pojo.Ordine;
import it.gmarigi.drools.pojo.Bilancio;

rule "acquisto base"
ruleflow-group 'acquisti'
when
  bilancio : Bilancio()
  Ordine(
  $nomeOggetto:nomeOggetto,
  $prezzo : prezzo,
  $puntiAcquisiti:puntiAcquisiti,
  puntiSpesi == null,
  scontoUsato == null)
then
     bilancio.aggiungiOrdine(
           $nomeOggetto,$prezzo,$puntiAcquisiti);
end

rule "acquisto con sconto"
ruleflow-group 'acquisti'
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




         giomarigi                   Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
RuleFlow
rule "Spedizione Corriere"
ruleflow-group 'spedizioni'
when
  $bilancio : Bilancio()
  Ordine(tipoSpedizione=="CORRIERE")
then
  $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+4f);
end

rule "Spedizione Pacco Celere"
ruleflow-group 'spedizioni'
when
  $bilancio : Bilancio()
  Ordine(tipoSpedizione=="PACCO CELERE")
then
  $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+3f);
end



Non ci resta che usare le regole in un process workflow...




       giomarigi             Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
RuleFlow




   giomarigi   Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
 RuleFlow
Si possono definire regole (constraints) anche sui nodi
decisionali del flow



 Uno Split (Spedizioni Tipo Cliente)
 è un nodo decisonale




        giomarigi             Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
RuleFlow




   giomarigi   Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow

Pluggable work items

Nodi che definiscono azioni, comportamenti specifici
per un particolare dominio

Possibilità di estendere le azioni standard offerte da
Flow e di utilizzarle nell'IDE


- domain-specific
- declarative (what, not how)
- high-level
- customizable to the context



     giomarigi       Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Pluggable work items

1) Create a work item definition (mvel) an put it in your
classpath

PrenotazioneAereaDefinitions.conf
import org.drools.process.core.datatype.impl.type.ObjectDataType;
[
  [
    "name" : "Prenotazione Aerea",
    "parameters" : [
         "Passeggero" : new ObjectDataType("it.gmarigi.drools.Passeggero"),
         "Aereo" : new ObjectDataType("it.gmarigi,drools.Aereo"),
         "Carta di Credito" : new ObjectDataType("it.gmarigi.drools.CartaDiCredito")
    ],
    "displayName" : "Prenotazione Aerea",
    "icon" : "icons/aereo.gif"
  ]
]



       giomarigi               Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Pluggable work items

2)Register the work definitions with the knowledge base
configuration.
Put a drools.rulebase.conf file in META-INF dir
drools.workDefinitions = WorkDefinitions.conf PrenotazioneAereaDefinitions.conf




       giomarigi              Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Pluggable work items

3) Create a work item handler (what work item must do)

public class PrenotazioneAereaWorkItemHandler implements WorkItemHandler {

    PrenotazioniService prenotazioniService;

     public void executeWorkItem(WorkItem workItem,WorkItemManager manager) {
      Passeggero passeggero = (Passeggero) workItem.getParameter("passeggero");
      Aereo aereo = (Aereo) workItem.getParameter("aereo");
      CartaDiCredito cc = (CartaDiCredito) workItem.getParameter("cc");
      try {
        prenotazioniService.prenota(passeggero,aereo, cc);
       manager.completeWorkItem(workItem.getId(), null);
      } catch (Exception e) {
        e.printStackTrace();
        manager.abortWorkItem(workItem.getId());
      }
    }
}


         giomarigi             Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Process Persistence

- Default process instances non sono persistenti
- Persistenza si crea attraverso JPA (Hibernate-IBatis-
TopLink,ecc...)

- Se la scelta è Hibernate:
    drools-persistence-jpa (org.drools)
    persistence-api-1.0.jar (javax.persistence)
    hibernate-entitymanager-3.4.0.GA.jar (org.hibernate)
    hibernate-annotations-3.4.0.GA.jar (org.hibernate)
    hibernate-commons-annotations-3.1.0.GA.jar (org.hibernate)
    hibernate-core-3.3.0.SP1.jar (org.hibernate)
    dom4j-1.6.1.jar (dom4j)
    jta-1.0.1B.jar (javax.transaction)
    btm-1.3.2.jar (org.codehaus.btm)
    javassist-3.4.GA.jar (javassist)
    slf4j-api-1.5.2.jar (org.slf4j)
    slf4j-jdk14-1.5.2.jar (org.slf4j)
    h2-1.0.77.jar (com.h2database)
    commons-collections-3.2.jar (commons-collections)




     giomarigi                      Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Process Persistence
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence version="1.0" xsi:schemaLocation=
  "http://java.sun.com/xml/ns/persistence
   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
   http://java.sun.com/xml/ns/persistence/orm
   http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
 xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/persistence">

 <persistence-unit name="org.drools.persistence.jpa">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>jdbc/processInstanceDS</jta-data-source>
  <class>org.drools.persistence.session.SessionInfo</class>
  <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
  <class>org.drools.persistence.processinstance.ProcessInstanceEventInfo</class>
  <class>org.drools.persistence.processinstance.WorkItemInfo</class>

  <properties>
   <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
   <property name="hibernate.max_fetch_depth" value="3"/>
   <property name="hibernate.hbm2ddl.auto" value="update"/>
   <property name="hibernate.show_sql" value="true"/>
   <property name="hibernate.transaction.manager_lookup_class"
          value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
  </properties>
 </persistence-unit>
</persistence>




          giomarigi                        Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Process Persistence
// create the entity manager factory and register it in the environment
EntityManagerFactory emf =
    Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );

// create a new knowledge session that uses JPA to store the runtime state
StatefulKnowledgeSession ksession =
    JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
int sessionId = ksession.getId();

int processId = ksession.startProcess( "MyProcess" );
ksession.dispose();

// recreate the session from database using the sessionId
ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId,
kbase, null, env );




        giomarigi                  Giovanni Marigi – JBoss User Group Roma Coordinator -
Drools Flow
Process Persistence
Quando l'istanza viene salvata?

Viene salvata (ed aggiornata) ad ogni safe-point che si
incontra nel processo

Un safe-point coincide con un nodo action




     giomarigi        Giovanni Marigi – JBoss User Group Roma Coordinator -
Keep Moving

✔Drools 5
http://www.jboss.org/drools

✔Drools Official Blog
http://blog.athico.com

✔Drools Mailing List & Forum
http://drools-java-rules-engine.46999.n3.nabble.com/

✔Drools Wiki
http://community.jboss.org/wiki/JBossRules

✔JBoss User Group Roma
http://www.jbugroma.org




       giomarigi              Giovanni Marigi – JBoss User Group Roma Coordinator -
???




giomarigi   Giovanni Marigi – JBoss User Group Roma Coordinator -

Mais conteúdo relacionado

Destaque

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
 
October 2009 - News From JBoss World 09
October 2009 - News From JBoss World 09October 2009 - News From JBoss World 09
October 2009 - News From JBoss World 09JBug Italy
 
Revelados b/n Estenopeicas
Revelados b/n   EstenopeicasRevelados b/n   Estenopeicas
Revelados b/n Estenopeicascynthia
 
The Global Leadership Challenge
The Global Leadership ChallengeThe Global Leadership Challenge
The Global Leadership ChallengeDavidCozens
 
Advertising
AdvertisingAdvertising
Advertisingmssd
 

Destaque (10)

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
 
October 2009 - News From JBoss World 09
October 2009 - News From JBoss World 09October 2009 - News From JBoss World 09
October 2009 - News From JBoss World 09
 
Revelados b/n Estenopeicas
Revelados b/n   EstenopeicasRevelados b/n   Estenopeicas
Revelados b/n Estenopeicas
 
The Global Leadership Challenge
The Global Leadership ChallengeThe Global Leadership Challenge
The Global Leadership Challenge
 
time to grow.key
time to grow.keytime to grow.key
time to grow.key
 
AS7
AS7AS7
AS7
 
Geo Gebra
Geo GebraGeo Gebra
Geo Gebra
 
AS7 and CLI
AS7 and CLIAS7 and CLI
AS7 and CLI
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
 
Advertising
AdvertisingAdvertising
Advertising
 

Semelhante a May 2010 - Drools flow

La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...it Consult
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 
Plone in Regione Emilia-Romagna
Plone in Regione Emilia-RomagnaPlone in Regione Emilia-Romagna
Plone in Regione Emilia-RomagnaGiovanni Grazia
 
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Codemotion
 
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoEssere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoPMexpo
 
Meetup milano #4 Come esternalizzare i log di mule
Meetup milano #4   Come esternalizzare i log di muleMeetup milano #4   Come esternalizzare i log di mule
Meetup milano #4 Come esternalizzare i log di muleGonzalo Marcos Ansoain
 
Back to Basics, webinar 6: Messa in esercizio
Back to Basics, webinar 6: Messa in esercizioBack to Basics, webinar 6: Messa in esercizio
Back to Basics, webinar 6: Messa in esercizioMongoDB
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value compositionOpen Makers Italy
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2Bkino2k
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)brossi676
 
Drupal
DrupalDrupal
DrupalNaLUG
 
Introducing PRSs and Drools (in Italian)
Introducing PRSs and Drools (in Italian)Introducing PRSs and Drools (in Italian)
Introducing PRSs and Drools (in Italian)Stefano Bragaglia
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLSinergia Totale
 
Come l’Open Source può essere alla base di un business di successo: il caso H...
Come l’Open Source può essere alla base di un business di successo: il caso H...Come l’Open Source può essere alla base di un business di successo: il caso H...
Come l’Open Source può essere alla base di un business di successo: il caso H...MariaDB plc
 
Windows Workflow Foundation 4
Windows Workflow Foundation 4Windows Workflow Foundation 4
Windows Workflow Foundation 4Felice Pescatore
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3DomusDotNet
 

Semelhante a May 2010 - Drools flow (20)

La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Plone in Regione Emilia-Romagna
Plone in Regione Emilia-RomagnaPlone in Regione Emilia-Romagna
Plone in Regione Emilia-Romagna
 
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
Continuous Delivery Database - Diego Mauricio Lagos Morales - Codemotion Rome...
 
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoEssere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
 
Meetup milano #4 Come esternalizzare i log di mule
Meetup milano #4   Come esternalizzare i log di muleMeetup milano #4   Come esternalizzare i log di mule
Meetup milano #4 Come esternalizzare i log di mule
 
Back to Basics, webinar 6: Messa in esercizio
Back to Basics, webinar 6: Messa in esercizioBack to Basics, webinar 6: Messa in esercizio
Back to Basics, webinar 6: Messa in esercizio
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value composition
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)
 
AngularJS - directives
AngularJS - directivesAngularJS - directives
AngularJS - directives
 
Drupal
DrupalDrupal
Drupal
 
Introducing PRSs and Drools (in Italian)
Introducing PRSs and Drools (in Italian)Introducing PRSs and Drools (in Italian)
Introducing PRSs and Drools (in Italian)
 
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
 
Come l’Open Source può essere alla base di un business di successo: il caso H...
Come l’Open Source può essere alla base di un business di successo: il caso H...Come l’Open Source può essere alla base di un business di successo: il caso H...
Come l’Open Source può essere alla base di un business di successo: il caso H...
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Windows Workflow Foundation 4
Windows Workflow Foundation 4Windows Workflow Foundation 4
Windows Workflow Foundation 4
 
Software Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpASoftware Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpA
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3
 

Mais de JBug Italy

JBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testingJBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testingJBug Italy
 
Camel and JBoss
Camel and JBossCamel and JBoss
Camel and JBossJBug Italy
 
Intro jbug milano_26_set2012
Intro jbug milano_26_set2012Intro jbug milano_26_set2012
Intro jbug milano_26_set2012JBug Italy
 
Faster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzzFaster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzzJBug Italy
 
Infinispan,Lucene,Hibername OGM
Infinispan,Lucene,Hibername OGMInfinispan,Lucene,Hibername OGM
Infinispan,Lucene,Hibername OGMJBug 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
 
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
 
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 - Hibernate search
May 2010 - Hibernate searchMay 2010 - Hibernate search
May 2010 - Hibernate searchJBug Italy
 
April 2010 - JBoss Web Services
April 2010 - JBoss Web ServicesApril 2010 - JBoss Web Services
April 2010 - JBoss Web ServicesJBug 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
 
November 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss ToolsNovember 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss ToolsJBug Italy
 
October 2009 - JBoss Cloud
October 2009 - JBoss CloudOctober 2009 - JBoss Cloud
October 2009 - JBoss CloudJBug Italy
 

Mais de JBug Italy (20)

JBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testingJBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testing
 
Camel and JBoss
Camel and JBossCamel and JBoss
Camel and JBoss
 
Intro jbug milano_26_set2012
Intro jbug milano_26_set2012Intro jbug milano_26_set2012
Intro jbug milano_26_set2012
 
Faster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzzFaster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzz
 
Infinispan,Lucene,Hibername OGM
Infinispan,Lucene,Hibername OGMInfinispan,Lucene,Hibername OGM
Infinispan,Lucene,Hibername OGM
 
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
 
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
 
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 - Hibernate search
May 2010 - Hibernate searchMay 2010 - Hibernate search
May 2010 - Hibernate search
 
April 2010 - JBoss Web Services
April 2010 - JBoss Web ServicesApril 2010 - JBoss Web Services
April 2010 - JBoss Web Services
 
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
 
November 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss ToolsNovember 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss Tools
 
October 2009 - JBoss Cloud
October 2009 - JBoss CloudOctober 2009 - JBoss Cloud
October 2009 - JBoss Cloud
 

May 2010 - Drools flow

  • 1. Drools Flow Dal process workflow al rules workflow Cagliari Jug Sardegna – 29/05/2010 - giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 2. About me ✔ System Architect per ValueTeam SPA http://www.valueteam.com ✔ 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 giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 3. BRMS giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 4. Drools 5: BLiP Drools Drools Drools Drools Expert Flow Fusion Guvnor Business Logic integration System giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 5. Drools 5: BLiP 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(Flow) un Event Processing Engine driven by Rules (Fusion) e un Planner Unica piattaforma per sviluppo di business solutions (driven by rules not by hard coded decisions!!!) Technology Overlap Business Overlap giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 6. Drools Flow FlowChart → Business Workflow → Business & Rules Workflow → Drools Flow Drools Flow è un workflow engine che integra e unifica processi e regole Processi e regole vengono tipicamente considerati come paradigmi distinti e scarsamente integrabili nella realizzazioni della business logic giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 7. Drools Flow Integrazione - assets diversi ma integrati nella definizione di workflow: rules, processes, events, DSL items, actions - diversi paradigmi nella realizzazione di workflow decision services vs process rules Unificazione - Common BLiP API - Support for different process languages (RuleFlow language – WS-BPEL – jPDL - OSWorkflow) - IDE, unified tooling, auditing and debugging giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 8. Drools Flow Process Workflow caratteristiche Control flow Procedurale Long-living Focus è sull'integrazione con sistemi esterni Rules Workflow caratteristiche Data flow (rules flow) Dichiarativo Domini specifici Focus è sulla business logic giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 9. Drools Flow Rules Workflow vantaggi (Drools Flow Official User Guide www.jboss.org/drools) Simplicity: Complex decisions are usually easier to specify using a set of rules. Rules can pinpoint complex business logic more easily, using their advanced constraint language. Multiple rules can be combined, each describing a part of the business logic. Agility: Rules and processes can have a separate life cycle. This means that we can change the rules describing some crucial decision points without having to change the process itself. Rules can be added, removed or modified to fine- tune the behavior of the process to the constantly evolving requirements and environment. Different scope: Rules can be reused across processes or outside processes. Therefore, your business logic is not locked inside your processes. giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 10. Drools Flow Rules Workflow vantaggi (Drools Flow Official User Guide www.jboss.org/drools) Declarativeness: Focus on describing "what" instead of "how". Granularity: It is easy to write simple rules that handle specific circumstances. Processes are more suited to describe the overall control flow but tend to become very complex if they also need to describe a lot of exceptional situations. Performance: Rule evaluation is optimized. Advanced condition and action language: Rule languages support advanced features like custom functions, collections, conditional elements, including quantifiers, etc. High-level: By using DSLs, business editors, decision tables, and decision trees, your business logic could be described in a way that can be understood (and possibly even modified) by business users. giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 11. Drools Flow Nei rules workflow la logica decisonale viene separata dalla logica di definizione del processo (decision service) I blocchi decisionali vengono realizzati attraverso business rules rule "acquisto con sconto" 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 giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 12. generic Drools Flow ? Decision Services SCOPE Process Rules specific tightly coupled COUPLING loosely coupled giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 13. Drools Flow - Download Drools jar - Download Drools Eclipse Plugin (3.4.x – 3.5.x) Ancora non disponibile plugin per IntelliJ IDEA (working in progress) Drools Runtime → folder with drools jar giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 14. Drools Flow Rich palette start/end ruleflow group split/join wait states, timers, events, actions (mvel or java action) composite nodes, subflows human tasks Easy to use work items sending email finding files FTP google calendar instant messaging REST services RSS feeds executing system commands transforming data giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 15. Drools Flow giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 16. Drools Flow <?xml version="1.0" encoding="UTF-8"?> <process xmlns="http://drools.org/drools-5.0/process" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd" type="RuleFlow" name="ruleflow" id="com.sample.ruleflow" package-name="com.sample" > <header/> <nodes> <start id="1" name="Start" x="16" y="16" /> <actionNode id="2" name="Hello" x="128" y="16" > <action type="expression" dialect="mvel">System.out.println("Hello World");</action> </actionNode> <end id="3" name="End" x="240" y="16" /> </nodes> <connections> <connection from="1" to="2" /> <connection from="2" to="3" /> </connections> </process> giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 17. Drools Flow RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.drools.HelloWorldRuleSet"); factory // Header .name("HelloWorldRuleSet") .version("1.0") .packageName("org.drools") // Nodes .startNode(1).name("Start").done() .ruleSetNode(2) .name("RuleSet") .ruleFlowGroup("someGroup").done() .endNode(3).name("End").done() // Connections .connection(1, 2) .connection(2, 3); RuleFlowProcess process = factory.validate().getProcess(); giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 18. Drools Flow Eseguire un Drools Rule Flow Process KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("Prenotazioni.rf"),ResourceType.DRF ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); In una knowledge base drools if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { ci sono tutti gli assets: System.err.println(error); rules, decison tables, process } throw new IllegalArgumentException("Could not parse knowledge."); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.startProcess("it.gmarigi.drools.PrenotazioniProcess"); ksession.fireAllRules(); giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 19. Drools Flow RuleFlow Tutte le regole, processi, decision tables formano la knowledge base (ProductionMemory), costruita in Drools come un vero e proprio repository Costruire una knowledge base è un processo che richiede risorse--> “cacharla” quando è possibile! Le regole sono dei predicati espressi nella semplice forma: when <condition/s> then <action/s> giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 20. Drools Flow RuleFlow Drools 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,... giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 21. Drools Flow RuleFlow “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à spesi” “La spedizione tramite Corriere costa 4 euro, tramite Pacco Celere 3 euro, tramite posta prioritaria 2 euro” giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 22. Drools Flow RuleFlow 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 giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 23. Drools Flow RuleFlow package it.gmarigi.javaday2010.drools.rules import it.gmarigi.drools.pojo.Ordine; import it.gmarigi.drools.pojo.Bilancio; rule "acquisto base" ruleflow-group 'acquisti' when bilancio : Bilancio() Ordine( $nomeOggetto:nomeOggetto, $prezzo : prezzo, $puntiAcquisiti:puntiAcquisiti, puntiSpesi == null, scontoUsato == null) then bilancio.aggiungiOrdine( $nomeOggetto,$prezzo,$puntiAcquisiti); end rule "acquisto con sconto" ruleflow-group 'acquisti' 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 giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 24. Drools Flow RuleFlow rule "Spedizione Corriere" ruleflow-group 'spedizioni' when $bilancio : Bilancio() Ordine(tipoSpedizione=="CORRIERE") then $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+4f); end rule "Spedizione Pacco Celere" ruleflow-group 'spedizioni' when $bilancio : Bilancio() Ordine(tipoSpedizione=="PACCO CELERE") then $bilancio.setSommaSpesa($bilancio.getSommaSpesa()+3f); end Non ci resta che usare le regole in un process workflow... giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 25. Drools Flow RuleFlow giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 26. Drools Flow RuleFlow Si possono definire regole (constraints) anche sui nodi decisionali del flow Uno Split (Spedizioni Tipo Cliente) è un nodo decisonale giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 27. Drools Flow RuleFlow giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 28. Drools Flow Pluggable work items Nodi che definiscono azioni, comportamenti specifici per un particolare dominio Possibilità di estendere le azioni standard offerte da Flow e di utilizzarle nell'IDE - domain-specific - declarative (what, not how) - high-level - customizable to the context giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 29. Drools Flow Pluggable work items 1) Create a work item definition (mvel) an put it in your classpath PrenotazioneAereaDefinitions.conf import org.drools.process.core.datatype.impl.type.ObjectDataType; [ [ "name" : "Prenotazione Aerea", "parameters" : [ "Passeggero" : new ObjectDataType("it.gmarigi.drools.Passeggero"), "Aereo" : new ObjectDataType("it.gmarigi,drools.Aereo"), "Carta di Credito" : new ObjectDataType("it.gmarigi.drools.CartaDiCredito") ], "displayName" : "Prenotazione Aerea", "icon" : "icons/aereo.gif" ] ] giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 30. Drools Flow Pluggable work items 2)Register the work definitions with the knowledge base configuration. Put a drools.rulebase.conf file in META-INF dir drools.workDefinitions = WorkDefinitions.conf PrenotazioneAereaDefinitions.conf giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 31. Drools Flow Pluggable work items 3) Create a work item handler (what work item must do) public class PrenotazioneAereaWorkItemHandler implements WorkItemHandler { PrenotazioniService prenotazioniService; public void executeWorkItem(WorkItem workItem,WorkItemManager manager) { Passeggero passeggero = (Passeggero) workItem.getParameter("passeggero"); Aereo aereo = (Aereo) workItem.getParameter("aereo"); CartaDiCredito cc = (CartaDiCredito) workItem.getParameter("cc"); try { prenotazioniService.prenota(passeggero,aereo, cc); manager.completeWorkItem(workItem.getId(), null); } catch (Exception e) { e.printStackTrace(); manager.abortWorkItem(workItem.getId()); } } } giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 32. Drools Flow Process Persistence - Default process instances non sono persistenti - Persistenza si crea attraverso JPA (Hibernate-IBatis- TopLink,ecc...) - Se la scelta è Hibernate: drools-persistence-jpa (org.drools) persistence-api-1.0.jar (javax.persistence) hibernate-entitymanager-3.4.0.GA.jar (org.hibernate) hibernate-annotations-3.4.0.GA.jar (org.hibernate) hibernate-commons-annotations-3.1.0.GA.jar (org.hibernate) hibernate-core-3.3.0.SP1.jar (org.hibernate) dom4j-1.6.1.jar (dom4j) jta-1.0.1B.jar (javax.transaction) btm-1.3.2.jar (org.codehaus.btm) javassist-3.4.GA.jar (javassist) slf4j-api-1.5.2.jar (org.slf4j) slf4j-jdk14-1.5.2.jar (org.slf4j) h2-1.0.77.jar (com.h2database) commons-collections-3.2.jar (commons-collections) giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 33. Drools Flow Process Persistence <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <persistence version="1.0" xsi:schemaLocation= "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="org.drools.persistence.jpa"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/processInstanceDS</jta-data-source> <class>org.drools.persistence.session.SessionInfo</class> <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class> <class>org.drools.persistence.processinstance.ProcessInstanceEventInfo</class> <class>org.drools.persistence.processinstance.WorkItemInfo</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <property name="hibernate.max_fetch_depth" value="3"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup"/> </properties> </persistence-unit> </persistence> giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 34. Drools Flow Process Persistence // create the entity manager factory and register it in the environment EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" ); Environment env = KnowledgeBaseFactory.newEnvironment(); env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); // create a new knowledge session that uses JPA to store the runtime state StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); int sessionId = ksession.getId(); int processId = ksession.startProcess( "MyProcess" ); ksession.dispose(); // recreate the session from database using the sessionId ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbase, null, env ); giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 35. Drools Flow Process Persistence Quando l'istanza viene salvata? Viene salvata (ed aggiornata) ad ogni safe-point che si incontra nel processo Un safe-point coincide con un nodo action giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 36. Keep Moving ✔Drools 5 http://www.jboss.org/drools ✔Drools Official Blog http://blog.athico.com ✔Drools Mailing List & Forum http://drools-java-rules-engine.46999.n3.nabble.com/ ✔Drools Wiki http://community.jboss.org/wiki/JBossRules ✔JBoss User Group Roma http://www.jbugroma.org giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -
  • 37. ??? giomarigi Giovanni Marigi – JBoss User Group Roma Coordinator -