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

Post on 05-Jul-2015

5.104 views 0 download

Transcript of 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

Vorstellung JBoss jBPM und Drools Geschäftsprozesse und Regeln mit

Open Source Java

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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ückerWer bin ich?

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 3

Eckdaten zum UnternehmenEinleitung

camunda GmbHGegründet: November 2002

camunda services GmbHGegründet: März 2008

Mitarbeiter: 6Sitz: 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 KundeLogische

Aufgabenfolge

Fischermanns, Guido:Praxishandbuch Prozessmanagement

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 5

Einfaches ProzessmodellBegriffsdefinition

KundeBestel-

lung Lieferung KundeBestell-

annahme

Rechnung-stellung

Waren- entnahme

Versand

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 6

Ein „digitaler“ Prozessmit Business Process Engine

TaskZuweisung

ServiceAufruf

TaskZuweisung

IT

Δ Durchlaufzeit

Process Engine

Human Workflow Human WorkflowEAISOA

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 7

Process ExecutionBusiness Process Engine

TaskZuweisung

ServiceAufruf

TaskZuweisung

Tasklist ExternesSystem

Transaction / Request

process execution

Zeit

Process Execution Engine

Client

1.) Aufgabe erzeugen2.) Aufgabe abschließen

1.) System aufrufen / Message2.) Asynchrone Antwort als Message

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 8

Business Process Engine (BPM-Engine)Business Process Engine (BPM-Engine)

Definition Laufzeit

Business Process EngineMiddleware für Geschäftsprozesse

PersistenzPersistenz

Prozess-AusführungProzess-Ausführung

Prozess-definitionenProzess-definitionen

AdministrationAdministrationProzess-Logs

Prozess-Logs

Aufgaben-VerwaltungAufgaben-Verwaltung

Sachbearbeiter

Fremd-AnwendungenFremd-

Anwendungen

Business Analyst

Administrator

Entwickler

SimulationSimulation

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 jBPMOpen Source Process Execution

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 10

„Graph oriented programming“Der Prozess als gerichteter Graph

Node

Transition

from to

**leaving

Transitions

arrivingTransitions

Token

currentNode

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>

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 11

• Execute Methode implementiert Verhalten• Konfiguration der Node-Typen per XML

Implementierung Verhalten

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 12

Token-Hierarchie

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 13

• Process Engine ist eigene Architekturschicht• Domänenobjekte oder Referenzen als

Prozessvariablen• Ansteuerung ext.

Services

Business Process Engine in JavaArchitektur

EJB-Container (oder Tomcat oder Java SE)EJB-Container (oder Tomcat oder Java SE)

SessionBeanSessionBean

JCAJCA JMSJMSEJBEJB

WSWS

jBPM (jPDL)HumanTask

Mgmnt

HumanTask

Mgmnt

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 14

Prozess: Grafik / XML Java DB

XMLXML

DBDB

jBPM APIjBPM APIdeploy

.class.classNeue Version

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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-TypenjBPM in a nutshell

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 16

• Einfache Java-API zur Steuerung der Engine– Prozessstart– Aufgabenliste

– …

• Aufrufen von „User-Code“ – definierte Stellen im Prozess

– Interface & Java-Klassen

jBPM & JavajBPM in a nutshell

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 & JavajBPM 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();

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 18

Command-PatternRemote-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; } ...}

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 19

Beispiel: EJB3 + Swing

EJB-ContainerEJB-ContainerBPM-Engine

CommandServiceSLSB

JCA JMS …EJB

WebcontainerWebcontainer

CommandServiceMDB

Web-GUI

Swing-GUI

CommandsCommands

Fremd-systeme

MessageMitCommands

MessageMitCommands

Korrelation

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 20

Process Execution LanguagesWelche Sprache spricht BPM?

BPEL

XPDL

UML

EPC

BPMN

YAML

jPDL

Standards

Proprietär

Wissenschaftlich

Fachliche Notationen

DSL‘s

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 21

Quelle: Dr. Martin Bartonitz

Sprachen heute: Was nehmen?Komplexität, LOC, Mächtigkeit, Standards?

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 MachineJBoss PVM

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 23

Konzepte & KernabstraktionenProzesse als Zustandsautomat

Verhalten über Sprache definiert

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 24

Just an APIPVM 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();

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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

ProzesssprachenDie PVM unterstützt verschiedene Sprachen

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 26

Was ist BPM?

HumanWorkflow Management

ServiceorientierteArchitekturen (SOA)

Dokumenten-Management –Systeme – DMS (u.a.)

Enterprise Appliation Integration –EAI

ab 2004

