[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
jBPM & Drools
1. Geschäftsprozesse und Regeln
mit jBPM und Drools
– ein unschlagbares Team
JavaConference
München, 12.09.2008
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
3. Agenda
Geschäftsprozess und Regeln
• Business Process Management (BPM)
• JBoss jBPM
• Business Rules Management (BRM)
• JBoss Drools
• Einsatzgebiete, Abgrenzung und
Kombinationsmöglichkeiten
4. Ein „digitaler“ Prozess
mit Business Process Engine
Δ Durchlaufzeit
Task Service Task
Zuweisung Aufruf Zuweisung
Process Engine
IT
Human Workflow EAI Human Workflow
SOA
5. JBoss jBPM
Open Source Process Execution
• Business Process Engine
• POJO-Kern: Interne Prozessrepräsentation durch
Java-Modelle
• Persistenz über Hibernate (DB-Unabhängigkeit)
• Lauffähig mit oder ohne Application-Server
• „Library“
• Klein und flexibel, leicht erweiterbar
• Aktuell Version 3.2, Version 4 in der Entwicklung
• Open Source (LGPL)
6. „Graph oriented programming“
Der Prozess als gerichteter Graph
Node 1
Token
current
Node
from to
leaving arriving
Transitions * * Transitions
Transition
<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>
7. 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
8. Prozess: Grafik / XML Java DB
deploy
XML jBPM API
Neue
.class
Version
DB
9. 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
10. 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
11. jBPM & Java
jBPM in a nutshell
JbpmConfiguration conf = JbpmConfiguration.getInstance();
JbpmContext context = conf. createJbpmContext();
ProcessInstance pi = context.getGraphSession().
findLatestProcessDefinition(quot;Ticketquot;).createProcessInstance();
pi.getRootToken().signal();
List<TaskInstance> tasks = context.getTaskMgmtSession().
findTaskInstances(quot;Vertriebquot;);
tasks.get(0).end(quot;Ticket schliessenquot;);
context.close();
public class MyAction implements ActionHandler {
public void execute(ExecutionContext ctx) {
Object var = ctx.getVariable(quot;varquot;);
result = service.doSomething(var);
ctx.setVariable(quot;resultquot;, result);
}
}
12. 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
13. 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
14. 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
15. 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();
16. 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
17. 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 (bald Version 5)
• Open Source (ASL)
18. Drools-Regeln
Beispiel
package com.camunda.demo
import demo.business.*;
import demo.infrastructure.ErrorList;
global ErrorList errors;
rule quot;Auftragsrabatt bei hohem Bestellwertquot;
when
o: Order( value>5000 )
then
o.setDiscount(0.05);
end
rule quot;Nachnahme nur bis 2500 € möglichquot;
when
o: Order( value>2500, shippingType=quot;CODquot; )
then
errors.addError(quot;Nachname nicht möglich bei Auftragswert quot; + o.getValue()
);
end
19. Drools im Einsatz
API
Regeln
POJO„s
WorkingMemory
fireAllRules
RuleBaseLoader loader = RuleBaseLoader.getInstance();
RuleBase ruleBase = loader.loadFromReader(
new InputStreamReader(this.getClass().getResourceAsStream(
quot;/demo.drlquot;)));
WorkingMemory wm = ruleBase.newStatefulSession();
wm.insert(meldung);
wm.fireAllRules();
20. 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
21. Regelbeispiel
Example: Golfer Riddle
rule quot;find solution“
when
// There is a golfer named Fred,
// Whose positions is $p1
$fred : Golfer( name == quot;Fredquot; )
// Joe is in position 2
$joe : Golfer( name == quot;Joequot;,
position == 2,
position != $fred.position,
color != $fred.color )
...
then
System.out.println( quot;Fred quot; + $fred.getPosition() + quot; quot; + $fred.getColor() );
System.out.println( quot;Joe quot; + $joe.getPosition() + quot; quot; + $joe.getColor() );
System.out.println( quot;Bob quot; + $bob.getPosition() + quot; quot; + $bob.getColor() );
System.out.println( quot;Tom quot; + $tom.getPosition() + quot; quot; + $tom.getColor() );
end
22. Drools im Einsatz
Wie funktioniert es intern?
• In-memory Knowledge-Repository
• Basiert auf Rete Algorithm
• Forward chaining
• Backward
chaining ist
geplant
(Drools 5)
24. 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(quot;Police kann nicht ausgestellt werdenquot;);
rule quot;Abmeldung - Check mit DSLquot;
when
Versicherter unter 25 Jahre alt
and
Mehr als 3 Unfälle gebaut
then
Police nicht möglich
end
32. Geschäftsprozesse mit Regeln umsetzen?
BPM + BRM
• 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
33. Einsatzmöglichkeiten
BPM + BRM
• 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!
34. Kombinationsmöglichkeiten
Regeln treffen Entscheidungen
Regeln steuern Zuweisung von
Aufgaben
Regeln schließen neues Wissen
Und: Beeinflussung des
Prozessablaufs in
Sonderfällen
35. Schließen von “neuem Wissen”
jBPM + Drools
rule quot;Special Discountquot;
when
o : Order( customerName == quot;Berndquot; )
then
# 5 % discount
o.applyDiscount( 0.95 );
System.out.println(quot;Special discount grantedquot;);
end
<action
class=quot;org.jbpm.action.RulesActionHandlerquot;>
<ruleFile>/...OrderPricingRules.drl</ruleFile>
<objectNames>
<element>order</element>
</objectNames>
</action>
36. Entscheidungen
jBPM + Drools
<node name=quot;drools decisionquot;>
<action class=quot;org.jbpm.action.RulesActionHandler“>
<ruleFile>/com/.../OrderDecisionRules.drl</ruleFile>
<objectNames>
<element>order</element>
</objectNames>
<signalToken>false</signalToken>
</action>
<transition name=quot;conspicuousquot; to=quot;do somethingquot; />
<transition name=quot;casualquot; to=quot;determine discountquot; />
</node>
Besseres Design: rule quot;Conspicuous Orderquot;
when
Regeln schreiben Order( price > 500)
Ergebnis in then
Prozessvariable System.out.println(quot;signal conspicuous orderquot;);
und jBPM executionContext.getNode().
leave(executionContext, quot;conspicuousquot;);
„Decision“ wertet end
diese aus
37. Beeinflussung des Prozessablaufs
Event getrieben reagieren / Ausnahmen
rule quot;Order gets cancelledquot;
when
evt : Event( type == quot;cancelquot; )
then
token.setNode( quot;end2quot; );
end
Token
38. Actor-Assignment
Wer ist zuständig?
<assignment class=quot;org.jbpm.assignment.RulesAssignmentHandlerquot;>
<group>underwriting</group>
<ruleFile>/Assignment.drl</ruleFile>
<objectNames><element>policy</element></objectNames>
</assignment>
rule quot;Determine Junior Role“
when
Policy( basePrice < 500)
then
insert(new Role(quot;juniorquot;));
end
rule quot;Determine Actorquot;
salience -100
when
Role($roleName : roleName)
$a : Assignable()
$group : Group()
Membership( group == $group, role == $roleName,
$user : user )
then
$a.setActorId($user.getName());
end
39. Ausblick: ESB / Content Based Routing
Beispiel: JBoss jBPM jPDL + JBoss ESB
System 1
System 2
Content-Based Router Service
Environment JBoss ESB JBoss jBPM
41. Fazit
Geschäftsprozesse und Regeln mit jBPM und Drools
• jBPM & Drools integrieren sehr gut
• Benutzen Sie das richtige Tool für den Job
• Kombinieren!
• jBPM ist eine kleine, flexible Process Engine.
Bewährt auch in großen Projekten
• Drools ist cool
• Drools steht teuren Rule Engines in nichts nach
• BPM & BRM sind Themen der Zukunft!
• Integration in JBoss SOA Plattform (ESB)