Java User Group Berlin Brandenburg
Berlin, 04.02.2009
bernd.ruecker@camunda.com
Vorstellung JBoss jBPM und Drools
Geschäft...
Bernd Rücker / ber nd.r uecker @cam unda.com / 2
• Berater, Trainer, Coach
• Softwareentwickler
• Committer im JBoss jBPM-...
Bernd Rücker / ber nd.r uecker @cam unda.com / 3
Eckdaten zum Unternehmen
Einleitung
camunda GmbH
Gegründet: November 2002...
Bernd Rücker / ber nd.r uecker @cam unda.com / 4
„Ein Prozess ist eine Struktur, deren Elemente Aufgaben,
Aufgabenträger, ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 5
Einfaches Prozessmodell
Begriffsdefinition
Kunde
Bestel-
lung Lieferung K...
Bernd Rücker / ber nd.r uecker @cam unda.com / 6
Ein „digitaler“ Prozess
mit Business Process Engine
Task
Zuweisung
Servic...
Bernd Rücker / ber nd.r uecker @cam unda.com / 7
Process Execution
Business Process Engine
Task
Zuweisung
Service
Aufruf
T...
Bernd Rücker / ber nd.r uecker @cam unda.com / 8
Business Process Engine (BPM-Engine)Business Process Engine (BPM-Engine)
...
Bernd Rücker / ber nd.r uecker @cam unda.com / 9
• Business Process Engine
• „Library“
• POJO-Kern: Interne Prozessrepräse...
Bernd Rücker / ber nd.r uecker @cam unda.com / 10
„Graph oriented programming“
Der Prozess als gerichteter Graph
Node
Tran...
Bernd Rücker / ber nd.r uecker @cam unda.com / 11
• Execute Methode implementiert Verhalten
• Konfiguration der Node-Typen...
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 Ref...
Bernd Rücker / ber nd.r uecker @cam unda.com / 14
Prozess: Grafik / XML  Java  DB
XMLXML
DBDB
jBPM APIjBPM API
deploy
.c...
Bernd Rücker / ber nd.r uecker @cam unda.com / 15
• Task-Node: Human Tasks / Aufgaben
• State: Wait-States
• Fork / Join: ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 16
• Einfache Java-API zur Steuerung der Engine
– Prozessstart
– Aufgabenli...
Bernd Rücker / ber nd.r uecker @cam unda.com / 17
public class MyAction implements ActionHandler {
public void execute(Exe...
Bernd Rücker / ber nd.r uecker @cam unda.com / 18
Command-Pattern
Remote-Zugriffe und Asynchronität
public class TaskInsta...
Bernd Rücker / ber nd.r uecker @cam unda.com / 19
Beispiel: EJB3 + Swing
EJB-ContainerEJB-Container
BPM-Engine
Command
Ser...
Bernd Rücker / ber nd.r uecker @cam unda.com / 20
Process Execution Languages
Welche Sprache spricht BPM?
BPEL
XPDL
UML
EP...
Bernd Rücker / ber nd.r uecker @cam unda.com / 21
Quelle: Dr. Martin Bartonitz
Sprachen heute: Was nehmen?
Komplexität, LO...
Bernd Rücker / ber nd.r uecker @cam unda.com / 22
• Es existieren verschiedenste Prozessausführungs-
sprachen (Process Exe...
Bernd Rücker / ber nd.r uecker @cam unda.com / 23
Konzepte & Kernabstraktionen
Prozesse als Zustandsautomat
Verhalten über...
Bernd Rücker / ber nd.r uecker @cam unda.com / 24
Just an API
PVM definiert keine Sprache
ProcessDefinition processDefinit...
Bernd Rücker / ber nd.r uecker @cam unda.com / 25
• Graphen / Blockstruktur
• Sprache kann durch
entsprechendes Node-Verha...
Bernd Rücker / ber nd.r uecker @cam unda.com / 26
Was ist BPM?
Human
Workflow Management
Serviceorientierte
Architekturen ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 27
Aktuelle Ambitionen
Der BPM-Kreislauf
Prozess-
implementierung
Prozess-
...
Bernd Rücker / ber nd.r uecker @cam unda.com / 28
Der Traum der Magic BPM-Suite
Der BPM-Kreislauf
Modelling Monitoring
EAI...
Bernd Rücker / ber nd.r uecker @cam unda.com / 29
• Aufbauend auf PVM
• Persistenz über JPA geplant
• Unterstützung BPMN
•...
Bernd Rücker / ber nd.r uecker @cam unda.com / 30
• Allgemeingültige API
– ProcessService
– ExecutionService
– TaskService...
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://jbp...
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 <...
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 ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 36
• Direkte Programmierung im Quellcode:
if ( person.istMuede() == true ) ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 37
• Wartbarkeit und Validierbarkeit nicht gegeben
• Regeln müssen durch En...
Bernd Rücker / ber nd.r uecker @cam unda.com / 38
• Explizite Formulierung der Regeln als Regeln
• Deklarativ: Welche Rege...
Bernd Rücker / ber nd.r uecker @cam unda.com / 39
• Fakten (Wissen) = Domänenobjekte (POJOs)
• Rule Engine wird generisch ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 40
• Java Rule Engine (RETE-Implementierung)
• „JBoss Drools“ / „JBoss Rule...
Bernd Rücker / ber nd.r uecker @cam unda.com / 41
Drools-Regeln
Beispiel
package com.camunda.demo
import demo.business.*;
...
Bernd Rücker / ber nd.r uecker @cam unda.com / 42
Drools im Einsatz
API
RuleBaseLoader loader = RuleBaseLoader.getInstance...
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
•...
Bernd Rücker / ber nd.r uecker @cam unda.com / 44
Regelbeispiel
Example: Golfer Riddle
rule "find solution“
when
// There ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 45
• In-memory Knowledge-Repository
• Basiert auf Rete Algorithm
• Forward ...
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 un...
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 we...
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
W...
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 Visualis...
Bernd Rücker / ber nd.r uecker @cam unda.com / 56
• BPM (Prozesse)
– Geschäftsprozesse / Workflows
– Fachliche Modellierun...
Bernd Rücker / ber nd.r uecker @cam unda.com / 57
Kombinationsmöglichkeiten
Regeln treffen EntscheidungenRegeln treffen En...
Bernd Rücker / ber nd.r uecker @cam unda.com / 58
Schließen von “neuem Wissen”
jBPM + Drools
rule "Special Discount"
when
...
Bernd Rücker / ber nd.r uecker @cam unda.com / 59
Entscheidungen
jBPM + Drools
<node name="drools decision">
<action class...
Bernd Rücker / ber nd.r uecker @cam unda.com / 60
Beeinflussung des Prozessablaufs
Event getrieben reagieren / Ausnahmen
r...
Bernd Rücker / ber nd.r uecker @cam unda.com / 61
Actor-Assignment
Wer ist zuständig?
<assignment class="org.jbpm.assignme...
Bernd Rücker / ber nd.r uecker @cam unda.com / 62
Ausblick: ESB / Content Based Routing
Beispiel: JBoss jBPM jPDL + JBoss ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 63
ESB & Content Based Routing
Vergleiche Event Driven Architecture (EDA)
Q...
Bernd Rücker / ber nd.r uecker @cam unda.com / 64
• jBPM ist eine kleine, flexible Process Engine.
Bewährt auch in großen ...
Bernd Rücker / ber nd.r uecker @cam unda.com / 65
Fragen & Antworten
Unsere Themen
• Ganzheitliches BPM
• Prozessautomatis...
Nächste SlideShare
Wird geladen in …5
×

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

5.959 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
7 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
5.959
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
488
Aktionen
Geteilt
0
Downloads
132
Kommentare
0
Gefällt mir
7
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 12. Bernd Rücker / ber nd.r uecker @cam unda.com / 12 Token-Hierarchie
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 23. Bernd Rücker / ber nd.r uecker @cam unda.com / 23 Konzepte & Kernabstraktionen Prozesse als Zustandsautomat Verhalten über Sprache definiert
  24. 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. 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. 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. 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. 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. 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. 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. 31. Bernd Rücker / ber nd.r uecker @cam unda.com / 31 Beispielprozess im neuen Designer jBPM die Vierte
  32. 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. 33. Bernd Rücker / ber nd.r uecker @cam unda.com / 33 Nicht gut: Regeln im Prozess Prozessmodelle und Geschäftsregeln
  34. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 46. Bernd Rücker / ber nd.r uecker @cam unda.com / 46 Für den Fachbereich: Decision Tables
  47. 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. 48. Bernd Rücker / ber nd.r uecker @cam unda.com / 48 DSL-Support Drools
  49. 49. Bernd Rücker / ber nd.r uecker @cam unda.com / 49 Regeleditor ohne DSL Drools
  50. 50. Bernd Rücker / ber nd.r uecker @cam unda.com / 50 Guided Rule Editor Verfügbar in Eclipse & BRMS
  51. 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. 52. Bernd Rücker / ber nd.r uecker @cam unda.com / 52 Tooling: Eclipse Drools
  53. 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. 54. Bernd Rücker / ber nd.r uecker @cam unda.com / 54 BPM + !BRM = ? !BPM + BRM = ? BPM + BRM = ?
  55. 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. 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. 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. 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. 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. 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. 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. 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. 63. Bernd Rücker / ber nd.r uecker @cam unda.com / 63 ESB & Content Based Routing Vergleiche Event Driven Architecture (EDA) Quelle: JBoss
  64. 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. 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/

×