Zurück zum Blog

Prozessmodellierung mit BPMN: vom Diagramm zum laufenden Prozess

Charalampos Moutafidis
Veröffentlicht am
Stand:
27 Min. Lesezeit
Tags:ProzessmodellierungBPMNCamunda 7Prozess-Engine

Prozessmodellierung mit BPMN endet nicht mit dem Diagramm, denn das Diagramm wird nie ausgeführt. Ausgeführt wird eine Graphstruktur, die beim Deployment aus dem XML gebaut wird: „The XML files are parsed and transformed into a process definition graph structure. This graph structure is executed by the process engine.“ (Camunda-7.24-Handbuch, Process Engine Concepts) Zwischen dem Bild, das im Workshop abgenommen wird, und dem, was in Produktion läuft, liegt also eine Übersetzung. Dort entstehen die Abweichungen, um die es in diesem Artikel geht.

Dass ein BPMN-Modell nicht schon deshalb läuft, weil es gültiges BPMN ist, steht in Was ist BPMN?. Hier geht es darum, woran es scheitert. Es fehlt eine Transaktionsgrenze, eine Bedingung hängt an einer Kante, an der sie niemand auswertet, ein Standardpfad fehlt, oder es fehlt eine Pflichtangabe, die nirgends im Bild steht. Alle vier Fälle stehen unten, jeweils in Camundas eigenem Wortlaut.

Kurz beantwortet

Warum lehnt Camunda 7.24 ein gültiges BPMN-Modell beim Deployment ab?
Camunda 7.24 verweigert das Deployment, wenn im Modell die Angabe historyTimeToLive fehlt, sofern die Prüfung nicht ausdrücklich über die Engine-Konfiguration abgeschaltet ist. Ein Modell kann also vollständig gültiges BPMN sein und trotzdem abgelehnt werden. Jede Ausführung verlangt darüber hinaus Angaben, die die Notation nicht kennt: was hinter einer Aufgabe steht, wo eine Transaktion endet und was in einer Bedingung ausgewertet wird.
Was ist ein Wartezustand in BPMN?
Ein Wartezustand ist der Punkt, an dem die Engine den Stand des Prozesses in die Datenbank schreibt und darauf wartet, erneut angestoßen zu werden. Das Camunda-7.24-Handbuch führt unter „The following BPMN elements are always wait states“ fünf Einträge im Text auf, darunter Message Event, Timer Event und Signal Event; zwei weitere, Receive Task und User Task, stehen dort nur als Beschriftung in einer eingebetteten SVG-Grafik. Alles zwischen zwei Wartezuständen gehört laut derselben Seite zu einer einzigen Transaktion.
Warum läuft Ihr paralleles Gateway nicht wirklich parallel?
Ein paralleles Gateway teilt den Prozess in mehrere Pfade, führt sie aber nicht in eigenen Threads aus: Die Engine bleibt ohne asynchrone Fortsetzung im Thread des Aufrufers. Camunda schreibt zu Version 7.24, parallele Pfade würden nicht im Sinne von Java-Threads parallel ausgeführt, sondern nacheinander. Nebenläufigkeit setzt die Attribute camunda:asyncBefore und camunda:asyncAfter voraus, und die stehen im XML, nicht im Bild. Auch dann laufen zwei Zweige derselben Instanz im Normalfall nacheinander, weil asynchrone Fortsetzungen laut Camunda voreingestellt exklusiv sind.
Welcher Pfad wird genommen, und warum wird Ihre Bedingung ignoriert?
Am exklusiven Gateway gewinnt die Kante, die im XML zuerst definiert ist, nicht die im Bild obere; trifft keine Bedingung zu und fehlt der Standardpfad, wirft die Engine laut Camunda zur Laufzeit eine Ausnahme. Am parallelen Gateway dagegen werden Bedingungen laut Camunda schlicht ignoriert, und auf einem Standardpfad werden sie immer ignoriert: Das Modell bleibt gültig, die Bedingung wirkungslos, und es gibt keine Fehlermeldung.
Was ist der Unterschied zwischen einem Token und einer Datenbanktransaktion?
Das Token ist ein Bild für die Execution, also für einen aktiven Pfad im Prozess. Die Transaktion ist die technische Klammer; alles zwischen zwei Wartezuständen gehört laut Camunda 7.24 zu einer einzigen Transaktion. Camunda warnt ausdrücklich davor, beides zu verwechseln: Der BPMN-Transaktions-Subprozess ist laut Camunda 7.24 kein Mittel, um technische Transaktionen abzugrenzen.