ab 2000 ab 2005

AblauforganisationBusiness 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 27

Aktuelle AmbitionenDer BPM-Kreislauf

Prozess-implementierung

Prozess-entwurf

Prozess-controlling

KVP

Prozess-Strategie

Business

IT

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 28

Der Traum der Magic BPM-SuiteDer BPM-Kreislauf

Modelling Monitoring

EAI / SOAHuman Workflow

Business

ITMagic BPM-Suite

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 29

• 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/

JBoss jBPM 4jBPM die Vierte

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 30

• Allgemeingültige API– ProcessService– ExecutionService

– TaskService

– ManagementService– CommandService

• Grafische Informationen im gleichen XML

• Deployment in AS/ESB wird verbessert

Weitere Änderungen in jBPM 4jBPM die Vierte

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 31

Beispielprozess im neuen DesignerjBPM die Vierte

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 32

Und das Beispiel als QuellcodeBPM 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>

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 33

Nicht gut: Regeln im ProzessProzessmodelle und Geschäftsregeln

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 RegelnWie werden Regeln umgesetzt?

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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-EngineWie werden Regeln umgesetzt?

Bedingung: Person.muede = true Konsequenz: person.putzeZaehne(); person.geheInsBett();

Bedingung: Person.muede = true Konsequenz: person.putzeZaehne(); person.geheInsBett();

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 39

• Fakten (Wissen) = Domänenobjekte (POJOs)• Rule Engine wird generisch in die Architektur

integriert (Interceptoren, …)• Rule Engine wird gezielt angesprochen

Rule Engines in JavaArchitektur

ClientClient Anwendung / ServerAnwendung / Server

InterceptorInterceptor

FachlogikFachlogik

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 DroolsDie Open Source Rule Engine

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 41

Drools-RegelnBeispiel

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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 42

Drools im EinsatzAPI

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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 RiddleDrools

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 44

RegelbeispielExample: 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 45

• In-memory Knowledge-Repository• Basiert auf Rete Algorithm• Forward chaining• Backward

chaining istgeplant (Drools 5?)

Drools im EinsatzWie funktioniert es intern?

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 46

Für den Fachbereich: Decision Tables

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 47

DSL-SupportDrools

rule "Abmeldung - Check mit DSL"when Versicherter unter 25 Jahre alt and Mehr als 3 Unfälle gebautthen Police nicht möglichend

rule "Abmeldung - Check mit DSL"when Versicherter unter 25 Jahre alt and Mehr als 3 Unfälle gebautthen Police nicht möglichend

[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");

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 48

DSL-SupportDrools

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 49

Regeleditor ohne DSLDrools

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 50

Guided Rule Editor

Verfügbar in Eclipse & BRMS

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 51

• Welche Regeln sollen in welcher Reihenfolge• Parallel oder• unter welchen Bedingungen ausgeführt werden

RuleFlowGrahpical representation

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 52

Tooling: EclipseDrools

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 53

Business Rules Management SystemDrools BRMS

ServerServer

DroolsDrools

Web-GUIWeb-GUI

Rule-Repository (JCR)

Rule-Repository (JCR)

AnwendungAnwendung

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 54

BPM + !BRM = ? !BPM + BRM = ? BPM + BRM = ?

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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öglichkeitenBPM + BRM

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 57

Kombinationsmöglichkeiten

Regeln treffen EntscheidungenRegeln treffen Entscheidungen

Regeln steuern Zuweisung von AufgabenRegeln 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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>

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 59

EntscheidungenjBPM + 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 60

Beeinflussung des ProzessablaufsEvent 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

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 61

Actor-AssignmentWer 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 -100when 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 -100when Role($roleName : roleName) $a : Assignable() $group : Group() Membership( group == $group, role == $roleName, $user : user )then $a.setActorId($user.getName());end

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 62

Ausblick: ESB / Content Based RoutingBeispiel: JBoss jBPM jPDL + JBoss ESB

Environment JBoss jBPMJBoss ESB

Content-Based Router ServiceContent-Based Router Service

System 1System 1

System 2System 2

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 63

ESB & Content Based RoutingVergleiche Event Driven Architecture (EDA)

Quelle: JBoss

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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 ;-)

FazitGeschäftsprozesse und Regeln mit jBPM und Drools

Ber n d R ü c k er / b er n d .r u ec k er @c am u n d a.c om / 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ückerGeschäftsführerBerater, Trainer & Coachbernd.ruecker@camunda.com+49 711 3278645+49 171 1473461

Aktuelle Jobs:

http://www.camunda.com/jobs/

Aktuelle Jobs:

http://www.camunda.com/jobs/