Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

jBPM & Drools

8.027 Aufrufe

Veröffentlicht am

Vortrag auf W-Jax 2008

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

jBPM & Drools

  1. 1. Geschäftsprozesse und Regeln mit jBPM und Drools – ein unschlagbares Team JavaConference München, 12.09.2008 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
  3. 3. Agenda Geschäftsprozess und Regeln • Business Process Management (BPM) • JBoss jBPM • Business Rules Management (BRM) • JBoss Drools • Einsatzgebiete, Abgrenzung und Kombinationsmöglichkeiten
  4. 4. Ein „digitaler“ Prozess mit Business Process Engine Δ Durchlaufzeit Task Service Task Zuweisung Aufruf Zuweisung Process Engine IT Human Workflow EAI Human Workflow SOA
  5. 5. JBoss jBPM Open Source Process Execution • Business Process Engine • POJO-Kern: Interne Prozessrepräsentation durch Java-Modelle • Persistenz über Hibernate (DB-Unabhängigkeit) • Lauffähig mit oder ohne Application-Server • „Library“ • Klein und flexibel, leicht erweiterbar • Aktuell Version 3.2, Version 4 in der Entwicklung • Open Source (LGPL)
  6. 6. „Graph oriented programming“ Der Prozess als gerichteter Graph Node 1 Token current Node from to leaving arriving Transitions * * Transitions Transition <process-definition> ... <node name=“serve client”> <transition name=“ok” to=“order” /> <transition name=“nok” to=“joke” /> </node> <node name=“order” /> <node name=“joke” /> ... </process-definition>
  7. 7. Business Process Engine in Java Architektur • Process Engine ist eigene Architekturschicht • Domänenobjekte oder Referenzen als Prozessvariablen • Ansteuerung ext. Services EJB-Container (oder Tomcat oder Java SE) jBPM (jPDL) Human Session Task Bean Mgmnt EJB JCA JMS WS
  8. 8. Prozess: Grafik / XML  Java  DB deploy XML jBPM API Neue .class Version DB
  9. 9. Verschiedene Node-Typen jBPM in a nutshell • Task-Node: Human Tasks / Aufgaben • State: Wait-States • Fork / Join: Parallelisierung • Decision: Automatische Entscheidung • Start-State / End-State • Super-State • Process-State • … • Eigene Node-Typen mit Verhalten können implementiert werden
  10. 10. jBPM & Java jBPM in a nutshell • Einfache Java-API zur Steuerung der Engine – Prozessstart – Aufgabenliste –… • Aufrufen von „User-Code“ – definierte Stellen im Prozess – Interface & Java-Klassen
  11. 11. jBPM & Java jBPM in a nutshell JbpmConfiguration conf = JbpmConfiguration.getInstance(); JbpmContext context = conf. createJbpmContext(); ProcessInstance pi = context.getGraphSession(). findLatestProcessDefinition(quot;Ticketquot;).createProcessInstance(); pi.getRootToken().signal(); List<TaskInstance> tasks = context.getTaskMgmtSession(). findTaskInstances(quot;Vertriebquot;); tasks.get(0).end(quot;Ticket schliessenquot;); context.close(); public class MyAction implements ActionHandler { public void execute(ExecutionContext ctx) { Object var = ctx.getVariable(quot;varquot;); result = service.doSomething(var); ctx.setVariable(quot;resultquot;, result); } }
  12. 12. Was sind Regeln? • „Wenn ich müde bin, dann gehe ich ins Bett!“ • „WENN .. DANN ..“-Struktur • Bedingung und Konseqenz (Prämisse und Konklusion; Left-Hand-Side LHS und Right-Hand- Side RHS) • Konsequenz wird häufig als „Aktion“ bezeichnet • Bedingungen prüfen „Fakten“ • Regeln „feuern“, wenn deren Bedingung eintrifft
  13. 13. Wie werden Regeln umgesetzt? Alternativen • Direkte Programmierung im Quellcode: if ( person.istMuede() == true ) { person.putzeZaehne(); person.geheInsBett(); } • Spezifische Lösungen (Codegenerierung, DSL, Speziallösungen, …) • Regelmaschine / Rule Engine
  14. 14. Probleme programmierter Regeln Wie werden Regeln umgesetzt? • Wartbarkeit und Validierbarkeit nicht gegeben • Regeln müssen durch Entwickler in Quellcode übersetzt werden • Fachliche Regeln werden über verschiedene Klassen verteilt • Keine Lesbarkeit der Regeln für den Fachbereich • Konflikt-Lösung muss realisiert werden
  15. 15. Vorteile der Rule-Engine Wie werden Regeln umgesetzt? • Explizite Formulierung der Regeln als Regeln • Deklarativ: Welche Regeln wann wie ausgeführt werden entscheidet die Regelmaschine • Regeln für Fachbereich verständlich Bedingung: Person.muede = true Konsequenz: person.putzeZaehne(); person.geheInsBett();
  16. 16. Rule Engines in Java Architektur • Fakten (Wissen) = Domänenobjekte (POJOs) • Rule Engine wird generisch in die Architektur integriert (Interceptoren, …) • Rule Engine wird gezielt angesprochen Client Anwendung / Server Interceptor Fachlogik
  17. 17. JBoss Drools Die Open Source Rule Engine • Java Rule Engine (RETE-Implementierung) • „JBoss Drools“ / „JBoss Rules“ • Lauffähig mit oder ohne Application-Server • „Library“ • Business Rules Management System (BRMS) • Aktuell Version 4.0 (bald Version 5) • Open Source (ASL)
  18. 18. Drools-Regeln Beispiel package com.camunda.demo import demo.business.*; import demo.infrastructure.ErrorList; global ErrorList errors; rule quot;Auftragsrabatt bei hohem Bestellwertquot; when o: Order( value>5000 ) then o.setDiscount(0.05); end rule quot;Nachnahme nur bis 2500 € möglichquot; when o: Order( value>2500, shippingType=quot;CODquot; ) then errors.addError(quot;Nachname nicht möglich bei Auftragswert quot; + o.getValue() ); end
  19. 19. Drools im Einsatz API Regeln POJO„s WorkingMemory fireAllRules RuleBaseLoader loader = RuleBaseLoader.getInstance(); RuleBase ruleBase = loader.loadFromReader( new InputStreamReader(this.getClass().getResourceAsStream( quot;/demo.drlquot;))); WorkingMemory wm = ruleBase.newStatefulSession(); wm.insert(meldung); wm.fireAllRules();
  20. 20. Beispiel: Golfer Riddle Drools There are four Golfers standing at a tee, in a line from left to right • The golfer to Fred‟s immediate right is wearing blue pants • Joe is second in line • Bob is wearing plaid pants • Tom isn‟t in position one or four, and he isn‟t wearing the orange pants
  21. 21. Regelbeispiel Example: Golfer Riddle rule quot;find solution“ when // There is a golfer named Fred, // Whose positions is $p1 $fred : Golfer( name == quot;Fredquot; ) // Joe is in position 2 $joe : Golfer( name == quot;Joequot;, position == 2, position != $fred.position, color != $fred.color ) ... then System.out.println( quot;Fred quot; + $fred.getPosition() + quot; quot; + $fred.getColor() ); System.out.println( quot;Joe quot; + $joe.getPosition() + quot; quot; + $joe.getColor() ); System.out.println( quot;Bob quot; + $bob.getPosition() + quot; quot; + $bob.getColor() ); System.out.println( quot;Tom quot; + $tom.getPosition() + quot; quot; + $tom.getColor() ); end
  22. 22. Drools im Einsatz Wie funktioniert es intern? • In-memory Knowledge-Repository • Basiert auf Rete Algorithm • Forward chaining • Backward chaining ist geplant (Drools 5)
  23. 23. Für den Fachbereich: Decision Tables
  24. 24. DSL-Support Drools [when]Versicherter unter {MindestAlter} Jahre alt= Person( age < {MindestAlter} ) [when]Mehr als {Anzahl} Unfälle gebaut= Person( accidentCount > {Anzahl} ) ... [then]Police nicht möglich= errors.addError(quot;Police kann nicht ausgestellt werdenquot;); rule quot;Abmeldung - Check mit DSLquot; when Versicherter unter 25 Jahre alt and Mehr als 3 Unfälle gebaut then Police nicht möglich end
  25. 25. DSL-Support Drools
  26. 26. Regeleditor ohne DSL Drools
  27. 27. Guided Rule Editor Verfügbar in Eclipse & BRMS
  28. 28. RuleFlow Grahpical representation • Welche Regeln sollen in welcher Reihenfolge • Parallel oder • unter welchen Bedingungen ausgeführt werden
  29. 29. Tooling: Eclipse Drools
  30. 30. Business Rules Management System Drools BRMS Web-GUI Anwendung Drools Rule-Repository (JCR) Server
  31. 31. BPM vs. BRM | BPM + BRM
  32. 32. Geschäftsprozesse mit Regeln umsetzen? BPM + BRM • Möglich! • Vorteil: Maximale Flexibilität • Nachteile – Keine Visualisierung / Modellierung des Prozessflusses – Nicht immer offensichtlich, warum was passiert – Keine „Grenzen“ durch Prozessstruktur – Keine out-of-the-box Wartezustände / Persistenz
  33. 33. Einsatzmöglichkeiten BPM + BRM • BPM (Prozesse) – Geschäftsprozesse / Workflows – Fachliche Modellierung – Hoher Standardisierungs-/Wiederholungsgrad • BRM (Regeln) – Prozessunabhängige Regeln – Punktuelle Integration in Prozesse – Beeinflussung des Prozessablaufs (80/20 Regel) In Kombination stabilere Prozesse bei mehr Agilität!
  34. 34. Kombinationsmöglichkeiten Regeln treffen Entscheidungen Regeln steuern Zuweisung von Aufgaben Regeln schließen neues Wissen Und: Beeinflussung des Prozessablaufs in Sonderfällen
  35. 35. Schließen von “neuem Wissen” jBPM + Drools rule quot;Special Discountquot; when o : Order( customerName == quot;Berndquot; ) then # 5 % discount o.applyDiscount( 0.95 ); System.out.println(quot;Special discount grantedquot;); end <action class=quot;org.jbpm.action.RulesActionHandlerquot;> <ruleFile>/...OrderPricingRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> </action>
  36. 36. Entscheidungen jBPM + Drools <node name=quot;drools decisionquot;> <action class=quot;org.jbpm.action.RulesActionHandler“> <ruleFile>/com/.../OrderDecisionRules.drl</ruleFile> <objectNames> <element>order</element> </objectNames> <signalToken>false</signalToken> </action> <transition name=quot;conspicuousquot; to=quot;do somethingquot; /> <transition name=quot;casualquot; to=quot;determine discountquot; /> </node> Besseres Design: rule quot;Conspicuous Orderquot; when Regeln schreiben Order( price > 500) Ergebnis in then Prozessvariable System.out.println(quot;signal conspicuous orderquot;); und jBPM executionContext.getNode(). leave(executionContext, quot;conspicuousquot;); „Decision“ wertet end diese aus
  37. 37. Beeinflussung des Prozessablaufs Event getrieben reagieren / Ausnahmen rule quot;Order gets cancelledquot; when evt : Event( type == quot;cancelquot; ) then token.setNode( quot;end2quot; ); end Token
  38. 38. Actor-Assignment Wer ist zuständig? <assignment class=quot;org.jbpm.assignment.RulesAssignmentHandlerquot;> <group>underwriting</group> <ruleFile>/Assignment.drl</ruleFile> <objectNames><element>policy</element></objectNames> </assignment> rule quot;Determine Junior Role“ when Policy( basePrice < 500) then insert(new Role(quot;juniorquot;)); end rule quot;Determine Actorquot; salience -100 when Role($roleName : roleName) $a : Assignable() $group : Group() Membership( group == $group, role == $roleName, $user : user ) then $a.setActorId($user.getName()); end
  39. 39. Ausblick: ESB / Content Based Routing Beispiel: JBoss jBPM jPDL + JBoss ESB System 1 System 2 Content-Based Router Service Environment JBoss ESB JBoss jBPM
  40. 40. ESB & Content Based Routing Vergleiche Event Driven Architecture (EDA) Quelle: JBoss
  41. 41. Fazit Geschäftsprozesse und Regeln mit jBPM und Drools • jBPM & Drools integrieren sehr gut • Benutzen Sie das richtige Tool für den Job • Kombinieren! • jBPM ist eine kleine, flexible Process Engine. Bewährt auch in großen Projekten • Drools ist cool  • Drools steht teuren Rule Engines in nichts nach • BPM & BRM sind Themen der Zukunft! • Integration in JBoss SOA Plattform (ESB)
  42. 42. 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

×