Was ändert sich an Ihrer Prozessmodellierung, wenn eine Engine das Modell ausführt?

Ausgeführt wird nicht das Bild, sondern der Graph aus dem XML. Was nicht im XML steht, existiert für die Engine nicht, und was im XML steht, aber nicht gezeichnet wird, wirkt trotzdem.

Die nächste Überraschung betrifft die Bauform der Engine selbst: „The process engine is a piece of passive Java code which works in the Thread of the client.“ (Camunda 7.24, Transactions in Processes) Von sich aus treibt die Engine kein Diagramm voran. Sie leiht sich den Thread desjenigen, der sie aufruft, arbeitet den Prozess ab, bis auf jedem aktiven Pfad ein Wartezustand erreicht ist, und gibt die Kontrolle zurück. Eigene Threads hat nur der Job Executor, und was der tut, steht weiter unten.

Das Token ist dabei ein Bild und kein Objekt. Die Seite zu den Engine-Konzepten schreibt: „While an execution can be imagined as a token moving through the process, an activity instance represents an individual instance of an activity (task, subprocess, …).“ Was existiert, ist die Execution, ein Datensatz, und pro aktiven Pfad legt die Engine einen an.

Wo bleibt ein Prozess stehen, und warum genau dort?

An einem Wartezustand. Ob ein Element einer ist, hängt vom Elementtyp ab und nicht von der Modellierung. Camunda beschreibt ihn als Aufgabe, die später erledigt wird; die Engine schreibt dabei den aktuellen Stand der Execution in die Datenbank und wartet darauf, erneut angestoßen zu werden: „persists the current execution to the database and waits to be triggered again“. Diese Punkte sind gleichzeitig die Transaktionsgrenzen: „We talked about wait states as transaction boundaries where the process state is stored to the database, the thread returns to the client and the transaction is committed.“ (Transactions in Processes) Zustand speichern, Thread zurückgeben, Transaktion bestätigen, an einer Stelle, die im Diagramm wie jede andere aussieht.

Die BPMN-Elemente, die das Camunda-7.24-Handbuch unter „The following BPMN elements are always wait states“ aufführt: fünf im Text, zwei nur als Beschriftung in einer eingebetteten SVG-Grafik. Quelle: Camunda-7.24-Handbuch, Transactions in Processes, abgerufen 2. September 2026.
ElementWie es auf der Seite stehtWas es im Modell bedeutet
Receive Tasknur als SVG-BeschriftungDer Prozess steht, bis eine Nachricht eintrifft
User Tasknur als SVG-BeschriftungDer Prozess steht, bis ein Mensch die Aufgabe abschließt
Message Eventals Text genanntDer Prozess steht, bis die Nachricht korreliert wird
Timer Eventals Text genanntDer Prozess steht, bis der Job Executor den Timer ausführt
Signal Eventals Text genanntDer Prozess steht, bis das Signal ausgelöst wird
Event Based Gatewayals Text genanntDer Prozess steht, bis eines der abonnierten Ereignisse eintritt
External Taskals Text genannt, als Sonderform des Service TaskDer Prozess steht, bis ein fremder Worker die Arbeit abholt und meldet
Die BPMN-Elemente, die das Camunda-7.24-Handbuch unter „The following BPMN elements are always wait states“ aufführt: fünf im Text, zwei nur als Beschriftung in einer eingebetteten SVG-Grafik. Quelle: Camunda-7.24-Handbuch, Transactions in Processes, abgerufen 2. September 2026.

Die zweite Spalte ist kein Detail für Korrekturleser. Receive Task und User Task stehen dort nur als Beschriftung in einer eingebetteten SVG-Grafik. Wer die Seite in eine Leseansicht überführt oder ihren Text ohne die Grafiken übernimmt, verliert genau diese beiden Einträge.

Warum liegt eine Transaktionsgrenze dort, wo im Bild nichts steht?

Weil man sie dorthin setzen kann und sie unsichtbar bleibt. Der Übergang von einem Wartezustand zum nächsten ist laut der Camunda-Seite zu Transaktionen immer Teil einer einzigen Transaktion: „The transition from one such stable state to another stable state is always part of a single transaction, meaning that it succeeds as a whole or is rolled back on any kind of exception occuring during its execution.“ Der Tippfehler „occuring“ steht so in der Quelle; wir zitieren ihn unverändert, damit der Satz dort wiederzufinden ist.

