[Webinar] BPM Renaissance: 5 Tips to Thrive in a Cloud-Native World
20080917 Hernstcampus JBoss Process Virtual Machine - Hibernate des BPM
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. 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. 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. 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. 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. 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. Integration: BPM & SOA
Quelle: Nicolai Josuttis
e o t
Bernd Rücker / bernd.ruecker@camunda.com / 7
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. 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. 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. 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. 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. 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. Konzepte & Kernabstraktionen
Prozesse als Zustandsautomat
Verhalten über
Sprache definiert
Bernd Rücker / bernd.ruecker@camunda.com / 14
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. 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. 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. 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. 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. 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. 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. Execution
Die Schnittstelle zur Prozessmaschine
Bernd Rücker / bernd.ruecker@camunda.com / 23
28. Persistenz
Viele Sprachen – eine Datenbasis
Bernd Rücker / bernd.ruecker@camunda.com / 28
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. 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. „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. 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. 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. 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
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. Kurzer Demoprozess
Einfacher Ticketprozess
Actions
Task-Node
T kN d
Node
Transition
State
Bernd Rücker / bernd.ruecker@camunda.com / 37
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
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. 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
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
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. 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. 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. 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