JBoss jBPM

Post on 05-Dec-2014

7,627 views 5 download

description

Vortrag auf W-Jax 2008

transcript

JBoss jBPM

Die Open Source

Business Process Engine

JavaConferenceMünchen

12.09.2008

bernd.ruecker@camunda.com

• 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

bernd.ruecker@camunda.com

+49 711 3278645

+49 171 1473461