Dieselbe Seite ergänzt: „Keep in mind that Asynchronous Continuations can add transaction boundaries to other tasks as well.“ Die Schalter dafür heißen camunda:asyncBefore und camunda:asyncAfter und stehen als Attribute am Element im XML, etwa camunda:asyncBefore="true". Camunda führt sie als Erweiterungsattribute in einem eigenen Namensraum: „The following attributes are extension attributes for the camunda namespace http://camunda.org/schema/1.0/bpmn.“ (Extension Attributes) Zwei Modelle können im Bild identisch aussehen und sich zur Laufzeit vollständig anders verhalten. Die Transaktionsseite nennt diese Attribute selbst das vorgesehene Mittel: „To control the scope of transactions, explicit save points can be added before and after activities using Asynchronous Continuations.“

Vier Folgen davon stehen auf derselben Transaktionsseite und sind im Diagramm nicht abzulesen:

  • Ein paralleles Gateway macht ohne asynchrone Fortsetzung nichts parallel. „Parallel process paths are not executed in parallel in terms of Java Threads, the different paths are executed sequentially, since we only have and use one Thread.“
  • Ein Timer innerhalb derselben Transaktion feuert nie. „Timers cannot fire before the transaction is committed to the database.“
  • Ein Fehler beim Start hinterlässt keine Instanz. „If an exception occurs when calling startProcessInstanceByKey the process instance will not be saved to the database at all.“ Sie suchen im Cockpit nach etwas, das nie existiert hat.
  • Ein Rollback nimmt nur Transaktionales zurück. „Non-transactional work like creation of files or the effects of invoking non-transactional web services will not be undone. This can end in inconsistent state.“

Der vierte Punkt berührt die Architektur: Kann zwischen dem Aufruf eines Fremdsystems und dem nächsten Wartezustand noch etwas schiefgehen, wird der Aufruf im Fehlerfall wiederholt, und das Fremdsystem sieht ihn zweimal.

Vor einer Verwechslung warnt Camunda ausdrücklich, und sie betrifft genau das Symbol, das wie eine Transaktion aussieht: „It is important not to confuse the BPMN transaction subprocess with technical (ACID) transactions. The BPMN transaction subprocess is not a way to scope technical transactions.“ (Transaction Subprocess) Der Rahmen im Bild ist eine fachliche Klammer; laut derselben Seite umspannt eine BPMN-Transaktion typischerweise mehrere technische. Die technische Klammer setzen Sie mit den asynchronen Fortsetzungen aus dem Absatz darüber.

Was passiert, während der Prozess wartet?

Eine Datenbankzeile wartet mit. Jeder Timer und jede als asynchron markierte Aufgabe erzeugt laut Camunda einen Job, und dieser Job steht in der Datenbank: „Jobs are persisted to the database, in the ACT_RU_JOB table.“ (Camunda 7.24, The Job Executor) Abgeholt werden diese Zeilen vom Job Executor, und der ist bei einer eingebetteten Engine standardmäßig aus: „When using an embedded process engine, by default, the Job Executor is not activated when the process engine boots.“ Die Timer-Referenz ergänzt: „Timers are only fired when the Job Executor is enabled.“ Ein Modell mit einer Eskalationsfrist lässt sich damit fehlerfrei deployen und eskaliert trotzdem nie; einen Hinweis darauf nennt keine der gelesenen Camunda-Seiten.

Läuft der Job Executor, ist er trotzdem keine Uhr. Ein Fälligkeitsdatum ist laut der Job-Executor-Seite „not a real-time boundary by which the job is guaranteed to be executed“, und eine Backoff-Strategie verdoppelt die Wartezeit, wenn nichts zu tun ist; die Voreinstellung der maximalen Wartezeit gibt Camunda mit 60 Sekunden an. Wer eine Frist auf die Minute genau modelliert, modelliert eine Genauigkeit, die die Engine nicht zusagt.

