SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Java User Group Berlin Brandenburg
Berlin, 04.02.2009
bernd.ruecker@camunda.com
Vorstellung JBoss jBPM und Drools
Geschäftsprozesse und Regeln mit
Open Source Java
Bernd Rücker / ber nd.r uecker @cam unda.com / 2
• Berater, Trainer, Coach
• Softwareentwickler
• Committer im JBoss jBPM-Projekt
• Themen:
– BPM & SOA
– Process Execution (jPDL, BPEL, XPDL, …)
– JBoss SOA Platform (jBPM, ESB, Drools, …)
– Enterprise Anwendungen mit Java EE
• Siehe www.camunda.com
• Blog www.bpm-guide.de
Bernd Rücker
Wer bin ich?
Bernd Rücker / ber nd.r uecker @cam unda.com / 3
Eckdaten zum Unternehmen
Einleitung
camunda GmbH
Gegründet: November 2002
camunda services GmbH
Gegründet: März 2008
Mitarbeiter: 6
Sitz: Berlin / Stuttgart
Unsere Leistungen
•Beratung
•Seminare
•Process Hosting
Unsere Themen
• Ganzheitliches BPM
• Prozessautomatisierung
• SOA, BPEL, XPDL,
• JBoss SOA Platform (jBPM,
Drools, ESB)
• BPMN
• BPM-Toolauswahl
Bernd Rücker / ber nd.r uecker @cam unda.com / 4
„Ein Prozess ist eine Struktur, deren Elemente Aufgaben,
Aufgabenträger, Sachmittel und Informationen sind, die durch logische
Folgebeziehungen verknüpft sind. Darüber hinaus werden deren
zeitliche, räumliche und mengenmäßige Dimensionen konkretisiert. Ein
Prozess hat ein definiertes Startereignis (Input) und ein Ergebnis (Output)
und dient dazu, einen Wert für Kunden zu schaffen.“
Synonyme: Geschäftsprozess, Business Process
Was ist ein Prozess?
Begriffsdefinition
Kunde Input Output Kunde
Logische
Aufgabenfolge
Fischermanns, Guido:
Praxishandbuch Prozessmanagement
Bernd Rücker / ber nd.r uecker @cam unda.com / 5
Einfaches Prozessmodell
Begriffsdefinition
Kunde
Bestel-
lung Lieferung Kunde
Bestell-
annahme
Rechnung-
stellung
Waren-
entnahme
Versand
Bernd Rücker / ber nd.r uecker @cam unda.com / 6
Ein „digitaler“ Prozess
mit Business Process Engine
Task
Zuweisung
Service
Aufruf
Task
Zuweisung
IT
Δ Durchlaufzeit
Process Engine
Human Workflow Human WorkflowEAI
SOA
Bernd Rücker / ber nd.r uecker @cam unda.com / 7
Process Execution
Business Process Engine
Task
Zuweisung
Service
Aufruf
Task
Zuweisung
Tasklist Externes
System
Transaction / Request
process execution
Zeit
Process Execution Engine
…
Client
1.) Aufgabe erzeugen
2.) Aufgabe abschließen
1.) System aufrufen / Message
2.) Asynchrone Antwort als Message
Bernd Rücker / ber nd.r uecker @cam unda.com / 8
Business Process Engine (BPM-Engine)Business Process Engine (BPM-Engine)
Definition Laufzeit
Business Process Engine
Middleware für Geschäftsprozesse
PersistenzPersistenz
Prozess-
Ausführung
Prozess-
Ausführung
Prozess-
definitionen
Prozess-
definitionen
AdministrationAdministrationProzess-
Logs
Prozess-
Logs
Aufgaben-
Verwaltung
Aufgaben-
Verwaltung
Sachbearbeiter
Fremd-
Anwendungen
Fremd-
Anwendungen
Business Analyst
Administrator
Entwickler
SimulationSimulation
Bernd Rücker / ber nd.r uecker @cam unda.com / 9
• Business Process Engine
• „Library“
• POJO-Kern: Interne Prozessrepräsentation durch
Java-Modelle
• Persistenz über Hibernate (DB-Unabhängigkeit)
• Lauffähig mit oder ohne Application-Server
• Klein und flexibel, leicht erweiterbar
• Aktuell Version 3.2, Version 4 in der Entwicklung
• Open Source (LGPL)
JBoss jBPM
Open Source Process Execution
Bernd Rücker / ber nd.r uecker @cam unda.com / 10
„Graph oriented programming“
Der Prozess als gerichteter Graph
Node
Transition
from to
**
leaving
Transitions
arriving
Transitions
Token
current
Node
1
<process-definition>
...
<node name=“serve client”>
<transition name=“ok” to=“order” />
<transition name=“nok” to=“joke” />
</node>
<node name=“order” />
<node name=“joke” />
...
</process-definition>
<process-definition>
...
<node name=“serve client”>
<transition name=“ok” to=“order” />
<transition name=“nok” to=“joke” />
</node>
<node name=“order” />
<node name=“joke” />
...
</process-definition>
Bernd Rücker / ber nd.r uecker @cam unda.com / 11
• Execute Methode implementiert Verhalten
• Konfiguration der Node-Typen per XML
Implementierung Verhalten
Bernd Rücker / ber nd.r uecker @cam unda.com / 12
Token-Hierarchie
Bernd Rücker / ber nd.r uecker @cam unda.com / 13
• Process Engine ist eigene Architekturschicht
• Domänenobjekte oder Referenzen als
Prozessvariablen
• Ansteuerung ext.
Services
Business Process Engine in Java
Architektur
EJB-Container (oder Tomcat oder Java SE)EJB-Container (oder Tomcat oder Java SE)
Session
Bean
Session
Bean
JCAJCA JMSJMSEJBEJB
WSWS
jBPM (jPDL)
Human
Task
Mgmnt
Human
Task
Mgmnt
Bernd Rücker / ber nd.r uecker @cam unda.com / 14
Prozess: Grafik / XML  Java  DB
XMLXML
DBDB
jBPM APIjBPM API
deploy
.class.class
Neue
Version
Bernd Rücker / ber nd.r uecker @cam unda.com / 15
• Task-Node: Human Tasks / Aufgaben
• State: Wait-States
• Fork / Join: Parallelisierung
• Decision: Automatische Entscheidung
• Start-State / End-State
• Super-State
• Process-State
• …
• Eigene Node-Typen mit
Verhalten können
implementiert werden
Verschiedene Node-Typen
jBPM in a nutshell
Bernd Rücker / ber nd.r uecker @cam unda.com / 16
• Einfache Java-API zur Steuerung der Engine
– Prozessstart
– Aufgabenliste
– …
• Aufrufen von „User-Code“
– definierte Stellen im Prozess
– Interface & Java-Klassen
jBPM & Java
jBPM in a nutshell
Bernd Rücker / ber nd.r uecker @cam unda.com / 17
public class MyAction implements ActionHandler {
public void execute(ExecutionContext ctx) {
Object var = ctx.getVariable("var");
result = service.doSomething(var);
ctx.setVariable("result", result);
}
}
public class MyAction implements ActionHandler {
public void execute(ExecutionContext ctx) {
Object var = ctx.getVariable("var");
result = service.doSomething(var);
ctx.setVariable("result", result);
}
}
jBPM & Java
jBPM in a nutshell
JbpmConfiguration conf = JbpmConfiguration.getInstance();
JbpmContext context = conf. createJbpmContext();
ProcessInstance pi = context.getGraphSession().
findLatestProcessDefinition("Ticket").createProcessInstance();
pi.getRootToken().signal();
List<TaskInstance> tasks = context.getTaskMgmtSession().
findTaskInstances("Vertrieb");
tasks.get(0).end("Ticket schliessen");
context.close();
JbpmConfiguration conf = JbpmConfiguration.getInstance();
JbpmContext context = conf. createJbpmContext();
ProcessInstance pi = context.getGraphSession().
findLatestProcessDefinition("Ticket").createProcessInstance();
pi.getRootToken().signal();
List<TaskInstance> tasks = context.getTaskMgmtSession().
findTaskInstances("Vertrieb");
tasks.get(0).end("Ticket schliessen");
context.close();
Bernd Rücker / ber nd.r uecker @cam unda.com / 18
Command-Pattern
Remote-Zugriffe und Asynchronität
public class TaskInstanceEndCommand
implements Command {
...
public Object execute(JbpmContext jbpmContext) {
TaskInstance taskInstance =
getTaskInstance(jbpmContext);
if (transitionName == null) {
taskInstance.end();
} else {
taskInstance.end(transitionName);
}
return taskInstance;
}
...
}
public class TaskInstanceEndCommand
implements Command {
...
public Object execute(JbpmContext jbpmContext) {
TaskInstance taskInstance =
getTaskInstance(jbpmContext);
if (transitionName == null) {
taskInstance.end();
} else {
taskInstance.end(transitionName);
}
return taskInstance;
}
...
}
Bernd Rücker / ber nd.r uecker @cam unda.com / 19
Beispiel: EJB3 + Swing
EJB-ContainerEJB-Container
BPM-Engine
Command
Service
SLSB
JCA JMS …EJB
WebcontainerWebcontainer
Command
Service
MDB
Web-GUI
Swing-GUI
CommandsCommands
Fremd-
systeme
Message
Mit
Commands
Message
Mit
Commands
Korrelation
Bernd Rücker / ber nd.r uecker @cam unda.com / 20
Process Execution Languages
Welche Sprache spricht BPM?
BPEL
XPDL
UML
EPC
BPMN
YAML
jPDL
…
Standards
Proprietär
Wissenschaftlich
Fachliche Notationen
DSL‘s
Bernd Rücker / ber nd.r uecker @cam unda.com / 21
Quelle: Dr. Martin Bartonitz
Sprachen heute: Was nehmen?
Komplexität, LOC, Mächtigkeit, Standards?
Bernd Rücker / ber nd.r uecker @cam unda.com / 22
• Es existieren verschiedenste Prozessausführungs-
sprachen (Process Execution Language)
– BPEL, XPDL, jPDL, DSL‘s, …
• Es gibt nicht die perfekte Sprache
• Koexistenz von verschiedenen Sprachen erlauben
• Sprache nach Problem auswählen
 Grundfunktionalität Prozessmaschine in PVM
