camunda@1&1

53
camunda BPM @ 1&1 Philipp Grimm, Peter Hachenberger

Upload: 11-internet-ag

Post on 14-Jul-2015

172 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Camunda@1&1

camunda BPM @ 1&1

Philipp Grimm, Peter Hachenberger

Page 2: Camunda@1&1

Service and Process Platform (SPP)

® 1&1 Internet AG 2013 2

Page 3: Camunda@1&1

Tool chain for process automation

3

Process

Modeling

Signavio

Process

Export

PCP

Process

Development

BuSyWizard,

PSI

Build RunPlan

Configuration

Management

Puppet

Operating

System

Unitix

Process

Execution

S+P Platform

Process

Monitoring

PCC

Process

Operating

PIS

Platform

Monitoring

RHQ &

Nimsoft

Page 4: Camunda@1&1

Modeling in Signavio

4

Page 5: Camunda@1&1

Process Cylce Plugin

5

PC

P

Page 6: Camunda@1&1

Eclipse project from Archetype

6

public API for process start

facade for process start

test

adaptors, java code

transformed process,

configuration

Archetype

Page 7: Camunda@1&1

Process Starter

public String startOrderService() {final Map<String, Object> variables = new HashMap<String, Object>();final Map<String, String> businessKeys = new HashMap<String, String>();

String processInstanceId = ProcessStarter.startProcessInstance(„orderProcess_2_1, variables, businessKeys);

return processInstanceId;}

7

Setzen von SPP Business Keys

Asynchroner Start

ExceptionHandling der Plattform vom ersten Knoten

Page 8: Camunda@1&1

Process Service Invocation (PSI)

8

Two-way

Correlation

Variable Injection

Service Injection

Abstraction from Engine

Page 9: Camunda@1&1

PSI: Used interfaces

9

Page 10: Camunda@1&1

PSI Request Adapter

@Correlation(correlationIdReference = "HELLO_WORLD_CORRELATION")public class CheckHelloWorldRequestAdapter implements ServiceRequestAdapter{

@Service(type="ejb3") private HelloWorldBeanFacade externalService;

@Variableprivate String callInfo;

@CorrelationIdprivate String correlationId;

@Overridepublic void callService() throws Exception {

externalService.doSth(callInfo, correlationId);}

}10

implemented PSI

request interface

Page 11: Camunda@1&1

PSI Request Adapter

@Correlation(correlationIdReference = "HELLO_WORLD_CORRELATION")public class CheckHelloWorldRequestAdapter implements ServiceRequestAdapter{

@Service(type="ejb3") private HelloWorldBeanFacade externalService;

@Variableprivate String callInfo;

@CorrelationIdprivate String correlationId;

@Overridepublic void callService() throws Exception {

externalService.doSth(callInfo, correlationId);}

}11

correlation

Page 12: Camunda@1&1

PSI Request Adapter

@Correlation(correlationIdReference = "HELLO_WORLD_CORRELATION")public class CheckHelloWorldRequestAdapter implements ServiceRequestAdapter{

@Service(type="ejb3") private HelloWorldBeanFacade externalService;

@Variableprivate String callInfo;

@CorrelationIdprivate String correlationId;

@Overridepublic void callService() throws Exception {

externalService.doSth(callInfo, correlationId);}

}12

injection of service proxy

Page 13: Camunda@1&1

PSI Request Adapter

@Correlation(correlationIdReference = "HELLO_WORLD_CORRELATION")public class CheckHelloWorldRequestAdapter implements ServiceRequestAdapter{

@Service(type="ejb3") private HelloWorldBeanFacade externalService;

@Variableprivate String callInfo;

@CorrelationIdprivate String correlationId;

@Overridepublic void callService() throws Exception {

externalService.doSth(callInfo, correlationId);}

}13

variable injected by PSI

Page 14: Camunda@1&1

PSI Request Adapter