Auch das Verhalten im Fehlerfall ist voreingestellt und steht nicht im Modell. Zu den Wiederholungsversuchen schreibt die Job-Executor-Seite: „a job will be retried a number of times (by default 2 so that the job is tried three times in total)“, und zum konfigurierten Intervall: „Regardless of the values, the interval is always (at least) 5 minutes.“ Sind die Versuche aufgebraucht, entsteht ein Incident vom Typ failedJob: „The incident indicates that the corresponding execution is stuck and will not continue automatically. Administrative action is necessary.“ (Incidents) Diese Zahlen sind Camundas Angaben über das eigene Produkt und keine Aussage über einen Aufwand. Und laut der Job-Executor-Seite sind asynchrone Fortsetzungen und Timer voreingestellt exklusiv: „All asynchronous continuations and timer events are thus exclusive by default.“ Zwei Zweige derselben Instanz laufen damit im Normalfall nacheinander. Camunda nennt dieses Verhalten auf derselben Seite ausdrücklich eine Heuristik: Sie greift nur für die Jobs, die beim Nachschlagen bereits vorliegen, und ein danach entstehender Job kann „be processed by another job execution thread in parallel“.

Welche Konstrukte führt die Engine aus, und welche zeichnet sie nur?

Camunda führt für Version 7.24 eine eigene Übersicht über die Abdeckung der BPMN-2.0-Elemente. Sie ist rein farblich, und der einzige Satz, der die Einfärbung erklärt, lautet: „The elements marked in orange are supported.“ (BPMN 2.0 Implementation Reference) Im Fließtext nennt die Seite die Rubriken und, in der Ereignistabelle, die Zeilenbeschriftungen, etwa None, Message, Timer, Signal und Error; die Namen der übrigen Symbole stehen dort nur als Beschriftung in eingebetteten SVG-Grafiken. Welche Elemente unterstützt sind, sagt allein die orange Einfärbung, und die überlebt keine Textkopie.

Sieben Stellen, an denen Bild und Ausführung auseinandergehen. Alle Angaben aus dem Camunda-7.24-Handbuch unter docs.camunda.org/manual/7.24, abgerufen 2. September 2026.
Was im Modell stehtWas die Engine daraus machtBelegstelle
Manual Task„For the engine, a manual task is handled as a pass-through activity, automatically continuing the process when the process execution arrives at it.“Referenz, Manual Task
Receive TaskWartezustand: „When the process execution arrives at a Receive Task, the process state is committed to the persistence storage.“Referenz, Receive Task
Service TaskZwei Ausführungsarten, im Bild ununterscheidbar: interner Delegationscode oder das External-Task-Muster, bei dem ein fremder Worker die Arbeit abholtHandbuch, External Tasks
Bedingung an einer Kante am parallelen Gateway„If conditions are defined on the sequence flow connected with the parallel gateway, they are simply ignored.“Referenz, Parallel Gateway
Bedingung auf dem Standardpfad„Conditions on a default sequence flow are always ignored.“Referenz, Sequence Flow
Kante hinter einem ereignisbasierten Gateway„These sequence flows are never actually ‚executed‘.“ Sie legen nur fest, welche Ereignisse abonniert werdenReferenz, Event-based Gateway
Mehrfachinstanz an einer Aktivität„The number of instances are calculated once, when entering the activity.“ Eine später wachsende Sammlung ändert nichts mehrReferenz, Task Markers
Sieben Stellen, an denen Bild und Ausführung auseinandergehen. Alle Angaben aus dem Camunda-7.24-Handbuch unter docs.camunda.org/manual/7.24, abgerufen 2. September 2026.

Zwei Zeilen verdienen einen Zusatz. Beim Service Task ist nur eine der beiden Ausführungsarten ein Wartezustand: Der External Task wartet laut Transaktionsseite, der interne Delegate läuft durch, und im Bild ist beides dasselbe Rechteck. Hinter dem ereignisbasierten Gateway darf laut Camunda nur ein intermediateCatchEvent stehen; zu Receive Tasks an dieser Stelle schreibt Camunda: „(Receive Tasks after an event-based Gateway are not supported by the engine yet.)“ (Event-based Gateway) Das Wort „yet“ steht so in der Quelle; wir leiten daraus keine Zusage für die Zukunft ab.

Und es gibt Verhalten ohne Ort im Bild: „Execution Listeners can be attached to any event within the normal token flow, e.g., starting a process instance or entering an activity.“ (Delegation Code) Ein Diagramm, das Sie abnehmen, sagt Ihnen nicht, wie viel Code beim Betreten einer Aktivität ausgeführt wird.