JBoss Process Virtual Machine
JBoss PVM
Bernd Rücker / ber nd.r uecker @cam unda.com / 23
Konzepte & Kernabstraktionen
Prozesse als Zustandsautomat
Verhalten über
Sprache definiert
Bernd Rücker / ber nd.r uecker @cam unda.com / 24
Just an API
PVM definiert keine Sprache
ProcessDefinition processDefinition = ProcessFactory.build()
.node("accept loan request").initial().behaviour(new WaitState())
.transition().to("loan evaluation")
.node("loan evaluation").behaviour(new WaitState())
.transition("approve").to("wire the money")
.transition("reject").to("end")
.node("wire the money").behaviour(new Display("automatic payment"))
.transition().to("end")
.node("end").behaviour(new WaitState())
.done();
ProcessDefinition processDefinition = ProcessFactory.build()
.node("accept loan request").initial().behaviour(new WaitState())
.transition().to("loan evaluation")
.node("loan evaluation").behaviour(new WaitState())
.transition("approve").to("wire the money")
.transition("reject").to("end")
.node("wire the money").behaviour(new Display("automatic payment"))
.transition().to("end")
.node("end").behaviour(new WaitState())
.done();
Bernd Rücker / ber nd.r uecker @cam unda.com / 25
• Graphen / Blockstruktur
• Sprache kann durch
entsprechendes Node-Verhalten
implementiert werden
• Es wird geben
– XPDL: Nova Bonita
– jPDL: JBoss jBPM JPDL 4
– BPEL: Orchestra
• Sprachen sind in XML umgesetzt
Prozesssprachen
Die PVM unterstützt verschiedene Sprachen
Bernd Rücker / ber nd.r uecker @cam unda.com / 26
Was ist BPM?
Human
Workflow Management
Serviceorientierte
Architekturen (SOA)
Dokumenten-Management –
Systeme – DMS (u.a.)
Enterprise Appliation Integration –
EAI
ab 2004
ab 2000 ab 2005
Ablauforganisation
Business Process
Reengineering - BPR
(Orga-) Geschäftsprozess-
Management - GPM
Organisationslehre
bis 1990
1990 - 2000 ab 2000
Business
IT
Prozessautomatisierung
ab 2006
Begriffsproblem
Business Process Management - BPM
Bernd Rücker / ber nd.r uecker @cam unda.com / 27
Aktuelle Ambitionen
Der BPM-Kreislauf
Prozess-
implementierung
Prozess-
entwurf
Prozess-
controlling
KVP
Prozess-
Strategie
Business
IT
Bernd Rücker / ber nd.r uecker @cam unda.com / 28
Der Traum der Magic BPM-Suite
Der BPM-Kreislauf
Modelling Monitoring
EAI / SOAHuman Workflow
Business
IT
Magic BPM-Suite
Bernd Rücker / ber nd.r uecker @cam unda.com / 29
• Aufbauend auf PVM
• Persistenz über JPA geplant
• Unterstützung BPMN
• siehe
http://www.bpm-guide.de/2009/01/26/ein-erster-blick-
JBoss jBPM 4
jBPM die Vierte
Bernd Rücker / ber nd.r uecker @cam unda.com / 30
• Allgemeingültige API
– ProcessService
– ExecutionService
– TaskService
– ManagementService
– CommandService
• Grafische Informationen im gleichen XML
• Deployment in AS/ESB wird verbessert
Weitere Änderungen in jBPM 4
jBPM die Vierte
Bernd Rücker / ber nd.r uecker @cam unda.com / 31
Beispielprozess im neuen Designer
jBPM die Vierte
Bernd Rücker / ber nd.r uecker @cam unda.com / 32
Und das Beispiel als Quellcode
BPM die Vierte
<process xmlns="http://jbpm.org/4/jpdl" name="TicketProcess">
<start name="Start" g="15,146,48,48">
<flow to="Kundenbetreuer bekannt?"/>
</start>
<exclusive name="Kundenbetreuer bekannt?" g="84,144,48,48">
<flow to="Kundenbetreuer festlegen" g="108,24">
<condition expr="#{false}"/>
</flow>
<flow to="join">
<condition expr="#{true}"/>
</flow>
</exclusive>
<task name="Kundenbetreuer festlegen" g="168,0,153,51"
assignee="bernd">
<flow to="CRM aktualisieren"/>
</task>
<process xmlns="http://jbpm.org/4/jpdl" name="TicketProcess">
<start name="Start" g="15,146,48,48">
<flow to="Kundenbetreuer bekannt?"/>
</start>
<exclusive name="Kundenbetreuer bekannt?" g="84,144,48,48">
<flow to="Kundenbetreuer festlegen" g="108,24">
<condition expr="#{false}"/>
</flow>
<flow to="join">
<condition expr="#{true}"/>
</flow>
</exclusive>
<task name="Kundenbetreuer festlegen" g="168,0,153,51"
assignee="bernd">
<flow to="CRM aktualisieren"/>
</task>
Bernd Rücker / ber nd.r uecker @cam unda.com / 33
Nicht gut: Regeln im Prozess
Prozessmodelle und Geschäftsregeln
Bernd Rücker / ber nd.r uecker @cam unda.com / 34
Regeln sinnvoll abbilden
Auftragswert Rabatt verhandelt? Rabatt (%)
AW < 50 T€ Nein 0
50 T€ <= AW < 100 T€ Nein 3
100 T€ <= AW < 250 T€ Nein 5
<egal> Ja <individuell>
Prozessmodelle und Geschäftsregeln
Bernd Rücker / ber nd.r uecker @cam unda.com / 35
Was sind Regeln?
• „Wenn ich müde bin, dann gehe ich ins Bett!“
• „WENN .. DANN ..“-Struktur
• Bedingung und Konseqenz (Prämisse und
Konklusion; Left-Hand-Side LHS und Right-Hand-
Side RHS)
• Konsequenz wird häufig als „Aktion“ bezeichnet
• Bedingungen prüfen „Fakten“
• Regeln „feuern“, wenn deren Bedingung eintrifft
Bernd Rücker / ber nd.r uecker @cam unda.com / 36
• Direkte Programmierung im Quellcode:
if ( person.istMuede() == true ) {
person.putzeZaehne();
person.geheInsBett();
}
• Spezifische Lösungen (Codegenerierung, DSL,
Speziallösungen, …)
• Regelmaschine / Rule Engine
Wie werden Regeln umgesetzt?
Alternativen
Bernd Rücker / ber nd.r uecker @cam unda.com / 37
• Wartbarkeit und Validierbarkeit nicht gegeben
• Regeln müssen durch Entwickler in Quellcode
übersetzt werden
• Fachliche Regeln werden über verschiedene
Klassen verteilt
• Keine Lesbarkeit der Regeln für den Fachbereich
• Konflikt-Lösung muss realisiert werden
Probleme programmierter Regeln
Wie werden Regeln umgesetzt?
Bernd Rücker / ber nd.r uecker @cam unda.com / 38
• Explizite Formulierung der Regeln als Regeln
• Deklarativ: Welche Regeln wann wie ausgeführt
werden entscheidet die Regelmaschine
• Regeln für Fachbereich verständlich
Vorteile der Rule-Engine
Wie werden Regeln umgesetzt?
Bedingung:
Person.muede = true
Konsequenz:
person.putzeZaehne();
person.geheInsBett();
Bedingung:
Person.muede = true
Konsequenz:
person.putzeZaehne();
person.geheInsBett();
Bernd Rücker / ber nd.r uecker @cam unda.com / 39
• Fakten (Wissen) = Domänenobjekte (POJOs)
• Rule Engine wird generisch in die Architektur
integriert (Interceptoren, …)
• Rule Engine wird gezielt angesprochen
Rule Engines in Java
Architektur
ClientClient Anwendung / ServerAnwendung / Server
InterceptorInterceptor
FachlogikFachlogik
Bernd Rücker / ber nd.r uecker @cam unda.com / 40
• Java Rule Engine (RETE-Implementierung)
• „JBoss Drools“ / „JBoss Rules“
• Lauffähig mit oder ohne Application-Server
• „Library“
• Business Rules Management System (BRMS)
• Aktuell Version 4.0 (Version 5 in der Pipe)
• Open Source (ASL)
JBoss Drools
Die Open Source Rule Engine
Bernd Rücker / ber nd.r uecker @cam unda.com / 41
Drools-Regeln
Beispiel
package com.camunda.demo
import demo.business.*;
import demo.infrastructure.ErrorList;
global ErrorList errors;
rule "Auftragsrabatt bei hohem Bestellwert"
when
o: Order( value>5000 )
then
o.setDiscount(0.05);
end
rule "Nachnahme nur bis 2500 € möglich"
when
o: Order( value>2500, shippingType="COD" )
then
errors.addError("Nachname nicht möglich bei Auftragswert " + o.getValue());
end
package com.camunda.demo
import demo.business.*;
import demo.infrastructure.ErrorList;
global ErrorList errors;
rule "Auftragsrabatt bei hohem Bestellwert"
when
o: Order( value>5000 )
then
o.setDiscount(0.05);
end
rule "Nachnahme nur bis 2500 € möglich"
when
o: Order( value>2500, shippingType="COD" )
then
errors.addError("Nachname nicht möglich bei Auftragswert " + o.getValue());
end
Bernd Rücker / ber nd.r uecker @cam unda.com / 42
Drools im Einsatz
API
RuleBaseLoader loader = RuleBaseLoader.getInstance();
RuleBase ruleBase = loader.loadFromReader(
new
InputStreamReader(this.getClass().getResourceAsStream(
"/demo.drl")));
WorkingMemory wm = ruleBase.newStatefulSession();
wm.insert(meldung);
wm.fireAllRules();
RuleBaseLoader loader = RuleBaseLoader.getInstance();
RuleBase ruleBase = loader.loadFromReader(
new
InputStreamReader(this.getClass().getResourceAsStream(
"/demo.drl")));
WorkingMemory wm = ruleBase.newStatefulSession();
wm.insert(meldung);
wm.fireAllRules();
WorkingMemory
POJO‘s
Regeln
fireAllRules
Bernd Rücker / ber nd.r uecker @cam unda.com / 43
There are four Golfers standing at a tee, in a line from
left to right
• The golfer to Fred’s immediate right is wearing blue
pants
• Joe is second in line
• Bob is wearing plaid pants
• Tom isn’t in position one or four, and he isn’t
wearing the orange pants
Beispiel: Golfer Riddle
Drools
Bernd Rücker / ber nd.r uecker @cam unda.com / 44
Regelbeispiel
Example: Golfer Riddle
rule "find solution“
when
// There is a golfer named Fred,
// Whose positions is $p1
$fred : Golfer( name == "Fred" )
// Joe is in position 2
$joe : Golfer( name == "Joe",
position == 2,
position != $fred.position,
color != $fred.color )
...
then
System.out.println( "Fred " + $fred.getPosition() + " " + $fred.getColor() );
System.out.println( "Joe " + $joe.getPosition() + " " + $joe.getColor() );
System.out.println( "Bob " + $bob.getPosition() + " " + $bob.getColor() );
System.out.println( "Tom " + $tom.getPosition() + " " + $tom.getColor() );
end
rule "find solution“
when
// There is a golfer named Fred,
// Whose positions is $p1
$fred : Golfer( name == "Fred" )
// Joe is in position 2
$joe : Golfer( name == "Joe",
position == 2,
position != $fred.position,
color != $fred.color )
...
then
System.out.println( "Fred " + $fred.getPosition() + " " + $fred.getColor() );
System.out.println( "Joe " + $joe.getPosition() + " " + $joe.getColor() );
System.out.println( "Bob " + $bob.getPosition() + " " + $bob.getColor() );
System.out.println( "Tom " + $tom.getPosition() + " " + $tom.getColor() );
end
Bernd Rücker / ber nd.r uecker @cam unda.com / 45
• In-memory Knowledge-Repository
• Basiert auf Rete Algorithm
• Forward chaining
• Backward
chaining ist
geplant
(Drools 5?)
Drools im Einsatz
Wie funktioniert es intern?
Bernd Rücker / ber nd.r uecker @cam unda.com / 46
Für den Fachbereich: Decision Tables
Bernd Rücker / ber nd.r uecker @cam unda.com / 47
DSL-Support
Drools
rule "Abmeldung - Check mit DSL"
when
Versicherter unter 25 Jahre alt
and
Mehr als 3 Unfälle gebaut
then
Police nicht möglich
end
rule "Abmeldung - Check mit DSL"
when
Versicherter unter 25 Jahre alt
and
Mehr als 3 Unfälle gebaut
then
Police nicht möglich
end
[when]Versicherter unter {MindestAlter} Jahre alt=
Person( age < {MindestAlter} )
[when]Mehr als {Anzahl} Unfälle gebaut=
Person( accidentCount > {Anzahl} )
...
[then]Police nicht möglich=
errors.addError("Police kann nicht ausgestellt werden");
[when]Versicherter unter {MindestAlter} Jahre alt=
Person( age < {MindestAlter} )
[when]Mehr als {Anzahl} Unfälle gebaut=
Person( accidentCount > {Anzahl} )
...
[then]Police nicht möglich=
errors.addError("Police kann nicht ausgestellt werden");
Bernd Rücker / ber nd.r uecker @cam unda.com / 48
DSL-Support
Drools
Bernd Rücker / ber nd.r uecker @cam unda.com / 49
Regeleditor ohne DSL
Drools
Bernd Rücker / ber nd.r uecker @cam unda.com / 50
Guided Rule Editor
Verfügbar in
Eclipse &
BRMS
Bernd Rücker / ber nd.r uecker @cam unda.com / 51
• Welche Regeln sollen in welcher Reihenfolge
• Parallel oder
• unter welchen Bedingungen ausgeführt werden
RuleFlow
Grahpical representation
Bernd Rücker / ber nd.r uecker @cam unda.com / 52
Tooling: Eclipse
Drools
Bernd Rücker / ber nd.r uecker @cam unda.com / 53
Business Rules Management System
Drools BRMS
ServerServer
DroolsDrools
Web-GUIWeb-GUI
Rule-Repository
(JCR)
Rule-Repository
(JCR)
AnwendungAnwendung
Bernd Rücker / ber nd.r uecker @cam unda.com / 54
BPM + !BRM = ?
!BPM + BRM = ?
BPM + BRM = ?
Bernd Rücker / ber nd.r uecker @cam unda.com / 55
• Möglich!
• Vorteil: Maximale Flexibilität
• Nachteile
– Keine Visualisierung / Modellierung des Prozessflusses
– Nicht immer offensichtlich, warum was passiert
– Keine „Grenzen“ durch Prozessstruktur
– Keine out-of-the-box Wartezustände / Persistenz
Geschäftsprozesse mit Regeln umsetzen?
BPM + BRM
Bernd Rücker / ber nd.r uecker @cam unda.com / 56
• BPM (Prozesse)
– Geschäftsprozesse / Workflows
– Fachliche Modellierung
– Hoher Standardisierungs-/Wiederholungsgrad
• BRM (Regeln)
– Prozessunabhängige Regeln
– Punktuelle Integration in Prozesse
– Beeinflussung des Prozessablaufs (80/20 Regel)
In Kombination stabilere Prozesse bei mehr Agilität!
Einsatzmöglichkeiten
BPM + BRM
Bernd Rücker / ber nd.r uecker @cam unda.com / 57
Kombinationsmöglichkeiten
Regeln treffen EntscheidungenRegeln treffen Entscheidungen
Regeln steuern Zuweisung von
Aufgaben
Regeln steuern Zuweisung von
Aufgaben
Regeln schließen neues WissenRegeln schließen neues Wissen
Und: Beeinflussung des
Prozessablaufs in
Sonderfällen
Und: Beeinflussung des
Prozessablaufs in
Sonderfällen
Bernd Rücker / ber nd.r uecker @cam unda.com / 58
Schließen von “neuem Wissen”
jBPM + Drools
rule "Special Discount"
when
o : Order( customerName == "Bernd" )
then
# 5 % discount
o.applyDiscount( 0.95 );
System.out.println("Special discount granted");
end
rule "Special Discount"
when
o : Order( customerName == "Bernd" )
then
# 5 % discount
o.applyDiscount( 0.95 );
System.out.println("Special discount granted");
end
<action
class="org.jbpm.action.RulesActionHandler">
<ruleFile>/...OrderPricingRules.drl</ruleFile>
<objectNames>
<element>order</element>
</objectNames>
</action>
<action
class="org.jbpm.action.RulesActionHandler">
<ruleFile>/...OrderPricingRules.drl</ruleFile>
<objectNames>
<element>order</element>
</objectNames>
</action>
Bernd Rücker / ber nd.r uecker @cam unda.com / 59
Entscheidungen
jBPM + Drools
<node name="drools decision">
<action class="org.jbpm.action.RulesActionHandler“>
<ruleFile>/com/.../OrderDecisionRules.drl</ruleFile>
<objectNames>
<element>order</element>
</objectNames>
<signalToken>false</signalToken>
</action>
<transition name="conspicuous" to="do something" />
<transition name="casual" to="determine discount" />
</node>
<node name="drools decision">
<action class="org.jbpm.action.RulesActionHandler“>
<ruleFile>/com/.../OrderDecisionRules.drl</ruleFile>
<objectNames>
<element>order</element>
</objectNames>
<signalToken>false</signalToken>
</action>
<transition name="conspicuous" to="do something" />
<transition name="casual" to="determine discount" />
</node>
rule "Conspicuous Order"
when
Order( price > 500)
then
System.out.println("signal conspicuous order");
executionContext.getNode().
leave(executionContext,
"conspicuous");
end
rule "Conspicuous Order"
when
Order( price > 500)
then
System.out.println("signal conspicuous order");
executionContext.getNode().
leave(executionContext,
"conspicuous");
end
Besseres Design:
Regeln schreiben
Ergebnis in
Prozessvariable
und jBPM
„Decision“ wertet
diese aus
Bernd Rücker / ber nd.r uecker @cam unda.com / 60
Beeinflussung des Prozessablaufs
Event getrieben reagieren / Ausnahmen
rule "Order gets cancelled"
when
evt : Event( type == "cancel" )
then
token.setNode( "end2" );
end
rule "Order gets cancelled"
when
evt : Event( type == "cancel" )
then
token.setNode( "end2" );
end
Token
Bernd Rücker / ber nd.r uecker @cam unda.com / 61
Actor-Assignment
Wer ist zuständig?
<assignment class="org.jbpm.assignment.RulesAssignmentHandler">
<group>underwriting</group>
<ruleFile>/Assignment.drl</ruleFile>
<objectNames><element>policy</element></objectNames>
</assignment>
<assignment class="org.jbpm.assignment.RulesAssignmentHandler">
<group>underwriting</group>
<ruleFile>/Assignment.drl</ruleFile>
<objectNames><element>policy</element></objectNames>
</assignment>
rule "Determine Junior Role“
when
Policy( basePrice < 500)
then
insert(new Role("junior"));
end
rule "Determine Actor"
salience -100
when
Role($roleName : roleName)
$a : Assignable()
$group : Group()
Membership( group == $group, role == $roleName,
$user : user )
then
$a.setActorId($user.getName());
end
rule "Determine Junior Role“
when
Policy( basePrice < 500)
then
insert(new Role("junior"));
end
rule "Determine Actor"
salience -100
when
Role($roleName : roleName)
$a : Assignable()
$group : Group()
Membership( group == $group, role == $roleName,
$user : user )
then
$a.setActorId($user.getName());
end
Bernd Rücker / ber nd.r uecker @cam unda.com / 62
Ausblick: ESB / Content Based Routing
Beispiel: JBoss jBPM jPDL + JBoss ESB
Environment JBoss jBPMJBoss ESB
Content-Based Router ServiceContent-Based Router Service
System 1System 1
System 2System 2
Bernd Rücker / ber nd.r uecker @cam unda.com / 63
ESB & Content Based Routing
Vergleiche Event Driven Architecture (EDA)
Quelle: JBoss
Bernd Rücker / ber nd.r uecker @cam unda.com / 64
• jBPM ist eine kleine, flexible Process Engine.
Bewährt auch in großen Projekten!
• Drools ist cool und steht teuren Rule Engines in
wenig nach
• Integrieren & Kombinieren!
• siehe auch JBoss SOA Plattform (ESB)
• BPM & BRM bleiben Thema, selbst wenn SOA Tod
ist ;-)
Fazit
Geschäftsprozesse und Regeln mit jBPM und Drools
Bernd Rücker / ber nd.r uecker @cam unda.com / 65
Fragen & Antworten
Unsere Themen
• Ganzheitliches BPM
• Prozessautomatisierung
• SOA, BPEL, XPDL, jBPM, Drools, ESB
• BPMN
• BPM-Toolauswahl
Unsere Leistungen
• Beratung
• Seminare
• Process Hosting
Bernd Rücker
Geschäftsführer
Berater, Trainer & Coach
bernd.ruecker@camunda.com
+49 711 3278645
+49 171 1473461
Aktuelle Jobs:
http://www.camunda.com/jobs/
Aktuelle Jobs:
http://www.camunda.com/jobs/