@Correlation(correlationIdReference = "HELLO_WORLD_CORRELATION")public class CheckHelloWorldRequestAdapter implements ServiceRequestAdapter{

@Service(type="ejb3") private HelloWorldBeanFacade externalService;

@Variableprivate String callInfo;

@CorrelationIdprivate String correlationId;

@Overridepublic void callService() throws Exception {

externalService.doSth(callInfo, correlationId);}

}14

injection of generated UUID

Page 15: Camunda@1&1

PSI Request Adapter

@Correlation(correlationIdReference = "HELLO_WORLD_CORRELATION")public class CheckHelloWorldRequestAdapter implements ServiceRequestAdapter{

@Service(type="ejb3") private HelloWorldBeanFacade externalService;

@Variableprivate String callInfo;

@CorrelationIdprivate String correlationId;

@Overridepublic void callService() throws Exception {

externalService.doSth(callInfo, correlationId);}

}15

method called by camunda / PSI

Page 16: Camunda@1&1

Process Tooling

16

PIS

Developer Operator Process

manager

ICAT

Page 17: Camunda@1&1

Process Command Center (PCC)

Configurable KPI Range

Implementation with predefined Delegate

Page 18: Camunda@1&1

Process Command Center (PCC)

18

Page 19: Camunda@1&1

Error Categorization with iCat

Page 20: Camunda@1&1

Error Categorization (Business Errors)

Page 21: Camunda@1&1

Process Operating

Page 22: Camunda@1&1

Process Operating

Page 23: Camunda@1&1

Zwei vieldiskutierte Themen

Datenhaltung / -handling

Migration von Prozess-Versionen

Page 24: Camunda@1&1

Datenhandling

Fachliche Daten in fachliche DB – NICHT in Prozesskontext

Datenlast reduziert Performance

Prozesse sollten keine Monolithen sein

Effektivere Strukturierung der Daten

Bessere Kontrolle ueber Kundendaten (Legalitaet)

AutoGetter/AutoSetter

Einfache Einbindung von externen Daten

Business Keys

Page 25: Camunda@1&1

public class OuterAutoGetter implements AutoGetter<String> {

@Service(type="ejb3") ExternalServiceBeanFacade externalService;

@VariableString processVar;

@AutoGetterVariable(type = InnerAutoGetter.class)String autoGetterValue;

@Overridepublic String get() {

…}

}

AutoSetter

Page 26: Camunda@1&1

public class OuterAutoGetter implements AutoGetter<String> {

@Service(type="ejb3") ExternalServiceBeanFacade externalService;

@VariableString processVar;

@AutoGetterVariable(type = InnerAutoGetter.class)String autoGetterValue;

@Overridepublic String get() {

…}

}

AutoSetter

Page 27: Camunda@1&1

public class OuterAutoGetter implements AutoGetter<String> {

@Service(type="ejb3") ExternalServiceBeanFacade externalService;

@VariableString processVar;

@AutoGetterVariable(type = InnerAutoGetter.class)String autoGetterValue;

@Overridepublic String get() {

…}

}

AutoGetter

Page 28: Camunda@1&1

Datenhandling

Fachliche Daten in fachliche DB – NICHT in Prozesskontext

Datenlast reduziert Performance

Prozesse sollten keine Monolithen sein

Effektivere Strukturierung der Daten

Bessere Kontrolle ueber Kundendaten (Legalitaet)

AutoGetter/AutoSetter

Einfache Einbindung von externen Daten

Business Keys

camunda business key garantierte Eindeutigkeit von Prozessinstanz

SPP buisness keys liefern Corrleation per fachlichem Schluessel

SPP buisness keys liefern Transparenz im Operating

extra Spalte pro business key

schnelle Suche via business key

Page 29: Camunda@1&1

Process Operating

Page 30: Camunda@1&1

Migration von Prozess-Versionen

Scenario

Prozess-Definition muss angepasst werden

Laufende Prozess-Instanzen müssen migriert werden

Page 31: Camunda@1&1

id_ proc_inst_id_ parent_id_ act_id_

79 79 null Verifyaddress

act_ru_execution