Warum wählt die Engine einen anderen Pfad als den, den Sie im Bild sehen?

Weil sie eine andere Beschriftung liest als Sie. „Gateways control token flow in a process“, schreibt Camunda in der Gateway-Übersicht, und der entscheidende Hinweis steht bei den exklusiven Gateways: „Note that the name of the flow (used in the diagram, meant for the human being) might be different than the formal expression (used in the engine).“ (Exclusive Gateway) Der Name am Pfeil ist für Menschen, die Bedingung ist für die Engine, und niemand prüft, ob beide dasselbe sagen. Ein Pfeil, der im Bild „Betrag über 10 000“ heißt, kann eine Bedingung tragen, die etwas anderes auswertet, und das Modell bleibt gültig.

Zwei weitere Regeln derselben Seite entscheiden über den Pfad. Treffen mehrere Bedingungen zu, gewinnt nicht die im Bild obere: „In case multiple sequence flow have a condition that evaluates to ‘true’, the first one defined in the XML is exclusively selected for continuing the process.“ Und trifft keine zu: „If no sequence flow can be selected (no condition evaluates to ‘true’) this will result in a runtime exception, unless you have a default flow defined.“ Ein Standardpfad entscheidet deshalb darüber, ob der Prozess weiterläuft oder mit einer Ausnahme im Log endet. In der Referenz zum inklusiven Gateway stehen derselbe Fehlerfall („If no condition evaluates to true, an exception is thrown.“) und dasselbe Gegenmittel („This can be prevented by specifying a default outgoing sequence flow.“), während die Zusammenführung dort nur auf die Kanten wartet, auf denen tatsächlich etwas unterwegs ist.

In der Referenz zum parallelen Gateway steht unter der Überschrift „Limitation“ eine Eigenart, die Camunda ausdrücklich der eigenen Umsetzung zuschreibt („in Camunda’s implementation of the parallel gateway“). Die Zusammenführung zählt Token, nicht Kanten: „The number of arrived tokens is equal to the number of incoming sequence flows. It is not required that a token arrives on every incoming flow.“ Im Klartext heißt das: Kommen zwei Token über dieselbe Kante an, löst die Zusammenführung aus, obwohl die zweite Kante leer geblieben ist.

Einen verwandten Fall spielt Camunda in der eigenen Modellierungsreferenz am Beispiel eines Mittagessens durch, dort allerdings ohne parallele Zusammenführung: mit AND aufgeteilt, ohne AND-Zusammenführung direkt an eine XOR-Zusammenführung geführt, und der nachfolgende Schritt läuft zweimal. „Its token passes through the XOR merge and ‚eat meal‘ executes again!“ (camunda.com/bpmn/reference) Dazu kommt eine Falle aus der Referenz zum Sequence Flow, die gar kein Gateway braucht: „This means that the default nature of BPMN 2.0 is to be parallel: two outgoing sequence flows will create two separate, parallel paths of execution.“ Zwei Pfeile aus einem Kästchen sind kein Zeichenfehler, sondern zwei Pfade.

Was steht in einer Bedingung, und wo läuft sie?

Am Pfeil steht ein Text für Menschen; ausgewertet wird ein Ausdruck oder ein Skript: „Currently, conditionalExpressions can be used with UEL and scripts. The expression or script used should resolve to a boolean value, otherwise an exception is thrown while evaluating the condition.“ (Sequence Flow) Ein Ausdruck, der versehentlich etwas anderes als einen booleschen Wert liefert, verzweigt damit nicht falsch, er bricht ab.

Wer darin schreibt, was er aus Java kennt, stößt auf ausdrückliche Grenzen. Camunda listet vier davon unter „Note, compared to EL 4.0 this JUEL implementation has the following limitations:“, darunter Collections-Literale sowie statische Felder, Funktionen und Enums, und außerdem: „Lambda expressions (e.g., inline functions ${((x,y)->x+y)(3,4)}) are NOT supported.“ (Unified Expression Language)

Die zweite Ausdruckssprache ist FEEL, und der Wechsel dorthin ist kein reiner Syntaxwechsel: „In contrast to the Unified Expression Language FEEL does not support Expression language as delegation code and does not provide access to beans and internal context variables.“ Ganz oben auf derselben Seite steht, in einem Warnkasten unter der Überschrift „FEEL Support Limitation“, eine Grenze, die mit dem Modell nichts zu tun hat: „Please note that the WildFly and JBoss application servers do not support FEEL outside of DMN execution in Camunda 7.“ (Friendly Enough Expression Language) Dieselbe Bedingung läuft damit auf einem Applikationsserver und auf einem anderen nicht.

