[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
20090204 JUG BB Jbpm und Drools
1. Vorstellung JBoss jBPM und Drools
Geschäftsprozesse und Regeln mit
Open Source Java
Java User Group Berlin Brandenburg
Berlin, 04.02.2009
bernd.ruecker@camunda.com
2. Bernd Rücker
Wer bin ich?
• 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 / bernd.ruecker@camunda.com / 2
3. Eckdaten zum Unternehmen
Einleitung
camunda GmbH Unsere Themen
Gegründet: November 2002 • Ganzheitliches BPM
• Prozessautomatisierung
camunda services GmbH
Gegründet: März 2008 • SOA, BPEL, XPDL,
• JBoss SOA Platform (jBPM,
Mitarbeiter: 6 Drools, ESB)
Sitz: Berlin / Stuttgart • BPMN
• BPM-Toolauswahl
Unsere Leistungen
• Beratung
• Seminare
• Process Hosting
Bernd Rücker / bernd.ruecker@camunda.com / 3
4. Was ist ein Prozess?
Begriffsdefinition
„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
Logische
Kunde Input Output Kunde
Aufgabenfolge
Fischermanns, Guido:
Praxishandbuch Prozessmanagement
Bernd Rücker / bernd.ruecker@camunda.com / 4
6. Ein „digitaler“ Prozess
mit Business Process Engine
∆ Durchlaufzeit
Task Service Task
Zuweisung Aufruf Zuweisung
Process Engine
IT
Human Workflow EAI Human Workflow
SOA
Bernd Rücker / bernd.ruecker@camunda.com / 6
7. Process Execution
Business Process Engine
1.) Aufgabe erzeugen 1.) System aufrufen / Message
2.) Aufgabe abschließen 2.) Asynchrone Antwort als Message
Client Tasklist Externes
System
Process Execution Engine
Transaction / Request
… Zeit
process execution
Task Service Task
Zuweisung Aufruf Zuweisung
Bernd Rücker / bernd.ruecker@camunda.com / 7
8. Business Process Engine
Middleware für Geschäftsprozesse
Business Analyst Sachbearbeiter
Aufgaben-
Verwaltung
Simulation
Prozess- Prozess- Fremd-
definitionen Ausführung Anwendungen
Entwickler
Prozess-
Administration
Logs
Administrator
Persistenz
Definition Laufzeit
Business Process Engine (BPM-Engine)
Bernd Rücker / bernd.ruecker@camunda.com / 8
9. JBoss jBPM
Open Source Process Execution
• 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)
Bernd Rücker / bernd.ruecker@camunda.com / 9
13. Business Process Engine in Java
Architektur
• Process Engine ist eigene Architekturschicht
• Domänenobjekte oder Referenzen als
Prozessvariablen
• Ansteuerung ext.
Services
EJB-Container (oder Tomcat oder Java SE)
jBPM (jPDL)
Human
Session Task
Bean Mgmnt
EJB JCA JMS
WS
Bernd Rücker / bernd.ruecker@camunda.com / 13
14. Prozess: Grafik / XML Java DB
deploy
XML jBPM API
Neue
.class
Version
DB
Bernd Rücker / bernd.ruecker@camunda.com / 14
15. Verschiedene Node-Typen
jBPM in a nutshell
• 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
Bernd Rücker / bernd.ruecker@camunda.com / 15
16. jBPM & Java
jBPM in a nutshell
• Einfache Java-API zur Steuerung der Engine
– Prozessstart
– Aufgabenliste
–…
• Aufrufen von „User-Code“
– definierte Stellen im Prozess
– Interface & Java-Klassen
Bernd Rücker / bernd.ruecker@camunda.com / 16
17. 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();
public class MyAction implements ActionHandler {
public void execute(ExecutionContext ctx) {
Object var = ctx.getVariable("var");
result = service.doSomething(var);
ctx.setVariable("result", result);
}
}
Bernd Rücker / bernd.ruecker@camunda.com / 17
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;
}
...
}
Bernd Rücker / bernd.ruecker@camunda.com / 18
22. JBoss Process Virtual Machine
JBoss PVM
• 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
Bernd Rücker / bernd.ruecker@camunda.com / 22
23. Konzepte & Kernabstraktionen
Prozesse als Zustandsautomat
Verhalten über
Sprache definiert
Bernd Rücker / bernd.ruecker@camunda.com / 23
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();
Bernd Rücker / bernd.ruecker@camunda.com / 24
25. Prozesssprachen
Die PVM unterstützt verschiedene Sprachen
• 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
Bernd Rücker / bernd.ruecker@camunda.com / 25
26. Was ist BPM?
Begriffsproblem
Organisationslehre
Business Process (Orga-) Geschäftsprozess-
Ablauforganisation
Reengineering - BPR Management - GPM
bis 1990
1990 - 2000 ab 2000
Business
Business Process Management - BPM
IT
ab 2004
Prozessautomatisierung
ab 2006
Human Serviceorientierte
Workflow Management Architekturen (SOA)
ab 2000 ab 2005
Dokumenten-Management – Enterprise Appliation Integration –
Systeme – DMS (u.a.) EAI
Bernd Rücker / bernd.ruecker@camunda.com / 26
27. Aktuelle Ambitionen
Der BPM-Kreislauf
Prozess-
Strategie
Prozess- Prozess- KVP
entwurf controlling
Business
IT Prozess-
implementierung
Bernd Rücker / bernd.ruecker@camunda.com / 27
28. Der Traum der Magic BPM-Suite
Der BPM-Kreislauf
Modelling Monitoring
Business
IT
Magic BPM-Suite
Human Workflow EAI / SOA
Bernd Rücker / bernd.ruecker@camunda.com / 28
29. JBoss jBPM 4
jBPM die Vierte
• Aufbauend auf PVM
• Persistenz über JPA geplant
• Unterstützung BPMN
• siehe http://www.bpm-guide.de/2009/01/26/ein-
erster-blick-auf-jbpm-4/
Bernd Rücker / bernd.ruecker@camunda.com / 38
30. Weitere Änderungen in jBPM 4
jBPM die Vierte
• Allgemeingültige API
– ProcessService
– ExecutionService
– TaskService
– ManagementService
– CommandService
• Grafische Informationen im gleichen XML
• Deployment in AS/ESB wird verbessert
Bernd Rücker / bernd.ruecker@camunda.com / 39
33. Nicht gut: Regeln im Prozess
Prozessmodelle und Geschäftsregeln
Preiskalkulation
Auftragswert < 50 TEUR
Normalpreis 3% Rabatt
50k <= AW < 100k
kalkulieren abziehen
5% Rabatt
100k <= AW < 250k
abziehen
Verhandelten
Rabatt individuell
verhandelt Rabatt
abziehen
Bernd Rücker / bernd.ruecker@camunda.com / 45
34. Regeln sinnvoll abbilden
Prozessmodelle und Geschäftsregeln
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>
Bernd Rücker / bernd.ruecker@camunda.com / 46
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 / bernd.ruecker@camunda.com / 47
36. Wie werden Regeln umgesetzt?
Alternativen
• Direkte Programmierung im Quellcode:
if ( person.istMuede() == true ) {
person.putzeZaehne();
person.geheInsBett();
}
• Spezifische Lösungen (Codegenerierung, DSL,
Speziallösungen, …)
• Regelmaschine / Rule Engine
Bernd Rücker / bernd.ruecker@camunda.com / 48
37. Probleme programmierter Regeln
Wie werden Regeln umgesetzt?
• 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
Bernd Rücker / bernd.ruecker@camunda.com / 49
38. Vorteile der Rule-Engine
Wie werden Regeln umgesetzt?
• Explizite Formulierung der Regeln als Regeln
• Deklarativ: Welche Regeln wann wie ausgeführt
werden entscheidet die Regelmaschine
• Regeln für Fachbereich verständlich
Bedingung:
Person.muede = true
Konsequenz:
person.putzeZaehne();
person.geheInsBett();
Bernd Rücker / bernd.ruecker@camunda.com / 50
39. Rule Engines in Java
Architektur
• Fakten (Wissen) = Domänenobjekte (POJOs)
• Rule Engine wird generisch in die Architektur
integriert (Interceptoren, …)
• Rule Engine wird gezielt angesprochen
Client Anwendung / Server
Interceptor
Fachlogik
Bernd Rücker / bernd.ruecker@camunda.com / 51
40. JBoss Drools
Die Open Source Rule Engine
• 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)
Bernd Rücker / bernd.ruecker@camunda.com / 52
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
Bernd Rücker / bernd.ruecker@camunda.com / 53
42. Drools im Einsatz
API
Regeln
POJO‘s
WorkingMemory
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();
Bernd Rücker / bernd.ruecker@camunda.com / 54
43. Beispiel: Golfer Riddle
Drools
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
Bernd Rücker / bernd.ruecker@camunda.com / 55
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
Bernd Rücker / bernd.ruecker@camunda.com / 56
45. Drools im Einsatz
Wie funktioniert es intern?
• In-memory Knowledge-Repository
• Basiert auf Rete Algorithm
• Forward chaining
• Backward
chaining ist
geplant
(Drools 5?)
Bernd Rücker / bernd.ruecker@camunda.com / 57
46. Für den Fachbereich: Decision Tables
Bernd Rücker / bernd.ruecker@camunda.com / 58
47. DSL-Support
Drools
[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");
rule "Abmeldung - Check mit DSL"
when
Versicherter unter 25 Jahre alt
and
Mehr als 3 Unfälle gebaut
then
Police nicht möglich
end
Bernd Rücker / bernd.ruecker@camunda.com / 59
64. Fazit
Geschäftsprozesse und Regeln mit jBPM und Drools
• 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 ;-)
Bernd Rücker / bernd.ruecker@camunda.com / 76