Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM

1,827 views

Published on

Published in: Technology
  • Be the first to comment

20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM

  1. 1. Die Process Virtual Machine Das Hibernate des BPM? Matheman Herbstcampus Nürnberg, 17.09.2008 Nürnberg 17 09 2008 bernd.ruecker@camunda.com
  2. 2. Bernd Rücker Wer bin ich? • Berater, Trainer, Coach • Softwareentwickler • Committer im JBoss jBPM-Projekt j j • Themen: BPM, SOA, Process Execution (jBPM, BPEL, XPDL (jBPM BPEL XPDL, …), Java EE ) • Eigene Trainings zu Process Execution, BPMN, BPM-Software, BPMN BPM Software … Bernd Rücker / bernd.ruecker@camunda.com / 2
  3. 3. Agenda Geschäftsprozess und Regeln • Einführung BPM (Business Process Management) • Die Process Virtual Machine (PVM) • j jBPM jPDL 3 j • Beispielprozess mit Demo • Fazit Bernd Rücker / bernd.ruecker@camunda.com / 3
  4. 4. Geschäftsprozesse & Software Der Status Quo in manchen Unternehmen GUI Paper Email Gui 1 Gui 2 Gui G i3 Software Kunden SAP Komponente Server EAI-Tool Web-Service Bernd Rücker / bernd.ruecker@camunda.com / 4
  5. 5. Ein „digitaler“ Prozess mit Business Process Engine Δ Durchlaufzeit Task Service Task Zuweisung Aufruf Zuweisung Process Engine IT Human W kfl H Workflow EAI Human W kfl H Workflow SOA Bernd Rücker / bernd.ruecker@camunda.com / 5
  6. 6. 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 / 6
  7. 7. Integration: BPM & SOA Quelle: Nicolai Josuttis e o t Bernd Rücker / bernd.ruecker@camunda.com / 7
  8. 8. Business Process Engine Middleware für Geschäftsprozesse Business Analyst Sachbearbeiter Aufgaben- Verwaltung V lt 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. Was leistet die Business Process Engine Features • Versionierung, Persistenz & Interpretation von Prozessmodellen P d ll • Steuerung & Persistenz von Prozessinstanzen • Task-Management • Wait-States Wait States • Prozesskontext (Variablen zu Prozess speichern) • Ei bi d Einbindung externer S i t Services • Verwalten von Ereignissen (z.B. Timeouts) • … Bernd Rücker / bernd.ruecker@camunda.com / 9
  10. 10. 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 / 10
  11. 11. Sprachen heute: Was nehmen? Komplexität, LOC, Mächtigkeit, Komplexität LOC Mächtigkeit Standards? Generierte Artefakte (WSDL & Schema) Deployment-Deskriptor p y p 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 / 11
  12. 12. Motivation Process Virtual Machine JBoss PVM • Es existieren verschiedenste Prozessausführungs- sprachen (P h (Process E Execution L ti Language) ) – BPEL, XPDL, jPDL, DSL‘s, … • Es gibt nicht die perfekte Sprache • Koexistenz von verschiedenen Sprachen erlauben p • Sprache nach Problem auswählen Grundfunktionalität Prozessmaschine in PVM Bernd Rücker / bernd.ruecker@camunda.com / 12
  13. 13. JBoss PVM Das Projekt • Gestartet 2007 durch JBoss (jBPM) und Bull (Bonita O h t ) (B it & Orchestra) • Gehostet bei JBoss, LGPL • POJO-Kern: Interne Prozessrepräsentation durch Java-Modelle • Persistenz austauschbar (Hibernate, EJB3) • Lauffähig mit oder ohne Application Server Application-Server • „Library“, kann eigebettet werden • Aktuell Alpha Version Bernd Rücker / bernd.ruecker@camunda.com / 13
  14. 14. Konzepte & Kernabstraktionen Prozesse als Zustandsautomat Verhalten über Sprache definiert Bernd Rücker / bernd.ruecker@camunda.com / 14
  15. 15. Laufzeitverhalten Prozesse als Zustandsautomat Bernd Rücker / bernd.ruecker@camunda.com / 15
  16. 16. Verhalten von Nodes Activity (entspricht Executable) Einfaches Interface um Verhalten zu implementieren: public interface Activity { void execute(Execution execution) throws Exception; } Beispiel: public class Display implements Activity { String message; public Display(String message) { this.message = message; } public void execute(Execution execution) { System.out.println(message); } } Bernd Rücker / bernd.ruecker@camunda.com / 16
  17. 17. Verhalten von „externen Nodes“ External Activity Externes System execute signal public class StateActivity implements ExternalActivity { public void execute(Execution execution) { execution.waitForSignal(); } public void signal(Execution execution, String signalName, Map<String, Object> parameters) { if (parameters!=null) { execution.setVariables(parameters); } execution.take(signalName); } } Bernd Rücker / bernd.ruecker@camunda.com / 17
  18. 18. Beispiel: TaskActivity z.B. z B jPDL TaskNode oder BPEL PeopleActivity Tasklist quest public class TaskActivity implements ExternalActivity { execute signal public void execute(Execution execution) { // let's use the node name as the task id String taskName = execution.getNode().getName(); TaskComponent.createTask(taskName, TaskComponent createTask(taskName execution); } public void signal(Execution execution, String signal, Map<String, Map<String Object> parameters) { execution.takeDefaultTransition(); } } Bernd Rücker / bernd.ruecker@camunda.com / 18
  19. 19. Just an API – PVM definiert keine Sprache Ein erster kleiner Prozess 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 / 19
  20. 20. Implementierung Wartezustand Beispielsweise der jPDL "State" State p public class WaitState implements ExternalActivity { p y public void execute(ActivityExecution execution) { execution.waitForSignal(); } public void signal(ActivityExecution execution, String signal, Map<String, Object> p p g, j parameters) { ) execution.take(signal); } } Bernd Rücker / bernd.ruecker@camunda.com / 20
  21. 21. Events "Hooks" im Prozessablauf Hooks p public class Display implements Activity { p y p y String message; public Display(String message) { this.message = message; g g ; } public void execute(Execution execution) { System.out.println(message); } } • An Transitionen • Node-Enter / Node-Leave • Prozess-Start / Prozess-End Bernd Rücker / bernd.ruecker@camunda.com / 21
  22. 22. Automatische Entscheidungen "Nur" eine andere Art Activities Nur public class A t bli l AutomaticCreditRating i l ti C ditR ti implements A ti it { t Activity public void execute(Execution execution) { int creditRate = (Integer) execution.getVariable("creditRate"); if ( (creditRate > 5) ditR t execution.take("good"); else if (creditRate < -5) execution.take("bad"); else l execution.take("average"); } } Durch Parametrisierung (gesteuert über die Sprache) kann jPDL- oder jPDL BPEL-Entscheidung gebaut werden Bernd Rücker / bernd.ruecker@camunda.com / 22
  23. 23. Execution Die Schnittstelle zur Prozessmaschine Bernd Rücker / bernd.ruecker@camunda.com / 23
  24. 24. Prozessstruktur Komposition ermöglicht verschiedenste Prozesskonstrukte Bernd Rücker / bernd.ruecker@camunda.com / 24
  25. 25. Prozessstruktur mit Ordnung Sequences public class Sequence implements ExternalActivity { public void execute(Execution execution) { List<Node> nodes = execution.getNode().getNodes(); execution.execute(nodes.get(0)); } public void signal(Execution execution, String signal, Map<String, Object> parameters) { Node previous = execution.getPreviousNode(); List<Node> nodes = execution.getNode().getNodes(); int previousIndex = nodes.indexOf(previous); int nextIndex = previousIndex+1; if (nextIndex < nodes.size()) { Node next = nodes.get(nextIndex); execution.execute(next); } else { execution.proceed(); } } } Bernd Rücker / bernd.ruecker@camunda.com / 25
  26. 26. Prozessstruktur mit Ordnung Sequences ProcessFactory.build( sequence ) ProcessFactory build("sequence") .compositeNode("sequence").initial().behaviour(new Sequence()) .needsPrevious() .node("one").behaviour(new Display("one")) .node( wait ).behaviour(new WaitState()) node("wait") behaviour(new .node("two").behaviour(new Display("two")) .compositeEnd() .done(); ... Node previous = execution.getPreviousNode(); ... Vergleiche BPEL-Blöcke BPEL Blöcke Bernd Rücker / bernd.ruecker@camunda.com / 26
  27. 27. Mehr Konzepte Subprozesse | Transaktionsgrenzen | Timer Bernd Rücker / bernd.ruecker@camunda.com / 27
  28. 28. Persistenz Viele Sprachen – eine Datenbasis Bernd Rücker / bernd.ruecker@camunda.com / 28
  29. 29. Prozesssprachen Die PVM unterstützt verschiedene Sprachen • Unterstützung für Graphen & Blockstruktur • Sprache kann durch entsprechende Nodes definiert werden • Für Node-Typen wird Verhalten implementiert ( (Activities) ) • Es wird geben – XPDL: Nova Bonita – jPDL: JBoss jBPM JPDL – BPEL • Eigene DSL (Domain Specific Language) möglich • MDSD-Ansätze denkbar Bernd Rücker / bernd.ruecker@camunda.com / 29
  30. 30. JBoss jBPM jPDL Das Projekt • Business Process Engine • Proprietäre Sprache „jBPM Process Definition Language“ (jPDL) • Aufbauend auf PVM • Klein und flexibel, leicht erweiterbar flexibel • Aktuell in der Entwicklung (released 3.2, noch ohne PVM), PVM) Fertigstellung bis Anfang 2009 geplant • Java-Objekte als Prozessvariablen Bernd Rücker / bernd.ruecker@camunda.com / 30
  31. 31. „Graph oriented programming“ in jPDL 3 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 / 31
  32. 32. Sprachbeispiel jPDL Node-Typen • Task-Node: Human Tasks / Aufgaben • State: Wait-States St t W it St t • Fork / Join: Parallelisierung • Decision: Automatische Entscheidung • Start-State / End-State • Super-State • Process State Process-State • … • Eigene Node-Typen mit Verhalten können implementiert werden erden Bernd Rücker / bernd.ruecker@camunda.com / 32
  33. 33. 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 / 33
  34. 34. 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 / 34
  35. 35. Tooling: Eclipse Sprachbeispiel jPDL Bernd Rücker / bernd.ruecker@camunda.com / 35
  36. 36. Prozess Deployment in jBPM 4 jBPM in a nutshell • Java API .class • Ant A t deploy XML jPDL • Eclipse-Designer PVM • Web-Console XSD • AdminClient Parser • MBean DB • … jBPM (Zugriff per API) • Alle Prozesse werden versioniert • Action-Klassen können mit deployed und versioniert werden Bernd Rücker / bernd.ruecker@camunda.com / 36
  37. 37. Kurzer Demoprozess Einfacher Ticketprozess Actions Task-Node T kN d Node Transition State Bernd Rücker / bernd.ruecker@camunda.com / 37
  38. 38. Demoanwendung Architektur Browser jBPM Web-Console (JSF) Geschäftsprozess Action Action JBoss jBPM (Webanwendung) Zur Vereinfachung in der Übung: Pure Java! CRM System Ticket System Tomcat Bernd Rücker / bernd.ruecker@camunda.com / 38
  39. 39. CRM- & Ticketsystem Einfachste Java EE Implementierung & Prozessintegration Prozesskontext Prozesskontext P k customerId 0815 :: customerId 0815 ticketId : : ticketId 007 007 <<Service>> S <<Service>> S CrmService TicketService + findCustomer:Customer + createTicket:Ticket + existCustomer:boolean + getTicket:Ticket + createCustomer:Customer <<Entity>> <<Entity>> Customer Ticket + id:int + id:int + givenname:String + description:String + surname:String + content:String + email:String + open:boolean Bernd Rücker / bernd.ruecker@camunda.com / 39
  40. 40. DEMO Bernd Rücker / bernd.ruecker@camunda.com / 40
  41. 41. jBPM in der Architektur Einbettung in eigene Anwendung • jBPM kann in eigene Java-Architektur integriert werden d • Process Engine ist eigene Architekturschicht • Domänenobjekte oder Referenzen als Prozessvariablen • Ansteuerung ext. Zum Beispiel EJB-Container Services im Prozess jBPM jPDL Human Session Task Bean Mgmnt EJB JCA JMS WS Bernd Rücker / bernd.ruecker@camunda.com / 41
  42. 42. 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 / 42
  43. 43. Beispiel: EJB3 + Swing jBPM jPDL in Java Systemen Swing-GUI EJB-Container BPM-Engine Command Command Command Service Service SLSB MDB Webcontainer Command Web-GUI Message EJB JCA JMS … Korrelation Fremd- systeme Bernd Rücker / bernd.ruecker@camunda.com / 43
  44. 44. Beispiel: JBoss ESB Commands in Action create Event start message (File) process from file FilePickupService Command prepare Case call Web Paramete Management Service r CreateCaseService JMS- read signal Message message process CaseCompletionService Environment JBoss ESB JBoss jBPM Bernd Rücker / bernd.ruecker@camunda.com / 44
  45. 45. Vergleich zu BPEL Java beheimatet JBoss jBPM EJB-Container (oder Tomcat oder Java SE) j jBPM (jPDL) (j ) Human Session Task Bean Mgmnt EJB JCA JMS WS BPEL-Server WS Java WS WS WS WS EJB-Container .NET Human … Task Mgmnt EJB JMS, … Bernd Rücker / bernd.ruecker@camunda.com / 45
  46. 46. Praxiserfahrungen jBPM jPDL 3 Aus dem Nähkästchen • Performance und Skalierbarkeit bei korrektem Einsatz kein Problem Ei t k i P bl • Ohne Persistenz minimaler Overhead • Relativ „leichtgewichtig“, kleine Lernkurve • Gute Dokumentation für normale Probleme • Auch in großen Projekten und Unternehmen eingesetzt • Ach ja: Tooling (Designer und Webconsole) ist verbesserungsbedürftig ;-) Bernd Rücker / bernd.ruecker@camunda.com / 46
  47. 47. Architektur PVM - Hibernate des BPM? jPDL BPEL … PVM Hibernate / JPA JVM DB Sprache XY Eigener Code PVM Hibernate / JPA JVM DB Produkt XY Bernd Rücker / bernd.ruecker@camunda.com / 47
  48. 48. Fazit & Ausblick JBoss PVM & jBPM 4 • PVM stabilisiert sich • Sehr interessantes Konzept, Interesse auch seitens kommerzieller Tool-Hersteller • Im Java Umfeld ist JBoss jBPM sehr interessant • „Leichtgewichtig und in verschiedensten Leichtgewichtig“ Umgebungen Lauffähig • Erweiterbar und flexibel • Vision und Roadmap vorhanden! • Einige Verbesserungen in jBPM 4: Logging konfigurierbar, Persistenz austauschbar, Control- Loop, … Bernd Rücker / bernd.ruecker@camunda.com / 48
  49. 49. Fragen & Antworten Bernd Rücker Geschäftsführer Berater, Trainer & Coach bernd.ruecker@camunda.com +49 711 3278645 Unsere Themen • G Ganzheitliches BPM h itli h • Prozessautomatisierung • SOA, BPEL, XPDL, jBPM, Drools, ESB • BPMN • BPM-Toolauswahl Unsere Leistungen • Beratung • Seminare • Process as a Service (Hosting) Bernd Rücker / bernd.ruecker@camunda.com / 49

×