79

Migrationsproblematik

Page 32: Camunda@1&1

Migrationsproblematik

Page 33: Camunda@1&1

id_ proc_inst_id_ parent_id_ act_id_

91 91 null parallelGateway

95 91 91 VerifyAddress

96 91 91 null

98 91 96 intermediateCatchEvent

act_ru_execution

91

95

96

98

Migrationsproblematik

Page 34: Camunda@1&1

Mögliche Migrationsprobleme

1. gleicher Ablauf

2. Daten

3. Struktur-Änderung

einfach

mittelschwer

sehr schwer

Page 35: Camunda@1&1

Migration von Prozessversionen

Kurzläufer

Prozessdefinition suspendieren

warten bis alle Instanzen durchgelaufen

Deployment von neuer Version

Prozessdefinition aktivieren

Langläufer

benutze fachliche Datenbank

modelliere kurzlaufende Subprozesse

realisiere Hauptprozess ohne Prozess-Engine

Page 36: Camunda@1&1

Langläufer

fachlicheDB

Page 37: Camunda@1&1

Langläufer

Ereignis

Empfänger

1. Event,

BusinessKey fachlicheDB

Page 38: Camunda@1&1

Langläufer

Ereignis

Empfängerfachliche

DB

1. Event,

BusinessKey

2. Event,

BusinessKey

Page 39: Camunda@1&1

Langläufer

Ereignis

Empfängerfachliche

DB

1. Event,

BusinessKey

2. Event,

BusinessKey

3. nächster Schritt

Page 40: Camunda@1&1

Langläufer

Ereignis

Empfänger

Process

instanz

fachlicheDB

1. Event,

BusinessKey

2. Event,

BusinessKey

3. nächster Schritt

4. Starte Prozessinstanz,

BusinessKey

Page 41: Camunda@1&1

Langläufer

Ereignis

Empfänger

Process

instanz

fachlicheDB

Zustands-

Änderungs-

Fassade

1. Event,

BusinessKey

2. Event,

BusinessKey

3. nächster Schritt

4. Starte Prozessinstanz,

BusinessKey

5. Prozess beendet,

BusinessKey

Page 42: Camunda@1&1

Langläufer

Ereignis

Empfänger

Process

instanz

fachlicheDB

Zustands-

Änderungs-

Fassade

1. Event,

BusinessKey

2. Event,

BusinessKey

3. nächster Schritt

4. Starte Prozessinstanz,

BusinessKey

5. Prozess beendet,

BusinessKey

6. neuer Zustand,

BusinessKey

Page 43: Camunda@1&1

Langläufer

Ereignis

Empfänger

Process

instanz

fachlicheDB

Zustands-

Änderungs-

Fassade

1. Event,

BusinessKey

2. Event,

BusinessKey

3. nächster Schritt

4. Starte Prozessinstanz,

BusinessKey

5. Prozess beendet,

BusinessKey

(7. sende Event, BusinessKey) 6. neuer Zustand,

BusinessKey

Page 44: Camunda@1&1

Fachlicher Prozesskontext

Ereignis

Empfänger

Process

instanz

fachlicheDB

Zustands-

Änderungs-

Fassade

Page 45: Camunda@1&1

Migrations-Alternativen

Scenario

Prozess-Definition muss angepasst werden

Laufende Prozess-Instanzen müssen migriert werden

Page 46: Camunda@1&1

Einfügen von Wartepunkten

Page 47: Camunda@1&1

Einfügen von Wartepunkten

Page 48: Camunda@1&1

Einfügen von Wartepunkten

Page 49: Camunda@1&1

Explizite Modellierung

Page 50: Camunda@1&1

Explizite Modellierung

Page 51: Camunda@1&1

Explizite Modellierung

Page 52: Camunda@1&1

Zusammenfassung

Service- und Prozessplattform

Konfiguration und Installation

Toolchain: Plan – Build – Run

Consulting für Architektur und Umsetzung von Prozessen

Page 53: Camunda@1&1

Questions