Weitere ähnliche Inhalte

Andere mochten auch

Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AGWas User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AGONE Schweiz
 
produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?Renan Nespolo
 
Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02fabrice_TALAZAC
 
Open Source BPM - iteratec Architekturtag
Open Source BPM - iteratec ArchitekturtagOpen Source BPM - iteratec Architekturtag
Open Source BPM - iteratec Architekturtagcamunda services GmbH
 
Digital Training (SEO: search engine optimization)
Digital Training (SEO: search engine optimization)Digital Training (SEO: search engine optimization)
Digital Training (SEO: search engine optimization)Carlos De La Ossa
 
Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineEduard Tomàs
 
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...PHINEO gemeinnützige AG
 
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in DortmundMaklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in DortmundCybay New Media
 
Linkbaiting - SEMSEO 2011
Linkbaiting - SEMSEO 2011Linkbaiting - SEMSEO 2011
Linkbaiting - SEMSEO 2011get on top gmbh
 
Tecnicas SEO
Tecnicas SEOTecnicas SEO
Tecnicas SEObluekiu
 
CAP 2: SEO - Técnicas de SEO
CAP 2: SEO - Técnicas de SEOCAP 2: SEO - Técnicas de SEO
CAP 2: SEO - Técnicas de SEOGary Briceño
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App EngineRicardo Bánffy
 

