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

65
Java User Group Berlin Brandenburg Berlin, 04.02.2009 [email protected] Vorstellung JBoss jBPM und Drools Geschäftsprozesse und Regeln mit Open Source Java

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

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

Java User Group Berlin Brandenburg

Berlin, 04.02.2009

[email protected]

Vorstellung JBoss jBPM und Drools Geschäftsprozesse und Regeln mit

Open Source Java

Page 2: 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?

Page 3: 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 / 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

Page 4: 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 / 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

Page 5: 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 / 5

Einfaches ProzessmodellBegriffsdefinition

KundeBestel-

lung Lieferung KundeBestell-

annahme

Rechnung-stellung

Waren- entnahme

Versand

Page 6: 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 / 6

Ein „digitaler“ Prozessmit Business Process Engine

TaskZuweisung

ServiceAufruf

TaskZuweisung

IT

Δ Durchlaufzeit

Process Engine

Human Workflow Human WorkflowEAISOA

Page 7: 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 / 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

Page 8: 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 / 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

Page 9: 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 / 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

Page 10: 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 / 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>

Page 11: 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 / 11

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

Implementierung Verhalten

Page 12: 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 / 12

Token-Hierarchie

Page 13: 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 / 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

Page 14: 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 / 14

Prozess: Grafik / XML Java DB

XMLXML

DBDB

jBPM APIjBPM APIdeploy

.class.classNeue Version

Page 15: 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 / 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

Page 16: 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 / 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

Page 17: 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 / 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();

Page 18: 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 / 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; } ...}

Page 19: 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 / 19

Beispiel: EJB3 + Swing

EJB-ContainerEJB-ContainerBPM-Engine

CommandServiceSLSB

JCA JMS …EJB

WebcontainerWebcontainer

CommandServiceMDB

Web-GUI

Swing-GUI

CommandsCommands

Fremd-systeme

MessageMitCommands

MessageMitCommands

Korrelation

Page 20: 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 / 20

Process Execution LanguagesWelche Sprache spricht BPM?

BPEL

XPDL

UML

EPC

BPMN

YAML

jPDL

Standards

Proprietär

Wissenschaftlich

Fachliche Notationen

DSL‘s

Page 21: 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 / 21

Quelle: Dr. Martin Bartonitz

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

Page 22: 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 / 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

Page 23: 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 / 23

Konzepte & KernabstraktionenProzesse als Zustandsautomat

Verhalten über Sprache definiert

Page 24: 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 / 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();

Page 25: 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 / 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

Page 26: 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 / 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

Page 27: 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 / 27

Aktuelle AmbitionenDer BPM-Kreislauf

Prozess-implementierung

Prozess-entwurf

Prozess-controlling

KVP

Prozess-Strategie

Business

IT

Page 28: 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 / 28

Der Traum der Magic BPM-SuiteDer BPM-Kreislauf

Modelling Monitoring

EAI / SOAHuman Workflow

Business

ITMagic BPM-Suite

Page 29: 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 / 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

Page 30: 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 / 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

Page 31: 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 / 31

Beispielprozess im neuen DesignerjBPM die Vierte

Page 32: 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 / 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>

Page 33: 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 / 33

Nicht gut: Regeln im ProzessProzessmodelle und Geschäftsregeln

Page 34: 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 / 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

Page 35: 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 / 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

Page 36: 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 / 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

Page 37: 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 / 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?

Page 38: 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 / 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();

Page 39: 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 / 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

Page 40: 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 / 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

Page 41: 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 / 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

Page 42: 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 / 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

Page 43: 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 / 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

Page 44: 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 / 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

Page 45: 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 / 45

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

chaining istgeplant (Drools 5?)

Drools im EinsatzWie funktioniert es intern?

Page 46: 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 / 46

Für den Fachbereich: Decision Tables

Page 47: 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 / 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");

Page 48: 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 / 48

DSL-SupportDrools

Page 49: 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 / 49

Regeleditor ohne DSLDrools

Page 50: 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 / 50

Guided Rule Editor

Verfügbar in Eclipse & BRMS

Page 51: 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 / 51

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

RuleFlowGrahpical representation

Page 52: 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 / 52

Tooling: EclipseDrools

Page 53: 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 / 53

Business Rules Management SystemDrools BRMS

ServerServer

DroolsDrools

Web-GUIWeb-GUI

Rule-Repository (JCR)

Rule-Repository (JCR)

AnwendungAnwendung

Page 54: 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 / 54

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

Page 55: 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 / 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

Page 56: 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 / 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

Page 57: 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 / 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

Page 58: 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 / 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>

Page 59: 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 / 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

Page 60: 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 / 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

Page 61: 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 / 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

Page 62: 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 / 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

Page 63: 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 / 63

ESB & Content Based RoutingVergleiche Event Driven Architecture (EDA)

Quelle: JBoss

Page 64: 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 / 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

Page 65: 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 / 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 & [email protected]+49 711 3278645+49 171 1473461

Aktuelle Jobs:

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

Aktuelle Jobs:

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