83
Real-Life-BPM mit Java EE Ein Erfahrungsbericht Dr. Sven Jörges | IHK-GfI mbH

IHK GfI

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: IHK GfI

Real-Life-BPM mit Java EE

Ein Erfahrungsbericht

Dr. Sven Jörges | IHK-GfI mbH

Page 2: IHK GfI

• IT-Tochtergesellschaft der deutschen Industrie- und

Handelskammern (IHKs) und des Deutschen Industrie- und

Handelskammertages (DIHK)

• Seit mehr als 40 Jahren

Page 3: IHK GfI

Kunden

• Die 80 deutschen IHKs und der DIHK.

• Täglich bundesweit mehr als 8.000 IHK-MitarbeiterInnen.

Page 4: IHK GfI

Software-Landschaft

Page 5: IHK GfI

Motivation: Prozesse

• insbes. im ERP-System EVA generischer Aufbau, keine

„Benutzerführung“

• viel Know-how beim Sachbearbeiter notwendig

• Idee: Führung des Sachbearbeiters durch Prozesse

Page 6: IHK GfI

Beispiel: Guthabenerstattung

(Ist-Zustand)

Page 7: IHK GfI
Page 8: IHK GfI
Page 9: IHK GfI
Page 10: IHK GfI
Page 11: IHK GfI
Page 12: IHK GfI
Page 13: IHK GfI
Page 14: IHK GfI
Page 15: IHK GfI
Page 16: IHK GfI

Beispiel: Guthabenerstattung

(mit Prozessunterstützung)

Page 17: IHK GfI
Page 18: IHK GfI
Page 19: IHK GfI
Page 20: IHK GfI
Page 21: IHK GfI
Page 22: IHK GfI
Page 23: IHK GfI
Page 24: IHK GfI

BPMN 2.0

SaaS

Mandantenfähigkeit

Performance und Verfügbarkeit

Support

Page 25: IHK GfI

Auswahl und PoC

Page 26: IHK GfI
Page 27: IHK GfI
Page 28: IHK GfI
Page 29: IHK GfI
Page 30: IHK GfI
Page 31: IHK GfI

Quelle:

Page 32: IHK GfI

Quelle:

Page 33: IHK GfI

Quelle:

Page 34: IHK GfI

34

Oracle BPM Suite

IBM Business Process Manager

Intalio

activeVOS

jBPM

Bonita Open Solution

Activiti

Page 35: IHK GfI

• Native BPMN Process Engine

• Open Source (Apache License 2.0)

• leichtgewichtig

Quelle: http://www.activiti.org/userguide/

Activiti

Page 36: IHK GfI

• Spezielle Unterstützung für JEE

• Zusätzliche Tools (Monitoring, Tasklist, …)

• Support durch camunda

camunda fox

Page 37: IHK GfI

Quelle:

Page 38: IHK GfI

Quelle:

fox cockpit

Activiti

Drools

Page 39: IHK GfI

Aufbau der Process Engine

Page 40: IHK GfI
Page 41: IHK GfI

Deployment

EJB

JAX-WS, XIHK

Page 42: IHK GfI

Beispiel-Client: EVA

Page 43: IHK GfI
Page 44: IHK GfI
Page 45: IHK GfI
Page 46: IHK GfI
Page 47: IHK GfI

Stolpersteine

Page 48: IHK GfI

BPMN 2.0

SaaS

Mandantenfähigkeit

Performance und Verfügbarkeit

Support

Page 49: IHK GfI
Page 50: IHK GfI

Mandant aus Benutzername ableitbar:

101joerges

Page 51: IHK GfI

Mandant aus Benutzername ableitbar:

101joerges

Lösung: Konfiguration von DB-Schema-Präfixen in der fox engine

Page 52: IHK GfI

<process-engines>

<!-- Kammer 101 -->

<process-engine name="101" default="true">

<datasource>jdbc/FoxEngine</datasource>

<history-level>audit</history-level>

<properties>

<property name="dbTablePrefix">IHK101.</property>

</properties>

</process-engine>

<!-- Kammer 106 -->

<process-engine name="106" default="false">

</process-engine>

</process-engines>

Page 53: IHK GfI

BPMN 2.0

SaaS

Mandantenfähigkeit

Performance und Verfügbarkeit

Support

Page 54: IHK GfI
Page 55: IHK GfI

Query-API

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Page 56: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Problem: „Query-API“

für unsere Anforderungen unzureichend

Page 57: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Problem: „Query-API“ von Activiti

für unsere Anforderungen unzureichend

Page 58: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

taskService.createTaskQuery()