Andere mochten auch (19)

Smart Industry
Smart IndustrySmart Industry
Smart Industry
 
eind presentatie
eind presentatieeind presentatie
eind presentatie
 
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AGWas User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
 
Pictures mix
Pictures mixPictures mix
Pictures mix
 
produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?
 
Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02
 
Open Source BPM - iteratec Architekturtag
Open Source BPM - iteratec ArchitekturtagOpen Source BPM - iteratec Architekturtag
Open Source BPM - iteratec Architekturtag
 
Digital Training (SEO: search engine optimization)
Digital Training (SEO: search engine optimization)Digital Training (SEO: search engine optimization)
Digital Training (SEO: search engine optimization)
 
Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
 
Ogre Game Engine
Ogre Game EngineOgre Game Engine
Ogre Game Engine
 
Aula de Risoto
Aula de Risoto Aula de Risoto
Aula de Risoto
 
SMM-SEO.SEM
SMM-SEO.SEMSMM-SEO.SEM
SMM-SEO.SEM
 
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
Mehr Wert für Gesellschaft und Unternehmen - Ratgeber für wirkungsvolle Unter...
 
Communicating sustainibility
Communicating sustainibilityCommunicating sustainibility
Communicating sustainibility
 
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in DortmundMaklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
Maklerkommunikation 2.0 – Vortrag auf der DKM 2012 in Dortmund
 
Linkbaiting - SEMSEO 2011
Linkbaiting - SEMSEO 2011Linkbaiting - SEMSEO 2011
Linkbaiting - SEMSEO 2011
 
Tecnicas SEO
Tecnicas SEOTecnicas SEO
Tecnicas SEO
 
CAP 2: SEO - Técnicas de SEO
CAP 2: SEO - Técnicas de SEOCAP 2: SEO - Técnicas de SEO
CAP 2: SEO - Técnicas de SEO
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App Engine
 

Ähnlich wie JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java

20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Droolscamunda services GmbH
 
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...JRibbeck
 
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPMcamunda services GmbH
 
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...DNUG e.V.
 
jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
 jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
jBPM und Drools: Prozess- und Regelgestützte Fachanwendungengedoplan
 
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...JRibbeck
 
Requirement Engineering & PDD
Requirement Engineering & PDDRequirement Engineering & PDD
Requirement Engineering & PDDCristina Vidu
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
Camunda Community Day_Wiener BPM Offensive
Camunda Community Day_Wiener BPM OffensiveCamunda Community Day_Wiener BPM Offensive
Camunda Community Day_Wiener BPM Offensivecamunda services GmbH
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGTorsten Kleiber
 
Agile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit RailsAgile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit RailsHussein Morsy
 
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Куранкова Татьяна
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
JavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerDennis Wilson
 
Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKAndré Krämer
 

Ähnlich wie JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java (20)

20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
 
20090204 JUG BB Jbpm und Drools
20090204 JUG BB Jbpm und Drools20090204 JUG BB Jbpm und Drools
20090204 JUG BB Jbpm und Drools
 
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
 
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
 
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
 
jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
 jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
 
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
 
Requirement Engineering & PDD
Requirement Engineering & PDDRequirement Engineering & PDD
Requirement Engineering & PDD
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
Camunda BPM 7.2 - Deutsch
Camunda BPM 7.2 - DeutschCamunda BPM 7.2 - Deutsch
Camunda BPM 7.2 - Deutsch
 
BPEL Vortrag POIS 2007
BPEL Vortrag POIS 2007BPEL Vortrag POIS 2007
BPEL Vortrag POIS 2007
 
Camunda Community Day_Wiener BPM Offensive
Camunda Community Day_Wiener BPM OffensiveCamunda Community Day_Wiener BPM Offensive
Camunda Community Day_Wiener BPM Offensive
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
 
Agile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit RailsAgile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit Rails
 
20091014 J Bpm4 Hamburg
20091014 J Bpm4 Hamburg20091014 J Bpm4 Hamburg
20091014 J Bpm4 Hamburg
 
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 
JavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem Softwerker
 
Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDK
 