Was hindert ein gültiges Modell daran, überhaupt zu starten?

Eine einzige Angabe, die im Diagramm nicht vorkommt, genügt: „The history time to live is mandatory, any deployment or re-deployment of any model resource (BPMN, DMN, CMMN) that contains a historyTimeToLive of null will be prevented. Unless explicitly disabled via process engine configuration.“ (History cleanup) Ein vollständig gültiges BPMN-Modell wird also beim Deployment abgelehnt, solange diese Prüfung nicht ausdrücklich abgeschaltet ist.

Genau diese Angabe ist auch die einzige, die Camundas eigenes Prüf-Plugin für Camunda 7 kontrolliert. Das Repository camunda/bpmnlint-plugin-camunda-compat trägt auf api.github.com die Beschreibung „A bpmnlint plug-in for Camunda BPMN compatibility.“ Es ist nicht archiviert, steht unter der MIT-Lizenz und wurde zuletzt am 28. August 2026 bewegt; Beschreibung, Archivstatus, Lizenz und Änderungszeitpunkt wurden am 2. September 2026 über die GitHub-API geprüft. In der Konfiguration camunda-platform-7-24 in index.js steht genau eine Regel, „history-time-to-live“, und im Ordner rules/camunda-platform liegt genau eine Datei. Die übrigen Regeldateien liegen unter rules/camunda-cloud und gehören zu den camunda-cloud-Konfigurationen, also zur Camunda-8-Linie.

Alles andere in diesem Artikel prüft das Plugin für Camunda 7 nicht: keine Regel zu fehlenden Standardpfaden, zu Bedingungen an den falschen Kanten, zu Wartezuständen oder zu asynchronen Fortsetzungen. Und unter den Seiten, die wir für diesen Artikel gelesen haben, zählt keine auf, was ein gültiges Modell zusätzlich braucht; die Angaben verteilen sich über Referenz, Handbuch, Erweiterungsattribute und History-Konfiguration.

Was heißt das für Ihre Prozessmodellierung?

Sechs Punkte, jeder aus einem Zitat oben abgeleitet und keiner darüber hinaus.

  1. Den Standardpfad auch am inklusiven Gateway setzen, nicht nur am exklusiven. Trifft keine Bedingung zu, ist das laut Camunda an beiden eine Ausnahme zur Laufzeit.
  2. Bedingungen dort lesen, wo sie ausgewertet werden. Maßgeblich sind die Reihenfolge im XML und der Ausdruck, nicht die Reihenfolge im Bild und nicht die Beschriftung.
  3. Keine Bedingung an eine Kante hängen, an der sie niemand auswertet. Am parallelen Gateway und auf dem Standardpfad bleibt sie wirkungslos, und niemand meldet das.
  4. Vor jedem Aufruf eines Fremdsystems entscheiden, wo die Transaktion endet. Ein Rollback nimmt den Aufruf nicht zurück.
  5. Im eingebetteten Betrieb prüfen, ob der Job Executor eingeschaltet ist, bevor ein Timer ins Modell kommt. Sonst ist die Frist gezeichnet und feuert nie.
  6. historyTimeToLive setzen, bevor das Modell zum Deployment geht. Es ist die einzige Regel, die Camundas Prüf-Plugin für Camunda 7 kennt.

Was hier fehlt, fehlt mit Absicht. Keine der gelesenen Camunda-Seiten nennt eine Faustregel dafür, wie viele asynchrone Fortsetzungen ein Modell haben sollte, und keine beziffert die Wirkung: kein Durchsatz, keine Latenz, nur die qualitative Aussage der Transaktionsseite „The execution is plain Java computing which is very efficient in terms of performance.“ Und wie häufig diese Fehler sind, sagen wir nicht; dazu gibt es keine Statistik, und wir zählen keine fremden Modelle.

Wo Ihr Modell zur Laufzeit anders arbeitet, als das Bild zeigt

Wir lesen Ihre BPMN-Modelle zusammen mit dem XML und sagen Ihnen, was die Engine daraus macht, bevor es in Produktion auffällt.

Zur BPMN-Prozessautomatisierung