.taskOwner("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Page 59: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

taskService.createTaskQuery()

.taskOwner("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Page 60: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

taskService.createTaskQuery()

.taskOwner("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Page 61: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

taskService.createTaskQuery()

.taskOwner("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Lösung: Eigene Queries mittels MyBatis

Page 62: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

taskService.createTaskQuery()

.taskOwner("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Lösung: Eigene Queries mittels MyBatis

Page 63: IHK GfI

taskService.createTaskQuery()

.taskAssignee("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

taskService.createTaskQuery()

.taskOwner("101joerges")

.taskPriority(50)

.orderByDueDate()

.asc()

.list()

Lösung: Eigene Queries mittels MyBatis

Alternative Lösung: Native Queries per API

(allerdings beschränkt auf die Standard-Engine-Objekte)

Page 64: IHK GfI

BPMN 2.0

SaaS

Mandantenfähigkeit

Performance und Verfügbarkeit

Support

Page 65: IHK GfI
Page 66: IHK GfI
Page 67: IHK GfI
Page 68: IHK GfI

<userTask activiti:formKey="Dummy“ …>

<extensionElements>

<activiti:formProperty id="nichtLesbaresProperty"

name="Nicht lesbar" readable="false"/>

<activiti:formProperty id="nichtSchreibbaresProperty"

name="Nicht schreibbar" writable="false"/>

<activiti:formProperty id="schreibbaresProperty"

name="Schreibbar" writable="true"/>

<activiti:formProperty id="schreibbaresMussProperty"

name="Schreibbar und Muss" required="true" writable="true"/>

</extensionElements>

</userTask>

Page 69: IHK GfI

<userTask activiti:formKey="Dummy“ …>

<extensionElements>

<activiti:formProperty id="nichtLesbaresProperty"

name="Nicht lesbar" readable="false"/>

<activiti:formProperty id="nichtSchreibbaresProperty"

name="Nicht schreibbar" writable="false"/>

<activiti:formProperty id="schreibbaresProperty"

name="Schreibbar" writable="true"/>

<activiti:formProperty id="schreibbaresMussProperty"

name="Schreibbar und Muss" required="true" writable="true"/>

</extensionElements>

</userTask>

Quelle: http://www.activiti.org/userguide/

Page 70: IHK GfI

<userTask activiti:formKey="Dummy“ …>

<extensionElements>

<activiti:formProperty id="nichtLesbaresProperty"

name="Nicht lesbar" readable="false"/>

<activiti:formProperty id="nichtSchreibbaresProperty"

name="Nicht schreibbar" writable="false"/>

<activiti:formProperty id="schreibbaresProperty"

name="Schreibbar" writable="true"/>

<activiti:formProperty id="schreibbaresMussProperty"

name="Schreibbar und Muss" required="true" writable="true"/>

</extensionElements>

</userTask>

Page 71: IHK GfI

<userTask activiti:formKey="Dummy“ …>

<extensionElements>

<activiti:formProperty id="nichtLesbaresProperty"

name="Nicht lesbar" readable="false"/>

<activiti:formProperty id="nichtSchreibbaresProperty"

name="Nicht schreibbar" writable="false"/>

<activiti:formProperty id="schreibbaresProperty"

name="Schreibbar" writable="true"/>

<activiti:formProperty id="schreibbaresMussProperty"

name="Schreibbar und Muss" required="true" writable="true"/>

</extensionElements>

</userTask>

{

“actionId“ : “Bankverbindung“,

“actionName“ : “Bankverbindung pflegen…“,

“tabName“ : “Bankverbindung“

}

Page 72: IHK GfI

Weitere Stolpersteine: Prozess-Deployment

? Mehrere Versionen eines Prozesses gleichzeitig betreiben?

! Versionierung.

? Und bei Änderungen an (Java-)Services?

! Process Applications

72

Page 73: IHK GfI

Process Applications

73

• „Bündel“ von Prozessen

• Deployment als JAR,

WAR, EAR

• Hot Deployment

Page 74: IHK GfI

Process Applications

74

<process-archives>

<process-archive>

<name>BeitragGuthabenerstattungProcesses_101</name>

<configuration>

<process-engine>101</process-engine>

<undeployment delete="false" />

</configuration>

<process resourceName="processes/beitrag

-guthabenerstattung.bpmn" />

</process-archive>

</process-archives>

Page 75: IHK GfI

Was kommt noch?

Page 76: IHK GfI

Maskengenerierung

Form Properties

UI-Description DSL(s)

Page 77: IHK GfI

„Versionshölle“

Page 78: IHK GfI

Prozess-Management

Page 79: IHK GfI

Migration auf camunda BPM

79

Page 80: IHK GfI

Fazit

Page 81: IHK GfI

camunda BPM =

Process Engine

auf Enterprise-

Niveau

Page 82: IHK GfI

Erfolgsfaktor Open Source

Do it yourself! Frage die Community!

Contribute!

Page 83: IHK GfI

E-Mail: [email protected]

Website: www.ihk-gfi.de

Twitter: http://www.twitter.com/ihkgfi/

Facebook: http://www.facebook.com/ihkgfi

IHK Gesellschaft für

Informationsverarbeitung mbH

Emil-Figge-Str. 86

44227 Dortmund

Fon: 0231 / 9746 – 0

Fax: 0231 / 9746 – 111

E-Mail: [email protected]