Mehr von camunda services GmbH

Using Camunda on Kubernetes through Operators
Using Camunda on Kubernetes through OperatorsUsing Camunda on Kubernetes through Operators
Using Camunda on Kubernetes through Operatorscamunda services GmbH
 
Predictive Process Monitoring in Camunda
Predictive Process Monitoring in CamundaPredictive Process Monitoring in Camunda
Predictive Process Monitoring in Camundacamunda services GmbH
 
Camunda Product Update – The present and the future of Process Automation
Camunda Product Update – The present and the future of Process AutomationCamunda Product Update – The present and the future of Process Automation
Camunda Product Update – The present and the future of Process Automationcamunda services GmbH
 
Tips on how to build Camunda Run for production
Tips on how to build Camunda Run for productionTips on how to build Camunda Run for production
Tips on how to build Camunda Run for productioncamunda services GmbH
 
Blitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in Unternehmen
Blitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in UnternehmenBlitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in Unternehmen
Blitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in Unternehmencamunda services GmbH
 
Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...
Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...
Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...camunda services GmbH
 
Extending human workflow preparing people and processes for the digital era w...
Extending human workflow preparing people and processes for the digital era w...Extending human workflow preparing people and processes for the digital era w...
Extending human workflow preparing people and processes for the digital era w...camunda services GmbH
 
[Webinar] Camunda Optimize Release 3.0
[Webinar] Camunda Optimize Release 3.0[Webinar] Camunda Optimize Release 3.0
[Webinar] Camunda Optimize Release 3.0camunda services GmbH
 
Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...
Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...
Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...camunda services GmbH
 
Process Automation Forum, Processautomatisierung neu gedacht für das digitale...
Process Automation Forum, Processautomatisierung neu gedacht für das digitale...Process Automation Forum, Processautomatisierung neu gedacht für das digitale...
Process Automation Forum, Processautomatisierung neu gedacht für das digitale...camunda services GmbH
 
Process Automation Forum Zurich, finnova AG Bankware
Process Automation Forum Zurich, finnova AG BankwareProcess Automation Forum Zurich, finnova AG Bankware
Process Automation Forum Zurich, finnova AG Bankwarecamunda services GmbH
 
Process Automation Forum Munich, Swiss Life
Process Automation Forum Munich, Swiss LifeProcess Automation Forum Munich, Swiss Life
Process Automation Forum Munich, Swiss Lifecamunda services GmbH
 
Process Automation Forum Vienna, A1 & J-IT
Process Automation Forum Vienna, A1 & J-ITProcess Automation Forum Vienna, A1 & J-IT
Process Automation Forum Vienna, A1 & J-ITcamunda services GmbH
 
Process Automation Forum Vienna, Raiffeisen
Process Automation Forum Vienna, RaiffeisenProcess Automation Forum Vienna, Raiffeisen
Process Automation Forum Vienna, Raiffeisencamunda services GmbH
 
Process Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AG
Process Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AGProcess Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AG
Process Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AGcamunda services GmbH
 