Mit welchem Symbolvorrat Sie in der Praxis auskommen, steht in BPMN 2.0: die Elemente, die Sie tatsächlich brauchen. Der Artikel beschränkt sich auf das, was eine Engine ausführt.

Quellen

  1. Camunda 7.24, Transactions in Processes (Wartezustände, Transaktionsgrenzen, asynchrone Fortsetzungen, Rollback) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/transactions-in-processes/
  2. Camunda 7.24, The Job Executor (Jobs, ACT_RU_JOB, Backoff, Wiederholungen, Exklusivität) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/the-job-executor/
  3. Camunda 7.24, Process Engine Concepts (Graphstruktur, Execution und Token) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/process-engine-concepts/
  4. Camunda 7.24, Incidents (failedJob) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/incidents/
  5. Camunda 7.24, External Tasks (zwei Ausführungsarten des Service Task) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/external-tasks/
  6. Camunda 7.24, Delegation Code (Execution Listener) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/delegation-code/
  7. Camunda 7.24, Unified Expression Language (Einschränkungen gegenüber EL 4.0) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/expression-language/unified-expression-language/
  8. Camunda 7.24, Friendly Enough Expression Language (FEEL, WildFly- und JBoss-Einschränkung) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/expression-language/friendly-enough-expression-language/
  9. Camunda 7.24, History cleanup (historyTimeToLive als Pflichtangabe) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/user-guide/process-engine/history/history-cleanup/
  10. Camunda 7.24, BPMN 2.0 Implementation Reference (Abdeckungsübersicht, Rubriken und Ereignistabelle) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/
  11. Camunda 7.24, Gateways (Tokenfluss) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/gateways/
  12. Camunda 7.24, Exclusive Gateway (XML-Reihenfolge, Standardpfad, Name gegen Ausdruck) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/gateways/exclusive-gateway/
  13. Camunda 7.24, Parallel Gateway (Abschnitt Limitation: Tokenzählung, ignorierte Bedingungen) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/gateways/parallel-gateway/
  14. Camunda 7.24, Inclusive Gateway (Zusammenführung, Ausnahme ohne zutreffende Bedingung) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/gateways/inclusive-gateway/
  15. Camunda 7.24, Event-based Gateway (nicht ausgeführte Kanten, Receive Task) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/gateways/event-based-gateway/
  16. Camunda 7.24, Sequence Flow (Bedingungen, Standardpfad, zwei ausgehende Kanten) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/gateways/sequence-flow/
  17. Camunda 7.24, Manual Task (Pass-through) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/tasks/manual-task/
  18. Camunda 7.24, Receive Task (Wartezustand) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/tasks/receive-task/
  19. Camunda 7.24, Task Markers (Mehrfachinstanz) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/tasks/task-markers/
  20. Camunda 7.24, Timer Events (Timer nur bei aktivem Job Executor) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/events/timer-events/
  21. Camunda 7.24, Transaction Subprocess (BPMN-Transaktion gegen technische Transaktion) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/subprocesses/transaction-subprocess/
  22. Camunda 7.24, Custom Extensions: Extension Attributes (camunda-Namensraum) (abgerufen 2. September 2026): https://docs.camunda.org/manual/7.24/reference/bpmn20/custom-extensions/extension-attributes/
  23. Camunda, BPMN-2.0-Modellierungsreferenz (AND-Split ohne AND-Merge vor einer XOR-Zusammenführung) (abgerufen 2. September 2026): https://camunda.com/bpmn/reference/
  24. GitHub-API, Repository camunda/bpmnlint-plugin-camunda-compat (Beschreibung, MIT-Lizenz, nicht archiviert, pushed_at 28. August 2026) (abgerufen 2. September 2026): https://api.github.com/repos/camunda/bpmnlint-plugin-camunda-compat
  25. GitHub, camunda/bpmnlint-plugin-camunda-compat, index.js (Konfiguration camunda-platform-7-24 mit genau einer Regel) (abgerufen 2. September 2026): https://github.com/camunda/bpmnlint-plugin-camunda-compat/blob/main/index.js
  26. GitHub, camunda/bpmnlint-plugin-camunda-compat, Ordner rules/camunda-platform (genau eine Datei) (abgerufen 2. September 2026): https://github.com/camunda/bpmnlint-plugin-camunda-compat/tree/main/rules/camunda-platform