Vorstellung JBoss jBPM und Drools
 Geschäftsprozesse und Regeln mit
                Open Source Java
     Java User Group ...
Bernd Rücker
  Wer bin ich?

      •     Berater, Trainer, Coach
      •     Softwareentwickler
      •     Committer im J...
Eckdaten zum Unternehmen
  Einleitung

  camunda GmbH                                       Unsere Themen
  Gegründet:  No...
Was ist ein Prozess?
  Begriffsdefinition

      „Ein Prozess ist eine Struktur, deren Elemente Aufgaben,
      Aufgabentr...
Einfaches Prozessmodell
  Begriffsdefinition




                                                  Rechnung-
             ...
Ein „digitaler“ Prozess
  mit Business Process Engine



                                               ∆ Durchlaufzeit


...
Process Execution
  Business Process Engine

                               1.) Aufgabe erzeugen         1.) System aufruf...
Business Process Engine
  Middleware für Geschäftsprozesse




                              Business Analyst            S...
JBoss jBPM
  Open Source Process Execution

      • Business Process Engine
      • „Library“
      • POJO-Kern: Interne P...
„Graph oriented programming“
  Der Prozess als gerichteter Graph

                                                        ...
Implementierung Verhalten




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




Bernd Rücker / bernd.ruecker@camunda.com / 12
Business Process Engine in Java
  Architektur

      • Process Engine ist eigene Architekturschicht
      • Domänenobjekte...
Prozess: Grafik / XML                         Java       DB




                                                          ...
Verschiedene Node-Typen
  jBPM in a nutshell

      •     Task-Node: Human Tasks / Aufgaben
      •     State: Wait-States...
jBPM & Java
  jBPM in a nutshell

      • Einfache Java-API zur Steuerung der Engine
              – Prozessstart
        ...
jBPM & Java
  jBPM in a nutshell

      JbpmConfiguration conf = JbpmConfiguration.getInstance();
      JbpmContext contex...
Command-Pattern
  Remote-Zugriffe und Asynchronität




                                                public class TaskI...
Beispiel: EJB3 + Swing




  Swing-GUI                                      EJB-Container
                                ...
Process Execution Languages
  Welche Sprache spricht BPM?




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

                                                 ...
