SlideShare ist ein Scribd-Unternehmen logo
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

PDF
jBPM & Drools
PPT
Regelbasierte Systeme mit JBoss Drools
PDF
130605 blog - drools
PDF
Einführung in Clean Code mit .NET - Teil 1
PPTX
The Lotus Code Cookbook
PDF
DNUG2015 Frühjahrskonferenz: Prozessautomatisierung im Domino Kosmos, nicht o...
PDF
Die 5 häufigsten Irrtümer zu BPMN
PDF
Präsentation der Bachelorarbeit
jBPM & Drools
Regelbasierte Systeme mit JBoss Drools
130605 blog - drools
Einführung in Clean Code mit .NET - Teil 1
The Lotus Code Cookbook
DNUG2015 Frühjahrskonferenz: Prozessautomatisierung im Domino Kosmos, nicht o...
Die 5 häufigsten Irrtümer zu BPMN
Präsentation der Bachelorarbeit

Andere mochten auch (19)

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

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

PPTX
jBPM 4 bei der JUG Karlsruhe
PPTX
JBoss jBPM 4 bei der JBUG München
PDF
2014 01-16 jug wolfsburg
PDF
PDF
camunda BPM launch party - 04.2013
PPTX
JBoss jBPM 4
PDF
JBoss One Day Talk: Open Source BPM mit BPMN 2.0 und Java
PDF
SE-Live 2013: Embeddable Process Engines mit BPMN 2.0
PDF
jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
PDF
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
PPTX
20080716 BPMN – Kurzeinfuehrung
PDF
camunda BPM @ JUG München
PPTX
BPMN - Eine Sprache für Business und IT?
PDF
20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
PDF
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
PDF
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
PDF
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
PPTX
20091112 WJAX BPM und die IT: Architekturen und Use Cases
PDF
BPMN und Workflows in .NET
PDF
20090204 JUG BB Jbpm und Drools
jBPM 4 bei der JUG Karlsruhe
JBoss jBPM 4 bei der JBUG München
2014 01-16 jug wolfsburg
camunda BPM launch party - 04.2013
JBoss jBPM 4
JBoss One Day Talk: Open Source BPM mit BPMN 2.0 und Java
SE-Live 2013: Embeddable Process Engines mit BPMN 2.0
jBPM und Drools: Prozess- und Regelgestützte Fachanwendungen
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
20080716 BPMN – Kurzeinfuehrung
camunda BPM @ JUG München
BPMN - Eine Sprache für Business und IT?
20080421 JAX Geschaeftsprozesse und Regeln mit jBPM und Drools
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
20091112 WJAX BPM und die IT: Architekturen und Use Cases
BPMN und Workflows in .NET
20090204 JUG BB Jbpm und Drools
Anzeige

Mehr von camunda services GmbH (20)

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