[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native Worldcamunda services GmbH
 

Mehr von camunda services GmbH (20)

Using Camunda on Kubernetes through Operators
Using Camunda on Kubernetes through OperatorsUsing Camunda on Kubernetes through Operators
Using Camunda on Kubernetes through Operators
 
Predictive Process Monitoring in Camunda
Predictive Process Monitoring in CamundaPredictive Process Monitoring in Camunda
Predictive Process Monitoring in Camunda
 
Camunda Product Update – The present and the future of Process Automation
Camunda Product Update – The present and the future of Process AutomationCamunda Product Update – The present and the future of Process Automation
Camunda Product Update – The present and the future of Process Automation
 
Tips on how to build Camunda Run for production
Tips on how to build Camunda Run for productionTips on how to build Camunda Run for production
Tips on how to build Camunda Run for production
 
Process Driven Customer Interaction
Process Driven Customer InteractionProcess Driven Customer Interaction
Process Driven Customer Interaction
 
Exploring Automation in Government
Exploring Automation in GovernmentExploring Automation in Government
Exploring Automation in Government
 
The Pulse of Process Automation
The Pulse of Process AutomationThe Pulse of Process Automation
The Pulse of Process Automation
 
Blitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in Unternehmen
Blitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in UnternehmenBlitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in Unternehmen
Blitzumfrage zur aktuellen Nutzung von Prozessautomatisierung in Unternehmen
 
Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...
Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...
Webinar - A Developer's Quick Start Guide to Open Source Process Automation U...
 
Extending human workflow preparing people and processes for the digital era w...
Extending human workflow preparing people and processes for the digital era w...Extending human workflow preparing people and processes for the digital era w...
Extending human workflow preparing people and processes for the digital era w...
 
Camunda BPM 7.13 Webinar
Camunda BPM 7.13 WebinarCamunda BPM 7.13 Webinar
Camunda BPM 7.13 Webinar
 
[Webinar] Camunda Optimize Release 3.0
[Webinar] Camunda Optimize Release 3.0[Webinar] Camunda Optimize Release 3.0
[Webinar] Camunda Optimize Release 3.0
 
Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...
Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...
Webinar: Monitoring & Orchestrating Your Microservices Landscape using Workfl...
 
Process Automation Forum, Processautomatisierung neu gedacht für das digitale...
Process Automation Forum, Processautomatisierung neu gedacht für das digitale...Process Automation Forum, Processautomatisierung neu gedacht für das digitale...
Process Automation Forum, Processautomatisierung neu gedacht für das digitale...
 
Process Automation Forum Zurich, finnova AG Bankware
Process Automation Forum Zurich, finnova AG BankwareProcess Automation Forum Zurich, finnova AG Bankware
Process Automation Forum Zurich, finnova AG Bankware
 
Process Automation Forum Munich, Swiss Life
Process Automation Forum Munich, Swiss LifeProcess Automation Forum Munich, Swiss Life
Process Automation Forum Munich, Swiss Life
 
Process Automation Forum Vienna, A1 & J-IT
Process Automation Forum Vienna, A1 & J-ITProcess Automation Forum Vienna, A1 & J-IT
Process Automation Forum Vienna, A1 & J-IT
 
Process Automation Forum Vienna, Raiffeisen
Process Automation Forum Vienna, RaiffeisenProcess Automation Forum Vienna, Raiffeisen
Process Automation Forum Vienna, Raiffeisen
 
Process Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AG
Process Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AGProcess Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AG
Process Automation Forum Düsseldorf, Provinzial Rheinland Versicherung AG
 
[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
 

JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java

  • 1. Java User Group Berlin Brandenburg Berlin, 04.02.2009 bernd.ruecker@camunda.com Vorstellung JBoss jBPM und Drools Geschäftsprozesse und Regeln mit Open Source Java
  • 2. Bernd Rücker / ber nd.r uecker @cam unda.com / 2 • Berater, Trainer, Coach • Softwareentwickler • Committer im JBoss jBPM-Projekt • Themen: – BPM & SOA – Process Execution (jPDL, BPEL, XPDL, …) – JBoss SOA Platform (jBPM, ESB, Drools, …) – Enterprise Anwendungen mit Java EE • Siehe www.camunda.com • Blog www.bpm-guide.de Bernd Rücker Wer bin ich?
  • 3. Bernd Rücker / ber nd.r uecker @cam unda.com / 3 Eckdaten zum Unternehmen Einleitung camunda GmbH Gegründet: November 2002 camunda services GmbH Gegründet: März 2008 Mitarbeiter: 6 Sitz: Berlin / Stuttgart Unsere Leistungen •Beratung •Seminare •Process Hosting Unsere Themen • Ganzheitliches BPM • Prozessautomatisierung • SOA, BPEL, XPDL, • JBoss SOA Platform (jBPM, Drools, ESB) • BPMN • BPM-Toolauswahl
  • 4. Bernd Rücker / ber nd.r uecker @cam unda.com / 4 „Ein Prozess ist eine Struktur, deren Elemente Aufgaben, Aufgabenträger, Sachmittel und Informationen sind, die durch logische Folgebeziehungen verknüpft sind. Darüber hinaus werden deren zeitliche, räumliche und mengenmäßige Dimensionen konkretisiert. Ein Prozess hat ein definiertes Startereignis (Input) und ein Ergebnis (Output) und dient dazu, einen Wert für Kunden zu schaffen.“ Synonyme: Geschäftsprozess, Business Process Was ist ein Prozess? Begriffsdefinition Kunde Input Output Kunde Logische Aufgabenfolge Fischermanns, Guido: Praxishandbuch Prozessmanagement
  • 5. Bernd Rücker / ber nd.r uecker @cam unda.com / 5 Einfaches Prozessmodell Begriffsdefinition Kunde Bestel- lung Lieferung Kunde Bestell- annahme Rechnung- stellung Waren- entnahme Versand
  • 6. Bernd Rücker / ber nd.r uecker @cam unda.com / 6 Ein „digitaler“ Prozess mit Business Process Engine Task Zuweisung Service Aufruf Task Zuweisung IT Δ Durchlaufzeit Process Engine Human Workflow Human WorkflowEAI SOA
  • 7. Bernd Rücker / ber nd.r uecker @cam unda.com / 7 Process Execution Business Process Engine Task Zuweisung Service Aufruf Task Zuweisung Tasklist Externes System Transaction / Request process execution Zeit Process Execution Engine … Client 1.) Aufgabe erzeugen 2.) Aufgabe abschließen 1.) System aufrufen / Message 2.) Asynchrone Antwort als Message
  • 8. Bernd Rücker / ber nd.r uecker @cam unda.com / 8 Business Process Engine (BPM-Engine)Business Process Engine (BPM-Engine) Definition Laufzeit Business Process Engine Middleware für Geschäftsprozesse PersistenzPersistenz Prozess- Ausführung Prozess- Ausführung Prozess- definitionen Prozess- definitionen AdministrationAdministrationProzess- Logs Prozess- Logs Aufgaben- Verwaltung Aufgaben- Verwaltung Sachbearbeiter Fremd- Anwendungen Fremd- Anwendungen Business Analyst Administrator Entwickler SimulationSimulation
  • 9. Bernd Rücker / ber nd.r uecker @cam unda.com / 9 • Business Process Engine • „Library“ • POJO-Kern: Interne Prozessrepräsentation durch Java-Modelle • Persistenz über Hibernate (DB-Unabhängigkeit) • Lauffähig mit oder ohne Application-Server • Klein und flexibel, leicht erweiterbar • Aktuell Version 3.2, Version 4 in der Entwicklung • Open Source (LGPL) JBoss jBPM Open Source Process Execution
  • 10. Bernd Rücker / ber nd.r uecker @cam unda.com / 10 „Graph oriented programming“ Der Prozess als gerichteter Graph Node Transition from to ** leaving Transitions arriving Transitions Token current Node 1 <process-definition> ... <node name=“serve client”> <transition name=“ok” to=“order” /> <transition name=“nok” to=“joke” /> </node> <node name=“order” /> <node name=“joke” /> ... </process-definition> <process-definition> ... <node name=“serve client”> <transition name=“ok” to=“order” /> <transition name=“nok” to=“joke” /> </node> <node name=“order” /> <node name=“joke” /> ... </process-definition>
  • 11. Bernd Rücker / ber nd.r uecker @cam unda.com / 11 • Execute Methode implementiert Verhalten • Konfiguration der Node-Typen per XML Implementierung Verhalten
  • 12. Bernd Rücker / ber nd.r uecker @cam unda.com / 12 Token-Hierarchie
  • 13. Bernd Rücker / ber nd.r uecker @cam unda.com / 13 • Process Engine ist eigene Architekturschicht • Domänenobjekte oder Referenzen als Prozessvariablen • Ansteuerung ext. Services Business Process Engine in Java Architektur EJB-Container (oder Tomcat oder Java SE)EJB-Container (oder Tomcat oder Java SE) Session Bean Session Bean JCAJCA JMSJMSEJBEJB WSWS jBPM (jPDL) Human Task Mgmnt Human Task Mgmnt
  • 14. Bernd Rücker / ber nd.r uecker @cam unda.com / 14 Prozess: Grafik / XML  Java  DB XMLXML DBDB jBPM APIjBPM API deploy .class.class Neue Version
  • 15. Bernd Rücker / ber nd.r uecker @cam unda.com / 15 • Task-Node: Human Tasks / Aufgaben • State: Wait-States • Fork / Join: Parallelisierung • Decision: Automatische Entscheidung • Start-State / End-State • Super-State • Process-State • … • Eigene Node-Typen mit Verhalten können implementiert werden Verschiedene Node-Typen jBPM in a nutshell
  • 16. Bernd Rücker / ber nd.r uecker @cam unda.com / 16 • Einfache Java-API zur Steuerung der Engine – Prozessstart – Aufgabenliste – … • Aufrufen von „User-Code“ – definierte Stellen im Prozess – Interface & Java-Klassen jBPM & Java jBPM in a nutshell
  • 17. Bernd Rücker / ber nd.r uecker @cam unda.com / 17 public class MyAction implements ActionHandler { public void execute(ExecutionContext ctx) { Object var = ctx.getVariable("var"); result = service.doSomething(var); ctx.setVariable("result", result); } } public class MyAction implements ActionHandler { public void execute(ExecutionContext ctx) { Object var = ctx.getVariable("var"); result = service.doSomething(var); ctx.setVariable("result", result); } } jBPM & Java jBPM in a nutshell JbpmConfiguration conf = JbpmConfiguration.getInstance(); JbpmContext context = conf. createJbpmContext(); ProcessInstance pi = context.getGraphSession(). findLatestProcessDefinition("Ticket").createProcessInstance(); pi.getRootToken().signal(); List<TaskInstance> tasks = context.getTaskMgmtSession(). findTaskInstances("Vertrieb"); tasks.get(0).end("Ticket schliessen"); context.close(); JbpmConfiguration conf = JbpmConfiguration.getInstance(); JbpmContext context = conf. createJbpmContext(); ProcessInstance pi = context.getGraphSession(). findLatestProcessDefinition("Ticket").createProcessInstance(); pi.getRootToken().signal(); List<TaskInstance> tasks = context.getTaskMgmtSession(). findTaskInstances("Vertrieb"); tasks.get(0).end("Ticket schliessen"); context.close();
  • 18. Bernd Rücker / ber nd.r uecker @cam unda.com / 18 Command-Pattern Remote-Zugriffe und Asynchronität public class TaskInstanceEndCommand implements Command { ... public Object execute(JbpmContext jbpmContext) { TaskInstance taskInstance = getTaskInstance(jbpmContext); if (transitionName == null) { taskInstance.end(); } else { taskInstance.end(transitionName); } return taskInstance; } ... } public class TaskInstanceEndCommand implements Command { ... public Object execute(JbpmContext jbpmContext) { TaskInstance taskInstance = getTaskInstance(jbpmContext); if (transitionName == null) { taskInstance.end(); } else { taskInstance.end(transitionName); } return taskInstance; } ... }
  • 19. Bernd Rücker / ber nd.r uecker @cam unda.com / 19 Beispiel: EJB3 + Swing EJB-ContainerEJB-Container BPM-Engine Command Service SLSB JCA JMS …EJB WebcontainerWebcontainer Command Service MDB Web-GUI Swing-GUI CommandsCommands Fremd- systeme Message Mit Commands Message Mit Commands Korrelation
  • 20. Bernd Rücker / ber nd.r uecker @cam unda.com / 20 Process Execution Languages Welche Sprache spricht BPM? BPEL XPDL UML EPC BPMN YAML jPDL … Standards Proprietär Wissenschaftlich Fachliche Notationen DSL‘s
  • 21. Bernd Rücker / ber nd.r uecker @cam unda.com / 21 Quelle: Dr. Martin Bartonitz Sprachen heute: Was nehmen? Komplexität, LOC, Mächtigkeit, Standards?
  • 22. Bernd Rücker / ber nd.r uecker @cam unda.com / 22 • Es existieren verschiedenste Prozessausführungs- sprachen (Process Execution Language) – BPEL, XPDL, jPDL, DSL‘s, … • Es gibt nicht die perfekte Sprache • Koexistenz von verschiedenen Sprachen erlauben • Sprache nach Problem auswählen  Grundfunktionalität Prozessmaschine in PVM JBoss Process Virtual Machine JBoss PVM
  • 23. Bernd Rücker / ber nd.r uecker @cam unda.com / 23 Konzepte & Kernabstraktionen Prozesse als Zustandsautomat Verhalten über Sprache definiert
  • 24. Bernd Rücker / ber nd.r uecker @cam unda.com / 24 Just an API PVM definiert keine Sprache ProcessDefinition processDefinition = ProcessFactory.build() .node("accept loan request").initial().behaviour(new WaitState()) .transition().to("loan evaluation") .node("loan evaluation").behaviour(new WaitState()) .transition("approve").to("wire the money") .transition("reject").to("end") .node("wire the money").behaviour(new Display("automatic payment")) .transition().to("end") .node("end").behaviour(new WaitState()) .done(); ProcessDefinition processDefinition = ProcessFactory.build() .node("accept loan request").initial().behaviour(new WaitState()) .transition().to("loan evaluation") .node("loan evaluation").behaviour(new WaitState()) .transition("approve").to("wire the money") .transition("reject").to("end") .node("wire the money").behaviour(new Display("automatic payment")) .transition().to("end") .node("end").behaviour(new WaitState()) .done();
  • 25. Bernd Rücker / ber nd.r uecker @cam unda.com / 25 • Graphen / Blockstruktur • Sprache kann durch entsprechendes Node-Verhalten implementiert werden • Es wird geben – XPDL: Nova Bonita – jPDL: JBoss jBPM JPDL 4 – BPEL: Orchestra • Sprachen sind in XML umgesetzt Prozesssprachen Die PVM unterstützt verschiedene Sprachen
  • 26. Bernd Rücker / ber nd.r uecker @cam unda.com / 26 Was ist BPM? Human Workflow Management Serviceorientierte Architekturen (SOA) Dokumenten-Management – Systeme – DMS (u.a.) Enterprise Appliation Integration – EAI ab 2004 ab 2000 ab 2005 Ablauforganisation Business Process Reengineering - BPR (Orga-) Geschäftsprozess- Management - GPM Organisationslehre bis 1990 1990 - 2000 ab 2000 Business IT Prozessautomatisierung ab 2006 Begriffsproblem Business Process Management - BPM
  • 27. Bernd Rücker / ber nd.r uecker @cam unda.com / 27 Aktuelle Ambitionen Der BPM-Kreislauf Prozess- implementierung Prozess- entwurf Prozess- controlling KVP Prozess- Strategie Business IT
  • 28. Bernd Rücker / ber nd.r uecker @cam unda.com / 28 Der Traum der Magic BPM-Suite Der BPM-Kreislauf Modelling Monitoring EAI / SOAHuman Workflow Business IT Magic BPM-Suite
  • 29. Bernd Rücker / ber nd.r uecker @cam unda.com / 29 • Aufbauend auf PVM • Persistenz über JPA geplant • Unterstützung BPMN • siehe http://www.bpm-guide.de/2009/01/26/ein-erster-blick- JBoss jBPM 4 jBPM die Vierte
  • 30. Bernd Rücker / ber nd.r uecker @cam unda.com / 30 • Allgemeingültige API – ProcessService – ExecutionService – TaskService – ManagementService – CommandService • Grafische Informationen im gleichen XML • Deployment in AS/ESB wird verbessert Weitere Änderungen in jBPM 4 jBPM die Vierte
  • 31. Bernd Rücker / ber nd.r uecker @cam unda.com / 31 Beispielprozess im neuen Designer jBPM die Vierte
  • 32. Bernd Rücker / ber nd.r uecker @cam unda.com / 32 Und das Beispiel als Quellcode BPM die Vierte <process xmlns="http://jbpm.org/4/jpdl" name="TicketProcess"> <start name="Start" g="15,146,48,48"> <flow to="Kundenbetreuer bekannt?"/> </start> <exclusive name="Kundenbetreuer bekannt?" g="84,144,48,48"> <flow to="Kundenbetreuer festlegen" g="108,24"> <condition expr="#{false}"/> </flow> <flow to="join"> <condition expr="#{true}"/> </flow> </exclusive> <task name="Kundenbetreuer festlegen" g="168,0,153,51" assignee="bernd"> <flow to="CRM aktualisieren"/> </task> <process xmlns="http://jbpm.org/4/jpdl" name="TicketProcess"> <start name="Start" g="15,146,48,48"> <flow to="Kundenbetreuer bekannt?"/> </start> <exclusive name="Kundenbetreuer bekannt?" g="84,144,48,48"> <flow to="Kundenbetreuer festlegen" g="108,24"> <condition expr="#{false}"/> </flow> <flow to="join"> <condition expr="#{true}"/> </flow> </exclusive> <task name="Kundenbetreuer festlegen" g="168,0,153,51" assignee="bernd"> <flow to="CRM aktualisieren"/> </task>
  • 33. Bernd Rücker / ber nd.r uecker @cam unda.com / 33 Nicht gut: Regeln im Prozess Prozessmodelle und Geschäftsregeln
  • 34. Bernd Rücker / ber nd.r uecker @cam unda.com / 34 Regeln sinnvoll abbilden Auftragswert Rabatt verhandelt? Rabatt (%) AW < 50 T€ Nein 0 50 T€ <= AW < 100 T€ Nein 3 100 T€ <= AW < 250 T€ Nein 5 <egal> Ja <individuell> Prozessmodelle und Geschäftsregeln
  • 35. Bernd Rücker / ber nd.r uecker @cam unda.com / 35 Was sind Regeln? • „Wenn ich müde bin, dann gehe ich ins Bett!“ • „WENN .. DANN ..“-Struktur • Bedingung und Konseqenz (Prämisse und Konklusion; Left-Hand-Side LHS und Right-Hand- Side RHS) • Konsequenz wird häufig als „Aktion“ bezeichnet • Bedingungen prüfen „Fakten“ • Regeln „feuern“, wenn deren Bedingung eintrifft
  • 36. Bernd Rücker / ber nd.r uecker @cam unda.com / 36 • Direkte Programmierung im Quellcode: if ( person.istMuede() == true ) { person.putzeZaehne(); person.geheInsBett(); } • Spezifische Lösungen (Codegenerierung, DSL, Speziallösungen, …) • Regelmaschine / Rule Engine Wie werden Regeln umgesetzt? Alternativen
  • 37. Bernd Rücker / ber nd.r uecker @cam unda.com / 37 • Wartbarkeit und Validierbarkeit nicht gegeben • Regeln müssen durch Entwickler in Quellcode übersetzt werden • Fachliche Regeln werden über verschiedene Klassen verteilt • Keine Lesbarkeit der Regeln für den Fachbereich • Konflikt-Lösung muss realisiert werden Probleme programmierter Regeln Wie werden Regeln umgesetzt?
  • 38. Bernd Rücker / ber nd.r uecker @cam unda.com / 38 • Explizite Formulierung der Regeln als Regeln • Deklarativ: Welche Regeln wann wie ausgeführt werden entscheidet die Regelmaschine • Regeln für Fachbereich verständlich Vorteile der Rule-Engine Wie werden Regeln umgesetzt? Bedingung: Person.muede = true Konsequenz: person.putzeZaehne(); person.geheInsBett(); Bedingung: Person.muede = true Konsequenz: person.putzeZaehne(); person.geheInsBett();
  • 39. Bernd Rücker / ber nd.r uecker @cam unda.com / 39 • Fakten (Wissen) = Domänenobjekte (POJOs) • Rule Engine wird generisch in die Architektur integriert (Interceptoren, …) • Rule Engine wird gezielt angesprochen Rule Engines in Java Architektur ClientClient Anwendung / ServerAnwendung / Server InterceptorInterceptor FachlogikFachlogik
  • 40. Bernd Rücker / ber nd.r uecker @cam unda.com / 40 • Java Rule Engine (RETE-Implementierung) • „JBoss Drools“ / „JBoss Rules“ • Lauffähig mit oder ohne Application-Server • „Library“ • Business Rules Management System (BRMS) • Aktuell Version 4.0 (Version 5 in der Pipe) • Open Source (ASL) JBoss Drools Die Open Source Rule Engine
  • 41. Bernd Rücker / ber nd.r uecker @cam unda.com / 41 Drools-Regeln Beispiel package com.camunda.demo import demo.business.*; import demo.infrastructure.ErrorList; global ErrorList errors; rule "Auftragsrabatt bei hohem Bestellwert" when o: Order( value>5000 ) then o.setDiscount(0.05); end rule "Nachnahme nur bis 2500 € möglich" when o: Order( value>2500, shippingType="COD" ) then errors.addError("Nachname nicht möglich bei Auftragswert " + o.getValue()); end package com.camunda.demo import demo.business.*; import demo.infrastructure.ErrorList; global ErrorList errors; rule "Auftragsrabatt bei hohem Bestellwert" when o: Order( value>5000 ) then o.setDiscount(0.05); end rule "Nachnahme nur bis 2500 € möglich" when o: Order( value>2500, shippingType="COD" ) then errors.addError("Nachname nicht möglich bei Auftragswert " + o.getValue()); end
  • 42. Bernd Rücker / ber nd.r uecker @cam unda.com / 42 Drools im Einsatz API RuleBaseLoader loader = RuleBaseLoader.getInstance(); RuleBase ruleBase = loader.loadFromReader( new InputStreamReader(this.getClass().getResourceAsStream( "/demo.drl"))); WorkingMemory wm = ruleBase.newStatefulSession(); wm.insert(meldung); wm.fireAllRules(); RuleBaseLoader loader = RuleBaseLoader.getInstance(); RuleBase ruleBase = loader.loadFromReader( new InputStreamReader(this.getClass().getResourceAsStream( "/demo.drl"))); WorkingMemory wm = ruleBase.newStatefulSession(); wm.insert(meldung); wm.fireAllRules(); WorkingMemory POJO‘s Regeln fireAllRules
  • 43. Bernd Rücker / ber nd.r uecker @cam unda.com / 43 There are four Golfers standing at a tee, in a line from left to right • The golfer to Fred’s immediate right is wearing blue pants • Joe is second in line • Bob is wearing plaid pants • Tom isn’t in position one or four, and he isn’t wearing the orange pants Beispiel: Golfer Riddle Drools
  • 44. Bernd Rücker / ber nd.r uecker @cam unda.com / 44 Regelbeispiel Example: Golfer Riddle rule "find solution“ when // There is a golfer named Fred, // Whose positions is $p1 $fred : Golfer( name == "Fred" ) // Joe is in position 2 $joe : Golfer( name == "Joe", position == 2, position != $fred.position, color != $fred.color ) ... then System.out.println( "Fred " + $fred.getPosition() + " " + $fred.getColor() ); System.out.println( "Joe " + $joe.getPosition() + " " + $joe.getColor() ); System.out.println( "Bob " + $bob.getPosition() + " " + $bob.getColor() ); System.out.println( "Tom " + $tom.getPosition() + " " + $tom.getColor() ); end rule "find solution“ when // There is a golfer named Fred, // Whose positions is $p1 $fred : Golfer( name == "Fred" ) // Joe is in position 2 $joe : Golfer( name == "Joe", position == 2, position != $fred.position, color != $fred.color ) ... then System.out.println( "Fred " + $fred.getPosition() + " " + $fred.getColor() ); System.out.println( "Joe " + $joe.getPosition() + " " + $joe.getColor() ); System.out.println( "Bob " + $bob.getPosition() + " " + $bob.getColor() ); System.out.println( "Tom " + $tom.getPosition() + " " + $tom.getColor() ); end
  • 45. Bernd Rücker / ber nd.r uecker @cam unda.com / 45 • In-memory Knowledge-Repository • Basiert auf Rete Algorithm • Forward chaining • Backward chaining ist geplant (Drools 5?) Drools im Einsatz Wie funktioniert es intern?
  • 46. Bernd Rücker / ber nd.r uecker @cam unda.com / 46 Für den Fachbereich: Decision Tables
  • 47. Bernd Rücker / ber nd.r uecker @cam unda.com / 47 DSL-Support Drools rule "Abmeldung - Check mit DSL" when Versicherter unter 25 Jahre alt and Mehr als 3 Unfälle gebaut then Police nicht möglich end rule "Abmeldung - Check mit DSL" when Versicherter unter 25 Jahre alt and Mehr als 3 Unfälle gebaut then Police nicht möglich end [when]Versicherter unter {MindestAlter} Jahre alt= Person( age < {MindestAlter} ) [when]Mehr als {Anzahl} Unfälle gebaut= Person( accidentCount > {Anzahl} ) ... [then]Police nicht möglich= errors.addError("Police kann nicht ausgestellt werden"); [when]Versicherter unter {MindestAlter} Jahre alt= Person( age < {MindestAlter} ) [when]Mehr als {Anzahl} Unfälle gebaut= Person( accidentCount > {Anzahl} ) ... [then]Police nicht möglich= errors.addError("Police kann nicht ausgestellt werden");
  • 48. Bernd Rücker / ber nd.r uecker @cam unda.com / 48 DSL-Support Drools
  • 49. Bernd Rücker / ber nd.r uecker @cam unda.com / 49 Regeleditor ohne DSL Drools
  • 50. Bernd Rücker / ber nd.r uecker @cam unda.com / 50 Guided Rule Editor Verfügbar in Eclipse & BRMS
  • 51. Bernd Rücker / ber nd.r uecker @cam unda.com / 51 • Welche Regeln sollen in welcher Reihenfolge • Parallel oder • unter welchen Bedingungen ausgeführt werden RuleFlow Grahpical representation
  • 52. Bernd Rücker / ber nd.r uecker @cam unda.com / 52 Tooling: Eclipse Drools
  • 53. Bernd Rücker / ber nd.r uecker @cam unda.com / 53 Business Rules Management System Drools BRMS ServerServer DroolsDrools Web-GUIWeb-GUI Rule-Repository (JCR) Rule-Repository (JCR) AnwendungAnwendung
  • 54. Bernd Rücker / ber nd.r uecker @cam unda.com / 54 BPM + !BRM = ? !BPM + BRM = ? BPM + BRM = ?
  • 55. Bernd Rücker / ber nd.r uecker @cam unda.com / 55 • Möglich! • Vorteil: Maximale Flexibilität • Nachteile – Keine Visualisierung / Modellierung des Prozessflusses – Nicht immer offensichtlich, warum was passiert – Keine „Grenzen“ durch Prozessstruktur – Keine out-of-the-box Wartezustände / Persistenz Geschäftsprozesse mit Regeln umsetzen? BPM + BRM
  • 56. Bernd Rücker / ber nd.r uecker @cam unda.com / 56 • BPM (Prozesse) – Geschäftsprozesse / Workflows – Fachliche Modellierung – Hoher Standardisierungs-/Wiederholungsgrad • BRM (Regeln) – Prozessunabhängige Regeln – Punktuelle Integration in Prozesse – Beeinflussung des Prozessablaufs (80/20 Regel) In Kombination stabilere Prozesse bei mehr Agilität! Einsatzmöglichkeiten BPM + BRM
  • 57. Bernd Rücker / ber nd.r uecker @cam unda.com / 57 Kombinationsmöglichkeiten Regeln treffen EntscheidungenRegeln treffen Entscheidungen Regeln steuern Zuweisung von Aufgaben Regeln steuern Zuweisung von Aufgaben Regeln schließen neues WissenRegeln schließen neues Wissen Und: Beeinflussung des Prozessablaufs in Sonderfällen Und: Beeinflussung des Prozessablaufs in Sonderfällen
  • 58. Bernd Rücker / ber nd.r uecker @cam unda.com / 58 Schließen von “neuem Wissen” jBPM + Drools rule "Special Discount" when o : Order( customerName == "Bernd" ) then # 5 % discount o.applyDiscount( 0.95 ); System.out.println("Special discount granted"); end rule "Special Discount" when o : Order( customerName == "Bernd" ) then # 5 % discount o.applyDiscount( 0.95 ); System.out.println("Special discount granted"); end <action class="org.jbpm.action.RulesActionHandler"> <ruleFile>/...OrderPricingRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> </action> <action class="org.jbpm.action.RulesActionHandler"> <ruleFile>/...OrderPricingRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> </action>
  • 59. Bernd Rücker / ber nd.r uecker @cam unda.com / 59 Entscheidungen jBPM + Drools <node name="drools decision"> <action class="org.jbpm.action.RulesActionHandler“> <ruleFile>/com/.../OrderDecisionRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> <signalToken>false</signalToken> </action> <transition name="conspicuous" to="do something" /> <transition name="casual" to="determine discount" /> </node> <node name="drools decision"> <action class="org.jbpm.action.RulesActionHandler“> <ruleFile>/com/.../OrderDecisionRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> <signalToken>false</signalToken> </action> <transition name="conspicuous" to="do something" /> <transition name="casual" to="determine discount" /> </node> rule "Conspicuous Order" when Order( price > 500) then System.out.println("signal conspicuous order"); executionContext.getNode(). leave(executionContext, "conspicuous"); end rule "Conspicuous Order" when Order( price > 500) then System.out.println("signal conspicuous order"); executionContext.getNode(). leave(executionContext, "conspicuous"); end Besseres Design: Regeln schreiben Ergebnis in Prozessvariable und jBPM „Decision“ wertet diese aus
  • 60. Bernd Rücker / ber nd.r uecker @cam unda.com / 60 Beeinflussung des Prozessablaufs Event getrieben reagieren / Ausnahmen rule "Order gets cancelled" when evt : Event( type == "cancel" ) then token.setNode( "end2" ); end rule "Order gets cancelled" when evt : Event( type == "cancel" ) then token.setNode( "end2" ); end Token
  • 61. Bernd Rücker / ber nd.r uecker @cam unda.com / 61 Actor-Assignment Wer ist zuständig? <assignment class="org.jbpm.assignment.RulesAssignmentHandler"> <group>underwriting</group> <ruleFile>/Assignment.drl</ruleFile> <objectNames><element>policy</element></objectNames> </assignment> <assignment class="org.jbpm.assignment.RulesAssignmentHandler"> <group>underwriting</group> <ruleFile>/Assignment.drl</ruleFile> <objectNames><element>policy</element></objectNames> </assignment> rule "Determine Junior Role“ when Policy( basePrice < 500) then insert(new Role("junior")); end rule "Determine Actor" salience -100 when Role($roleName : roleName) $a : Assignable() $group : Group() Membership( group == $group, role == $roleName, $user : user ) then $a.setActorId($user.getName()); end rule "Determine Junior Role“ when Policy( basePrice < 500) then insert(new Role("junior")); end rule "Determine Actor" salience -100 when Role($roleName : roleName) $a : Assignable() $group : Group() Membership( group == $group, role == $roleName, $user : user ) then $a.setActorId($user.getName()); end
  • 62. Bernd Rücker / ber nd.r uecker @cam unda.com / 62 Ausblick: ESB / Content Based Routing Beispiel: JBoss jBPM jPDL + JBoss ESB Environment JBoss jBPMJBoss ESB Content-Based Router ServiceContent-Based Router Service System 1System 1 System 2System 2
  • 63. Bernd Rücker / ber nd.r uecker @cam unda.com / 63 ESB & Content Based Routing Vergleiche Event Driven Architecture (EDA) Quelle: JBoss
  • 64. Bernd Rücker / ber nd.r uecker @cam unda.com / 64 • jBPM ist eine kleine, flexible Process Engine. Bewährt auch in großen Projekten! • Drools ist cool und steht teuren Rule Engines in wenig nach • Integrieren & Kombinieren! • siehe auch JBoss SOA Plattform (ESB) • BPM & BRM bleiben Thema, selbst wenn SOA Tod ist ;-) Fazit Geschäftsprozesse und Regeln mit jBPM und Drools
  • 65. Bernd Rücker / ber nd.r uecker @cam unda.com / 65 Fragen & Antworten Unsere Themen • Ganzheitliches BPM • Prozessautomatisierung • SOA, BPEL, XPDL, jBPM, Drools, ESB • BPMN • BPM-Toolauswahl Unsere Leistungen • Beratung • Seminare • Process Hosting Bernd Rücker Geschäftsführer Berater, Trainer & Coach bernd.ruecker@camunda.com +49 711 3278645 +49 171 1473461 Aktuelle Jobs: http://www.camunda.com/jobs/ Aktuelle Jobs: http://www.camunda.com/jobs/