JBoss Process Virtual Machine
  JBoss PVM

      • Es existieren verschiedenste Prozessausführungs-
        sprachen (Proc...
Konzepte & Kernabstraktionen
  Prozesse als Zustandsautomat




                                                Verhalten ...
Just an API
  PVM definiert keine Sprache




  ProcessDefinition processDefinition = ProcessFactory.build()
      .node("...
Prozesssprachen
  Die PVM unterstützt verschiedene Sprachen

      • Graphen / Blockstruktur
      • Sprache kann durch
  ...
Was ist BPM?
  Begriffsproblem


         Organisationslehre



                                                 Business ...
Aktuelle Ambitionen
  Der BPM-Kreislauf




                                                   Prozess-
                  ...
Der Traum der Magic BPM-Suite
  Der BPM-Kreislauf




                                       Modelling      Monitoring



...
JBoss jBPM 4
  jBPM die Vierte

      •     Aufbauend auf PVM
      •     Persistenz über JPA geplant
      •     Unterstü...
Weitere Änderungen in jBPM 4
  jBPM die Vierte

      • Allgemeingültige API
              –   ProcessService
            ...
Beispielprozess im neuen Designer
  jBPM die Vierte




Bernd Rücker / bernd.ruecker@camunda.com / 40
Und das Beispiel als Quellcode
  BPM die Vierte


            <process xmlns="http://jbpm.org/4/jpdl" name="TicketProcess"...
Nicht gut: Regeln im Prozess
  Prozessmodelle und Geschäftsregeln


      Preiskalkulation

                              ...
Regeln sinnvoll abbilden
  Prozessmodelle und Geschäftsregeln




    Auftragswert                                Rabatt v...
Was sind Regeln?

      • „Wenn ich müde bin, dann gehe ich ins Bett!“

      • „WENN .. DANN ..“-Struktur
      • Bedingu...
Wie werden Regeln umgesetzt?
  Alternativen

      • Direkte Programmierung im Quellcode:

              if ( person.istMu...
Probleme programmierter Regeln
  Wie werden Regeln umgesetzt?

      • Wartbarkeit und Validierbarkeit nicht gegeben
     ...
Vorteile der Rule-Engine
  Wie werden Regeln umgesetzt?

      • Explizite Formulierung der Regeln als Regeln
      • Dekl...
Rule Engines in Java
  Architektur

      • Fakten (Wissen) = Domänenobjekte (POJOs)
      • Rule Engine wird generisch in...
JBoss Drools
  Die Open Source Rule Engine

      •     Java Rule Engine (RETE-Implementierung)
      •     „JBoss Drools“...
Drools-Regeln
  Beispiel


    package com.camunda.demo

    import demo.business.*;
    import demo.infrastructure.ErrorL...
Drools im Einsatz
  API

                                                                  Regeln




                    ...
Beispiel: Golfer Riddle
  Drools

      There are four Golfers standing at a tee, in a line from
      left to right
     ...
Regelbeispiel
  Example: Golfer Riddle
   rule "find solution“

          when
              // There is a golfer named Fr...
Drools im Einsatz
  Wie funktioniert es intern?

      •     In-memory Knowledge-Repository
      •     Basiert auf Rete A...
Für den Fachbereich: Decision Tables




Bernd Rücker / bernd.ruecker@camunda.com / 58
DSL-Support
  Drools



      [when]Versicherter unter {MindestAlter} Jahre alt=
          Person( age < {MindestAlter} )
...
DSL-Support
  Drools




Bernd Rücker / bernd.ruecker@camunda.com / 60
Regeleditor ohne DSL
  Drools




Bernd Rücker / bernd.ruecker@camunda.com / 61
Guided Rule Editor




       Verfügbar in
       Eclipse &
       BRMS




Bernd Rücker / bernd.ruecker@camunda.com / 62
RuleFlow
  Grahpical representation

      • Welche Regeln sollen in welcher Reihenfolge
      • Parallel oder
      • unt...
Tooling: Eclipse
  Drools




Bernd Rücker / bernd.ruecker@camunda.com / 64
Business Rules Management System
  Drools BRMS




    Web-GUI
                         Anwendung
    Drools

     Rule-Re...
BPM + !BRM = ?
                                                !BPM + BRM = ?
                                            ...
Geschäftsprozesse mit Regeln umsetzen?
  BPM + BRM

      • Möglich!
      • Vorteil: Maximale Flexibilität
      • Nachte...
Einsatzmöglichkeiten
  BPM + BRM

      • BPM (Prozesse)
              – Geschäftsprozesse / Workflows
              – Fac...
Kombinationsmöglichkeiten




                                                Regeln treffen Entscheidungen


            ...
Schließen von “neuem Wissen”
  jBPM + Drools

                                                rule "Special Discount"
    ...
Entscheidungen
  jBPM + Drools

     <node name="drools decision">
       <action class="org.jbpm.action.RulesActionHandle...
Beeinflussung des Prozessablaufs
  Event getrieben reagieren / Ausnahmen


                                               ...
Actor-Assignment
  Wer ist zuständig?


     <assignment class="org.jbpm.assignment.RulesAssignmentHandler">
       <group...
Ausblick: ESB / Content Based Routing
  Beispiel: JBoss jBPM jPDL + JBoss ESB




                        System 1




   ...
ESB & Content Based Routing
  Vergleiche Event Driven Architecture (EDA)




                                             ...
Fazit
  Geschäftsprozesse und Regeln mit jBPM und Drools

      • jBPM ist eine kleine, flexible Process Engine.
        B...
Fragen & Antworten

                                                          Bernd Rücker
                               ...
Nächste SlideShare
Wird geladen in …5
×

20090204 JUG BB Jbpm und Drools

1.588 Aufrufe

Veröffentlicht am

0 Kommentare
2 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.588
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
2
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

20090204 JUG BB Jbpm und Drools

  1. 1. Vorstellung JBoss jBPM und Drools Geschäftsprozesse und Regeln mit Open Source Java Java User Group Berlin Brandenburg Berlin, 04.02.2009 bernd.ruecker@camunda.com
  2. 2. Bernd Rücker Wer bin ich? • Berater, Trainer, Coach • Softwareentwickler • Committer im JBoss jBPM-Projekt • Themen: – BPM & SOA – Process Execution (jPDL, BPEL, XPDL, …) – JBoss SOA Platform (jBPM, ESB, Drools, …) – Enterprise Anwendungen mit Java EE • Siehe www.camunda.com • Blog www.bpm-guide.de Bernd Rücker / bernd.ruecker@camunda.com / 2
  3. 3. Eckdaten zum Unternehmen Einleitung camunda GmbH Unsere Themen Gegründet: November 2002 • Ganzheitliches BPM • Prozessautomatisierung camunda services GmbH Gegründet: März 2008 • SOA, BPEL, XPDL, • JBoss SOA Platform (jBPM, Mitarbeiter: 6 Drools, ESB) Sitz: Berlin / Stuttgart • BPMN • BPM-Toolauswahl Unsere Leistungen • Beratung • Seminare • Process Hosting Bernd Rücker / bernd.ruecker@camunda.com / 3
  4. 4. Was ist ein Prozess? Begriffsdefinition „Ein Prozess ist eine Struktur, deren Elemente Aufgaben, Aufgabenträger, Sachmittel und Informationen sind, die durch logische Folgebeziehungen verknüpft sind. Darüber hinaus werden deren zeitliche, räumliche und mengenmäßige Dimensionen konkretisiert. Ein Prozess hat ein definiertes Startereignis (Input) und ein Ergebnis (Output) und dient dazu, einen Wert für Kunden zu schaffen.“ Synonyme: Geschäftsprozess, Business Process Logische Kunde Input Output Kunde Aufgabenfolge Fischermanns, Guido: Praxishandbuch Prozessmanagement Bernd Rücker / bernd.ruecker@camunda.com / 4
  5. 5. Einfaches Prozessmodell Begriffsdefinition Rechnung- stellung Bestel- Bestell- Kunde annahme Versand Lieferung Kunde lung Waren- entnahme Bernd Rücker / bernd.ruecker@camunda.com / 5
  6. 6. Ein „digitaler“ Prozess mit Business Process Engine ∆ Durchlaufzeit Task Service Task Zuweisung Aufruf Zuweisung Process Engine IT Human Workflow EAI Human Workflow SOA Bernd Rücker / bernd.ruecker@camunda.com / 6
  7. 7. Process Execution Business Process Engine 1.) Aufgabe erzeugen 1.) System aufrufen / Message 2.) Aufgabe abschließen 2.) Asynchrone Antwort als Message Client Tasklist Externes System Process Execution Engine Transaction / Request … Zeit process execution Task Service Task Zuweisung Aufruf Zuweisung Bernd Rücker / bernd.ruecker@camunda.com / 7
  8. 8. Business Process Engine Middleware für Geschäftsprozesse Business Analyst Sachbearbeiter Aufgaben- Verwaltung Simulation Prozess- Prozess- Fremd- definitionen Ausführung Anwendungen Entwickler Prozess- Administration Logs Administrator Persistenz Definition Laufzeit Business Process Engine (BPM-Engine) Bernd Rücker / bernd.ruecker@camunda.com / 8
  9. 9. JBoss jBPM Open Source Process Execution • Business Process Engine • „Library“ • POJO-Kern: Interne Prozessrepräsentation durch Java-Modelle • Persistenz über Hibernate (DB-Unabhängigkeit) • Lauffähig mit oder ohne Application-Server • Klein und flexibel, leicht erweiterbar • Aktuell Version 3.2, Version 4 in der Entwicklung • Open Source (LGPL) Bernd Rücker / bernd.ruecker@camunda.com / 9
  10. 10. „Graph oriented programming“ Der Prozess als gerichteter Graph Node 1 Token current Node from to leaving arriving Transitions * * Transitions Transition <process-definition> ... <node name=“serve client”> <transition name=“ok” to=“order” /> <transition name=“nok” to=“joke” /> </node> <node name=“order” /> <node name=“joke” /> ... </process-definition> Bernd Rücker / bernd.ruecker@camunda.com / 10
  11. 11. Implementierung Verhalten • Execute Methode implementiert Verhalten • Konfiguration der Node-Typen per XML Bernd Rücker / bernd.ruecker@camunda.com / 11
  12. 12. Token-Hierarchie Bernd Rücker / bernd.ruecker@camunda.com / 12
  13. 13. Business Process Engine in Java Architektur • Process Engine ist eigene Architekturschicht • Domänenobjekte oder Referenzen als Prozessvariablen • Ansteuerung ext. Services EJB-Container (oder Tomcat oder Java SE) jBPM (jPDL) Human Session Task Bean Mgmnt EJB JCA JMS WS Bernd Rücker / bernd.ruecker@camunda.com / 13
  14. 14. Prozess: Grafik / XML Java DB deploy XML jBPM API Neue .class Version DB Bernd Rücker / bernd.ruecker@camunda.com / 14
  15. 15. Verschiedene Node-Typen jBPM in a nutshell • Task-Node: Human Tasks / Aufgaben • State: Wait-States • Fork / Join: Parallelisierung • Decision: Automatische Entscheidung • Start-State / End-State • Super-State • Process-State • … • Eigene Node-Typen mit Verhalten können implementiert werden Bernd Rücker / bernd.ruecker@camunda.com / 15
  16. 16. jBPM & Java jBPM in a nutshell • Einfache Java-API zur Steuerung der Engine – Prozessstart – Aufgabenliste –… • Aufrufen von „User-Code“ – definierte Stellen im Prozess – Interface & Java-Klassen Bernd Rücker / bernd.ruecker@camunda.com / 16
  17. 17. jBPM & Java jBPM in a nutshell JbpmConfiguration conf = JbpmConfiguration.getInstance(); JbpmContext context = conf. createJbpmContext(); ProcessInstance pi = context.getGraphSession(). findLatestProcessDefinition("Ticket").createProcessInstance(); pi.getRootToken().signal(); List<TaskInstance> tasks = context.getTaskMgmtSession(). findTaskInstances("Vertrieb"); tasks.get(0).end("Ticket schliessen"); context.close(); public class MyAction implements ActionHandler { public void execute(ExecutionContext ctx) { Object var = ctx.getVariable("var"); result = service.doSomething(var); ctx.setVariable("result", result); } } Bernd Rücker / bernd.ruecker@camunda.com / 17
  18. 18. Command-Pattern Remote-Zugriffe und Asynchronität public class TaskInstanceEndCommand implements Command { ... public Object execute(JbpmContext jbpmContext) { TaskInstance taskInstance = getTaskInstance(jbpmContext); if (transitionName == null) { taskInstance.end(); } else { taskInstance.end(transitionName); } return taskInstance; } ... } Bernd Rücker / bernd.ruecker@camunda.com / 18
  19. 19. Beispiel: EJB3 + Swing Swing-GUI EJB-Container BPM-Engine Commands Command Command Service Service SLSB MDB Webcontainer Message Mit Web-GUI Commands EJB JCA JMS … Korrelation Fremd- systeme Bernd Rücker / bernd.ruecker@camunda.com / 19
  20. 20. Process Execution Languages Welche Sprache spricht BPM? Standards BPEL YAML UML Wissenschaftlich XPDL Fachliche Notationen jPDL Proprietär EPC DSL‘s BPMN … Bernd Rücker / bernd.ruecker@camunda.com / 20
  21. 21. Sprachen heute: Was nehmen? Komplexität, LOC, Mächtigkeit, Standards? Generierte Artefakte (WSDL & Schema) Deployment-Deskriptor 1000 XSLT 900 WSDL Java-Code (Hooks/Actions) 800 Prozessbeschreibung 700 600 500 400 300 200 100 0 Quelle: Dr. Martin Bartonitz BPEL XPDL jBPM Bernd Rücker / bernd.ruecker@camunda.com / 21
  22. 22. JBoss Process Virtual Machine JBoss PVM • Es existieren verschiedenste Prozessausführungs- sprachen (Process Execution Language) – BPEL, XPDL, jPDL, DSL‘s, … • Es gibt nicht die perfekte Sprache • Koexistenz von verschiedenen Sprachen erlauben • Sprache nach Problem auswählen Grundfunktionalität Prozessmaschine in PVM Bernd Rücker / bernd.ruecker@camunda.com / 22
  23. 23. Konzepte & Kernabstraktionen Prozesse als Zustandsautomat Verhalten über Sprache definiert Bernd Rücker / bernd.ruecker@camunda.com / 23
  24. 24. Just an API PVM definiert keine Sprache ProcessDefinition processDefinition = ProcessFactory.build() .node("accept loan request").initial().behaviour(new WaitState()) .transition().to("loan evaluation") .node("loan evaluation").behaviour(new WaitState()) .transition("approve").to("wire the money") .transition("reject").to("end") .node("wire the money").behaviour(new Display("automatic payment")) .transition().to("end") .node("end").behaviour(new WaitState()) .done(); Bernd Rücker / bernd.ruecker@camunda.com / 24
  25. 25. Prozesssprachen Die PVM unterstützt verschiedene Sprachen • Graphen / Blockstruktur • Sprache kann durch entsprechendes Node-Verhalten implementiert werden • Es wird geben – XPDL: Nova Bonita – jPDL: JBoss jBPM JPDL 4 – BPEL: Orchestra • Sprachen sind in XML umgesetzt Bernd Rücker / bernd.ruecker@camunda.com / 25
  26. 26. Was ist BPM? Begriffsproblem Organisationslehre Business Process (Orga-) Geschäftsprozess- Ablauforganisation Reengineering - BPR Management - GPM bis 1990 1990 - 2000 ab 2000 Business Business Process Management - BPM IT ab 2004 Prozessautomatisierung ab 2006 Human Serviceorientierte Workflow Management Architekturen (SOA) ab 2000 ab 2005 Dokumenten-Management – Enterprise Appliation Integration – Systeme – DMS (u.a.) EAI Bernd Rücker / bernd.ruecker@camunda.com / 26
  27. 27. Aktuelle Ambitionen Der BPM-Kreislauf Prozess- Strategie Prozess- Prozess- KVP entwurf controlling Business IT Prozess- implementierung Bernd Rücker / bernd.ruecker@camunda.com / 27
  28. 28. Der Traum der Magic BPM-Suite Der BPM-Kreislauf Modelling Monitoring Business IT Magic BPM-Suite Human Workflow EAI / SOA Bernd Rücker / bernd.ruecker@camunda.com / 28
  29. 29. JBoss jBPM 4 jBPM die Vierte • Aufbauend auf PVM • Persistenz über JPA geplant • Unterstützung BPMN • siehe http://www.bpm-guide.de/2009/01/26/ein- erster-blick-auf-jbpm-4/ Bernd Rücker / bernd.ruecker@camunda.com / 38
  30. 30. Weitere Änderungen in jBPM 4 jBPM die Vierte • Allgemeingültige API – ProcessService – ExecutionService – TaskService – ManagementService – CommandService • Grafische Informationen im gleichen XML • Deployment in AS/ESB wird verbessert Bernd Rücker / bernd.ruecker@camunda.com / 39
  31. 31. Beispielprozess im neuen Designer jBPM die Vierte Bernd Rücker / bernd.ruecker@camunda.com / 40
  32. 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> Bernd Rücker / bernd.ruecker@camunda.com / 44
  33. 33. Nicht gut: Regeln im Prozess Prozessmodelle und Geschäftsregeln Preiskalkulation Auftragswert < 50 TEUR Normalpreis 3% Rabatt 50k <= AW < 100k kalkulieren abziehen 5% Rabatt 100k <= AW < 250k abziehen Verhandelten Rabatt individuell verhandelt Rabatt abziehen Bernd Rücker / bernd.ruecker@camunda.com / 45
  34. 34. Regeln sinnvoll abbilden Prozessmodelle und Geschäftsregeln Auftragswert Rabatt verhandelt? Rabatt (%) AW < 50 T€ Nein 0 50 T€ <= AW < 100 T€ Nein 3 100 T€ <= AW < 250 T€ Nein 5 <egal> Ja <individuell> Bernd Rücker / bernd.ruecker@camunda.com / 46
  35. 35. Was sind Regeln? • „Wenn ich müde bin, dann gehe ich ins Bett!“ • „WENN .. DANN ..“-Struktur • Bedingung und Konseqenz (Prämisse und Konklusion; Left-Hand-Side LHS und Right-Hand- Side RHS) • Konsequenz wird häufig als „Aktion“ bezeichnet • Bedingungen prüfen „Fakten“ • Regeln „feuern“, wenn deren Bedingung eintrifft Bernd Rücker / bernd.ruecker@camunda.com / 47
  36. 36. Wie werden Regeln umgesetzt? Alternativen • Direkte Programmierung im Quellcode: if ( person.istMuede() == true ) { person.putzeZaehne(); person.geheInsBett(); } • Spezifische Lösungen (Codegenerierung, DSL, Speziallösungen, …) • Regelmaschine / Rule Engine Bernd Rücker / bernd.ruecker@camunda.com / 48
  37. 37. Probleme programmierter Regeln Wie werden Regeln umgesetzt? • Wartbarkeit und Validierbarkeit nicht gegeben • Regeln müssen durch Entwickler in Quellcode übersetzt werden • Fachliche Regeln werden über verschiedene Klassen verteilt • Keine Lesbarkeit der Regeln für den Fachbereich • Konflikt-Lösung muss realisiert werden Bernd Rücker / bernd.ruecker@camunda.com / 49
  38. 38. Vorteile der Rule-Engine Wie werden Regeln umgesetzt? • Explizite Formulierung der Regeln als Regeln • Deklarativ: Welche Regeln wann wie ausgeführt werden entscheidet die Regelmaschine • Regeln für Fachbereich verständlich Bedingung: Person.muede = true Konsequenz: person.putzeZaehne(); person.geheInsBett(); Bernd Rücker / bernd.ruecker@camunda.com / 50
  39. 39. Rule Engines in Java Architektur • Fakten (Wissen) = Domänenobjekte (POJOs) • Rule Engine wird generisch in die Architektur integriert (Interceptoren, …) • Rule Engine wird gezielt angesprochen Client Anwendung / Server Interceptor Fachlogik Bernd Rücker / bernd.ruecker@camunda.com / 51
  40. 40. JBoss Drools Die Open Source Rule Engine • Java Rule Engine (RETE-Implementierung) • „JBoss Drools“ / „JBoss Rules“ • Lauffähig mit oder ohne Application-Server • „Library“ • Business Rules Management System (BRMS) • Aktuell Version 4.0 (Version 5 in der Pipe) • Open Source (ASL) Bernd Rücker / bernd.ruecker@camunda.com / 52
  41. 41. Drools-Regeln Beispiel package com.camunda.demo import demo.business.*; import demo.infrastructure.ErrorList; global ErrorList errors; rule "Auftragsrabatt bei hohem Bestellwert" when o: Order( value>5000 ) then o.setDiscount(0.05); end rule "Nachnahme nur bis 2500 € möglich" when o: Order( value>2500, shippingType="COD" ) then errors.addError("Nachname nicht möglich bei Auftragswert " + o.getValue()); end Bernd Rücker / bernd.ruecker@camunda.com / 53
  42. 42. Drools im Einsatz API Regeln POJO‘s WorkingMemory fireAllRules RuleBaseLoader loader = RuleBaseLoader.getInstance(); RuleBase ruleBase = loader.loadFromReader( new InputStreamReader(this.getClass().getResourceAsStream( "/demo.drl"))); WorkingMemory wm = ruleBase.newStatefulSession(); wm.insert(meldung); wm.fireAllRules(); Bernd Rücker / bernd.ruecker@camunda.com / 54
  43. 43. Beispiel: Golfer Riddle Drools There are four Golfers standing at a tee, in a line from left to right • The golfer to Fred’s immediate right is wearing blue pants • Joe is second in line • Bob is wearing plaid pants • Tom isn’t in position one or four, and he isn’t wearing the orange pants Bernd Rücker / bernd.ruecker@camunda.com / 55
  44. 44. Regelbeispiel Example: Golfer Riddle rule "find solution“ when // There is a golfer named Fred, // Whose positions is $p1 $fred : Golfer( name == "Fred" ) // Joe is in position 2 $joe : Golfer( name == "Joe", position == 2, position != $fred.position, color != $fred.color ) ... then System.out.println( "Fred " + $fred.getPosition() + " " + $fred.getColor() ); System.out.println( "Joe " + $joe.getPosition() + " " + $joe.getColor() ); System.out.println( "Bob " + $bob.getPosition() + " " + $bob.getColor() ); System.out.println( "Tom " + $tom.getPosition() + " " + $tom.getColor() ); end Bernd Rücker / bernd.ruecker@camunda.com / 56
  45. 45. Drools im Einsatz Wie funktioniert es intern? • In-memory Knowledge-Repository • Basiert auf Rete Algorithm • Forward chaining • Backward chaining ist geplant (Drools 5?) Bernd Rücker / bernd.ruecker@camunda.com / 57
  46. 46. Für den Fachbereich: Decision Tables Bernd Rücker / bernd.ruecker@camunda.com / 58
  47. 47. DSL-Support Drools [when]Versicherter unter {MindestAlter} Jahre alt= Person( age < {MindestAlter} ) [when]Mehr als {Anzahl} Unfälle gebaut= Person( accidentCount > {Anzahl} ) ... [then]Police nicht möglich= errors.addError("Police kann nicht ausgestellt werden"); rule "Abmeldung - Check mit DSL" when Versicherter unter 25 Jahre alt and Mehr als 3 Unfälle gebaut then Police nicht möglich end Bernd Rücker / bernd.ruecker@camunda.com / 59
  48. 48. DSL-Support Drools Bernd Rücker / bernd.ruecker@camunda.com / 60
  49. 49. Regeleditor ohne DSL Drools Bernd Rücker / bernd.ruecker@camunda.com / 61
  50. 50. Guided Rule Editor Verfügbar in Eclipse & BRMS Bernd Rücker / bernd.ruecker@camunda.com / 62
  51. 51. RuleFlow Grahpical representation • Welche Regeln sollen in welcher Reihenfolge • Parallel oder • unter welchen Bedingungen ausgeführt werden Bernd Rücker / bernd.ruecker@camunda.com / 63
  52. 52. Tooling: Eclipse Drools Bernd Rücker / bernd.ruecker@camunda.com / 64
  53. 53. Business Rules Management System Drools BRMS Web-GUI Anwendung Drools Rule-Repository (JCR) Server Bernd Rücker / bernd.ruecker@camunda.com / 65
  54. 54. BPM + !BRM = ? !BPM + BRM = ? BPM + BRM = ? Bernd Rücker / bernd.ruecker@camunda.com / 66
  55. 55. Geschäftsprozesse mit Regeln umsetzen? BPM + BRM • Möglich! • Vorteil: Maximale Flexibilität • Nachteile – Keine Visualisierung / Modellierung des Prozessflusses – Nicht immer offensichtlich, warum was passiert – Keine „Grenzen“ durch Prozessstruktur – Keine out-of-the-box Wartezustände / Persistenz Bernd Rücker / bernd.ruecker@camunda.com / 67
  56. 56. Einsatzmöglichkeiten BPM + BRM • BPM (Prozesse) – Geschäftsprozesse / Workflows – Fachliche Modellierung – Hoher Standardisierungs-/Wiederholungsgrad • BRM (Regeln) – Prozessunabhängige Regeln – Punktuelle Integration in Prozesse – Beeinflussung des Prozessablaufs (80/20 Regel) In Kombination stabilere Prozesse bei mehr Agilität! Bernd Rücker / bernd.ruecker@camunda.com / 68
  57. 57. Kombinationsmöglichkeiten Regeln treffen Entscheidungen Regeln steuern Zuweisung von Aufgaben Regeln schließen neues Wissen Und: Beeinflussung des Prozessablaufs in Sonderfällen Bernd Rücker / bernd.ruecker@camunda.com / 69
  58. 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 <action class="org.jbpm.action.RulesActionHandler"> <ruleFile>/...OrderPricingRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> </action> Bernd Rücker / bernd.ruecker@camunda.com / 70
  59. 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> Besseres Design: rule "Conspicuous Order" when Regeln schreiben Order( price > 500) Ergebnis in then Prozessvariable System.out.println("signal conspicuous order"); und jBPM executionContext.getNode(). leave(executionContext, "conspicuous"); „Decision“ wertet end diese aus Bernd Rücker / bernd.ruecker@camunda.com / 71
  60. 60. Beeinflussung des Prozessablaufs Event getrieben reagieren / Ausnahmen rule "Order gets cancelled" when evt : Event( type == "cancel" ) then token.setNode( "end2" ); end Token Bernd Rücker / bernd.ruecker@camunda.com / 72
  61. 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> 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()); Bernd Rücker / bernd.ruecker@camunda.com / 73 end
  62. 62. Ausblick: ESB / Content Based Routing Beispiel: JBoss jBPM jPDL + JBoss ESB System 1 System 2 Content-Based Router Service Environment JBoss ESB JBoss jBPM Bernd Rücker / bernd.ruecker@camunda.com / 74
  63. 63. ESB & Content Based Routing Vergleiche Event Driven Architecture (EDA) Quelle: JBoss Bernd Rücker / bernd.ruecker@camunda.com / 75
  64. 64. Fazit Geschäftsprozesse und Regeln mit jBPM und Drools • jBPM ist eine kleine, flexible Process Engine. Bewährt auch in großen Projekten! • Drools ist cool und steht teuren Rule Engines in wenig nach • Integrieren & Kombinieren! • siehe auch JBoss SOA Plattform (ESB) • BPM & BRM bleiben Thema, selbst wenn SOA Tod ist ;-) Bernd Rücker / bernd.ruecker@camunda.com / 76
  65. 65. Fragen & Antworten Bernd Rücker Geschäftsführer Berater, Trainer & Coach bernd.ruecker@camunda.com +49 711 3278645 +49 171 1473461 Unsere Themen • Ganzheitliches BPM • Prozessautomatisierung • SOA, BPEL, XPDL, jBPM, Drools, ESB • BPMN • BPM-Toolauswahl Unsere Leistungen • Beratung • Seminare • Process Hosting Bernd Rücker / bernd.ruecker@camunda.com / 77

×