Date post: | 05-Dec-2014 |
Category: |
Technology |
Upload: | camunda-services-gmbh |
View: | 7,627 times |
Download: | 5 times |
JBoss jBPM
Die Open Source
Business Process Engine
JavaConferenceMünchen
12.09.2008
• 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?
• Einführung BPM (Business Process Management)
• JBoss jBPM jPDL
• Prozessbeispiel
• Simulation & Erweiterung
• Process Virtual Machine (PVM) & jBPM 4
AgendaJBoss jBPM
Geschäftsprozesse & SoftwareDer Status Quo in manchen Unternehmen
Software
GUI
EAI-ToolWeb-Service
Kunden
KomponenteSAP
Server
Gui 1 Gui 2 Gui 3
Paper Email
Ein „digitaler“ Prozessmit Business Process Engine
Task
Zuweisung
Service
Aufruf
Task
Zuweisung
IT
Δ Durchlaufzeit
Process Engine
Human Workflow Human WorkflowEAI
SOA
Process ExecutionBusiness Process Engine
Task
Zuweisung
Service
Aufruf
Task
Zuweisung
Tasklist Externes
System
Transaction / Request
process execution
Zeit
Process Execution Engine
…
Client
1.) Aufgabe erzeugen
2.) Aufgabe abschließen
1.) System aufrufen / Message
2.) Asynchrone Antwort als Message
Integration: BPM & SOAQ
uelle
: Nic
ola
i Josuttis
Business Process Engine (BPM-Engine)
Definition Laufzeit
Business Process EngineMiddleware für Geschäftsprozesse
Persistenz
Prozess-
Ausführung
Prozess-
definitionen
AdministrationProzess-
Logs
Aufgaben-
Verwaltung
Sachbearbeiter
Fremd-
Anwendungen
Business Analyst
Administrator
Entwickler
Simulation
• Versionierung, Persistenz & Interpretation von
Prozessmodellen
• Steuerung & Persistenz von Prozessinstanzen
• Task-Management
• Wait-States
• Prozesskontext (Variablen zu Prozess speichern)
• Einbindung externer Services
• Verwalten von Ereignissen (z.B. Timeouts)
• …
Was leistet die Business Process EngineFeatures
• 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
„Graph oriented programming“Der Prozess als gerichteter Graph
Node
Transition
from to
**leaving
Transitions
arriving
Transitions
Token
current
Node
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>
Beispielprozess mit jPDLEinfacher Ticketprozess
jBPM-VokabularjPDL
Task-Node
Transition
Actions
State
Node
• 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
• 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
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();
Nodes & StatesjPDL
<node name="Kunde anlegen">
<event type="node-enter">
<action name="Kunde anlegen" class="...CreateCustomerAction"/>
</event>
<transition to="Bearbeiter bekannt?" />
</node>
<state name="Ticket geschlossen">
<transition name="wieder öffnen" to="Ticket bearbeiten">
<action class="de.ejbbuch.jbpm.actions.ReopenTicketAction" />
</transition>
<transition name="schliessen ok" to="Mail versenden" />
</state>
jPDL – DecisionsjPDL
<decision name="Kunde bekannt?">
<handler class="de.ejbbuch.jbpm.decision.CustomerExistDecision"/>
<transition name="false" to="Kunde anlegen" />
<transition name="true" to="Bearbeiter bekannt?">
<action class="de.ejbbuch.jbpm.actions.LoadCustomerAction" />
</transition>
</decision>
<decision name="Bearbeiter bekannt?" expression="#{clerk!=null}">
<transition name="false" to="Bearbeiter zuweisen"></transition>
<transition name="true" to="Ticket anlegen"></transition>
</decision>
JSF-Expression
Java
jBPM-DescisionAutomatische Entscheidungen als Java-Code
public class CustomerExistDecision implements DecisionHandler {
public String decide(ExecutionContext ctx) throws Exception {
// get variable "customerId" out of process context
String customerId = (String)ctx.getVariable("customerId");
...
if (...)
return "true";
else
return "false";
}
}
• jBPM kann in eigene Java-Architektur integriert
werden
• Process Engine ist eigene Architekturschicht
• Domänenobjekte oder Referenzen als
Prozessvariablen
• Ansteuerung ext.
Services im Prozess
jBPM in der ArchitekturEinbettung in eigene Anwendung
EJB-Container (oder Tomcat oder Java SE)
Session
Bean
JCA JMSEJB
WS
jBPM (jPDL)Human
Task
Mgmnt
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;
}
...
}
Beispiel: EJB3 + Swing
EJB-Container
BPM-Engine
Command
Service
SLSB
JCA JMS …EJB
Webcontainer
Command
Service
MDB
Web-GUI
Swing-GUI
Commands
Fremd-
systeme
Message
Mit
Commands
Korrelation
EJB-Container (oder Tomcat oder Java SE)
Session
Bean
JCA JMSEJB
WS
WS
EJB-Container
JMS, …EJB
.NET Human
Task
Mgmnt
WS WS WS
…
WS
Vergleich zu BPELJava beheimatet JBoss jBPM
Java
jBPM (jPDL)
BPEL-Server
Human
Task
Mgmnt
Business-IT-Alignment mit jBPM?
• Java API
• Ant
• Eclipse-Designer
• Web-Console
• AdminClient
• MBean
• …
• Prozessversionierung
• Action-Klassen können mit deployed und versioniert werden
Prozess DeploymentDen Prozess zum Leben erwecken
XML
DB
jBPM APIdeploy
.classNeue
Version
Tomcat
JBoss jBPM (Webanwendung)
jBPM Web-Console (JSF)
DemoanwendungArchitektur
Geschäftsprozess
Browser
Ticket
System
CRMSystem
Zur Vereinfachung in
der Übung: Pure Java!
Action Action
CRM- & TicketsystemEinfachste Java EE Implementierung & Prozessintegration
<<Service>>
CrmService
+ findCustomer:Customer+ existCustomer:boolean+ createCustomer:Customer
<<Entity>>Customer
+ id:int+ givenname:String+ surname:String+ email:String
<<Service>>
TicketService
+ createTicket:Ticket+ getTicket:Ticket
<<Entity>>Ticket
+ id:int+ description:String+ content:String+ open:boolean
ProzesskontextcustomerId: 0815ticketId: 007
ProzesskontextcustomerId: 0815ticketId: 007
DEMO
Vision GeschäftsprozesssimulationBusiness Process Simulation (BPS)
process model &
additional info
BAM
alternative
process
structures
(stochastic)
simulation
benchmarks,
KPI, …
Same model as
for process
execution
Life data
from
history
Analysis
Design
ImplementationExecution
Control
Iterative Improvement
BeispielWarenrücknahme-Prozess
process runs: 195
100 95
30
165
145 20
175 20
195
Accounta
nt
180 (30)
Clerk
180 (60)
Accounta
nt
180 (30)
Tester
732,25 (448)
dispatcher
325.50 (182)
Swimlane
Avg, duration (standard
derivation)
Fragestellungen:
• Wie viele Mitarbeiter benötige
ich für eine bestimmte
Arbeitslast?
• Wo liegt der optimale Punkt
zwischen zu vielen und zu
wenigen Leuten?
Simulation inputBusiness Process Simulation (BPS)
distribution of waiting time
distribution of start events (amount and time)
distribution of duration/processing time for task
distribution of duration/processing time for task
resource pools
• Entwicklelt als Master Thesis
• JBoss jBPM
• DESMO-J
– Java Simulation Framework
– Discrete Event Simulation (DES)
– Entwickelt von der Uni Hamburg
– Open Source (Apache License)
jBPM SimulationskomponenteBusiness Process Simulation (BPS)
Business
Process
Engine:
JBoss
jBPM
DES-
Framework:
DESMO-J
Combination of BPM & DES
?
Combination of BPM & DES in action
21:33
Eventlist
21:40 start process
Distributions
Counters &
data
collectors
21:33
21:33
21:40 start process
21:40 start process
Combination of BPM & DES in action
21:40
Eventlist
22:07 start process
22:55 parcel arrived
Distributions
Counters &
data
collectors
21:40
22:55 parcel arrived
Combination of BPM & DES in action
22:55
Eventlist
Distributions
Counters &
data
collectors
22:55
22:55 parcel arrived
ImplementierungProzessparser & jbpm-configuration
<jbpm-configuration>
<string name="resource.action.types"
value="org/jbpm/sim/simulation.action.types.xml"/>
<string name="resource.node.types"
value="org/jbpm/sim/simulation.node.types.xml"/>
</jbpm-configuration>
ImplementierungÜber eigene Nodes und Actions
<node-types>
<node-type element="decision" class="org.jbpm.sim.jpdl.SimDecision" />
<node-type element="state" class="org.jbpm.sim.jpdl.SimState" />
<node-type element="start-state" class="org.jbpm.graph.node.StartState" />
<node-type element="end-state" class="org.jbpm.graph.node.EndState" />
...
<node-type element="mail-node" class="org.jbpm.graph.def.Node" />
</node-types>
<action-types>
<action-type element="action" class="org.jbpm.sim.jpdl.SimAction" />
<action-type element="simulation-action" class="org.jbpm.sim.jpdl.SimAction" />
...
<action-type element="mail" class="org.jbpm.sim.action.EmptyAction" />
</action-types>
• 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
Ausblick: Process Virtual MachineJBoss PVM
Konzepte & KernabstraktionenProzesse als Zustandsautomat
Verhalten über
Sprache definiert
LaufzeitverhaltenProzesse als Zustandsautomat
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();
• Graphen / Blockstruktur
• Sprache kann durch
entsprechendes Node-Verhalten
implementiert werden
• Es wird geben
– XPDL: Nova Bonita (Ende 2008)
– jPDL: JBoss jBPM JPDL 4 (Anfang
2009)
– BPEL
• Sprachen sind in XML umgesetzt
ProzesssprachenDie PVM unterstützt verschiedene Sprachen
• Im Java Umfeld ist JBoss jBPM sehr interessant
• „Leichtgewichtig“ und in verschiedensten Umgebungen Lauffähig
• Erweiterbar und flexibel
• PVM bildet Grundlage für verschiedenste Engines
• Modelgetriebene Ansätze denkbar
• Vision und Roadmap vorhanden!
2 Antworten auf Standardfragen:
• Performance und Skalierbarkeit bei korrektem Einsatz kein Problem
• Ja, Tooling (Designer und Webconsole) ist verbesserungsbedürftig ;-)
FazitJBoss jBPM
Fragen & Antworten
Unsere Themen
• Ganzheitliches BPM
• Prozessautomatisierung
• SOA, BPEL, XPDL, jBPM, Drools, ESB
• BPMN
• BPM-Toolauswahl
Unsere Leistungen
• Beratung
• Seminare
• Process Hosting
Bernd Rücker
Geschäftsführer
Berater, Trainer & Coach
+49 711 3278645
+49 171 1473461