May 2010 - Drools flow
-
Upload
jbug-italy -
Category
Technology
-
view
4.236 -
download
2
description
Transcript of May 2010 - Drools flow
![Page 1: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/1.jpg)
Drools FlowDrools FlowDal process workflow al rules workflowDal process workflow al rules workflow
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Cagliari Jug Sardegna – 29/05/2010 -
![Page 2: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/2.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
✔ System Architect per ValueTeam SPAhttp://www.valueteam.com
✔ Uno dei coordinatori del JBoss User Group Romahttp://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 - GateInSpring – Agile techniques - Flex – Python – pygtk – Grails - Debian
✔ Twitter: http://twitter.com/giomarigi
About meAbout me
![Page 3: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/3.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
BRMSBRMS
![Page 4: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/4.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools 5: BLiPDrools 5: BLiP
Business Logic integration System
DroolsGuvnor
DroolsFusion
DroolsFlow
DroolsExpert
![Page 5: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/5.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools 5: BLiPDrools 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 OverlapBusiness Overlap
![Page 6: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/6.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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
![Page 7: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/7.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Integrazione - assets diversi ma integrati nella definizione di workflow: rules, processes, events, DSL items, actions
- diversi paradigmi nella realizzazione di workflowdecision 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
![Page 8: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/8.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Process Workflow caratteristicheControl flowProceduraleLong-livingFocus è sull'integrazione con sistemi esterni
Rules Workflow caratteristicheData flow (rules flow)DichiarativoDomini specificiFocus è sulla business logic
![Page 9: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/9.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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.
![Page 10: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/10.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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.
![Page 11: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/11.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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
![Page 12: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/12.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
loosely coupledtightly coupled
spec
ific
gene
ric
DecisionServices
ProcessRules
SC
OP
E
COUPLING
?
![Page 13: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/13.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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
![Page 14: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/14.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools FlowRich palettestart/endruleflow groupsplit/join wait states, timers, events,actions (mvel or java action) composite nodes, subflowshuman tasks
Easy to use work itemssending emailfinding filesFTPgoogle calendarinstant messagingREST servicesRSS feedsexecuting system commandstransforming data
![Page 15: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/15.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
![Page 16: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/16.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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>
![Page 17: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/17.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools FlowRuleFlowProcessFactory 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();
![Page 18: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/18.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Eseguire un Drools Rule Flow ProcessKnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();kbuilder.add( ResourceFactory.newClassPathResource("Prenotazioni.rf"),ResourceType.DRF );
KnowledgeBuilderErrors errors = kbuilder.getErrors();if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { System.err.println(error); } 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();
In una knowledge base drools ci sono tutti gli assets: rules, decison tables, process
![Page 19: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/19.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
RuleFlow
Tutte le regole, processi, decision tablesformano 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>
![Page 20: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/20.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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 classpathOltre a file *.drl possono venir caricate decision table in formato *.xls (resource-type DTABLE), il contenuto di una cartella,...
![Page 21: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/21.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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”
![Page 22: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/22.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
RuleFlow
Fatti: Ordini,Estratto ContoRegole: Condizioni che il sito da cui compro applica sugli ordini effettuati e da evadere. Le condizioni sono relative all'anno 2010Obiettivi/Azioni: Sapere quanto ho speso e quanti punti premio ho accumulato
![Page 23: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/23.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
RuleFlowpackage 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
![Page 24: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/24.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
RuleFlowrule "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...
![Page 25: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/25.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
RuleFlow
![Page 26: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/26.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Si possono definire regole (constraints) anche sui nodi decisionali del flow
RuleFlow
Uno Split (Spedizioni Tipo Cliente)è un nodo decisonale
![Page 27: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/27.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
RuleFlow
![Page 28: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/28.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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
![Page 29: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/29.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Pluggable work items
1) Create a work item definition (mvel) an put it in your classpath
PrenotazioneAereaDefinitions.confimport 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" ]]
![Page 30: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/30.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Pluggable work items
2)Register the work definitions with the knowledge base configuration. Put a drools.rulebase.conf file in META-INF dirdrools.workDefinitions = WorkDefinitions.conf PrenotazioneAereaDefinitions.conf
![Page 31: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/31.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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()); } }}
![Page 32: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/32.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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)
![Page 33: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/33.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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>
![Page 34: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/34.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools Flow
Process Persistence
// create the entity manager factory and register it in the environmentEntityManagerFactory 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 stateStatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );int sessionId = ksession.getId();
int processId = ksession.startProcess( "MyProcess" );ksession.dispose();
// recreate the session from database using the sessionIdksession = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbase, null, env );
![Page 35: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/35.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Drools FlowDrools 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
![Page 36: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/36.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
Keep MovingKeep Moving
✔ Drools 5 http://www.jboss.org/drools
✔ Drools Official Bloghttp://blog.athico.com
✔ Drools Mailing List & Forumhttp://drools-java-rules-engine.46999.n3.nabble.com/
✔ Drools Wikihttp://community.jboss.org/wiki/JBossRules
✔ JBoss User Group Romahttp://www.jbugroma.org
![Page 37: May 2010 - Drools flow](https://reader034.fdocuments.us/reader034/viewer/2022042613/548343bcb079593d0c8b498a/html5/thumbnails/37.jpg)
Giovanni Marigi – JBoss User Group Roma Coordinator -giomarigi
??????