Repository navigation
Deviations
Where this adapter does not deliver what VanillaBP's platform-wide contract promises. The list is longer than for
a BPMS-specific adapter, which is the point of this adapter: it is built mock-first to find out what the
Process-Engine-API would have to offer. Every entry has a full explanation in
GAPS.md, which also names what
would close it.
None of these gaps is a defect of an engine behind the API. They are properties of the API this adapter speaks.
The API has no tenants, no namespaces and no per-deployment scope, so VanillaBP's default name-clash-avoidance
mode by-adapter is rejected while deploying and you have to choose use-prefix or none, see
Configuration. use-prefix works without engine support, at the
price of the adapter rewriting the raw BPMN XML by element name, which covers the dialects it knows.
GAPS 15
The engine is handed to the adapter as application-provided beans without any per-instance connection configuration, so two adapter ids of this type would talk to the very same engine and the boot fails with a guiding message. A migration between two engines behind the Process-Engine-API is therefore not expressible. GAPS 14
The correlation commands are final and cannot carry a PREFLIGHT_CHECK, so the adapter cannot ask whether a
workflow exists and answers optimistically with a one-time guiding WARN. In a
migration setup a wrong "yes"
routes the operation to the wrong BPMS, so use this adapter as the only configured BPMS until the gap is closed.
The same final classes are the reason message correlation has no phase one at all and travels with the default
execution mode.
GAPS 11
Command failures are untyped, so a failing task or user-task probe cannot be told apart from an engine which is down and maps to "unknown". This matters in migration setups only, where the answer decides which BPMS serves the operation. GAPS 10
Timer, signal and conditional start events cannot be served: nothing in the API says "the engine just started this process", so VanillaBP could not build the workflow aggregate everything downstream is addressed by. A process carrying such a start event is rejected while deploying, with a message naming the element and the alternatives. GAPS 16
@WorkflowEnded methods are never called, because the API has no event, callback or subscription saying that an
instance ended. Deploying WARNs naming the BPMN process; the workflow itself runs normally, which is why this is
not a deployment failure.
GAPS 17
aggregateChanged throws in both phases, since the API modifies the payload of TASKS only and has no command whose
subject is a running process instance. Phase one already refuses, so the application sees the failure at its call
rather than in an outbox dispatch after the commit. Completing a task pushes the shared values, so a task the
workflow waits at is the way out.
GAPS 18
The API knows no version of a deployed process definition and no deployment order, so a
version
made of numbers, a range or a >/< boundary matches nothing and is reported once with a guiding message. An
exact tag (version = "release-2024") works where the engine supplies the task-meta key
processDefinitionVersionTag. Methods without the attribute serve every version, as everywhere else.
GAPS 19
@TaskEvent CANCELED never arrives, for service tasks and user tasks alike: the subscription's termination
callback carries the task ID and no aggregate reference, so the adapter cannot tell which workflow to notify.
Details
The adapter expects the engine to supply the BPMN process ID as the task meta entry bpmnProcessId. Without it a
task definition used by several processes of one workflow module cannot be routed, which a guiding error explains,
and the task definition then has to be unique across the module's processes. The mode use-prefix sidesteps this,
since it scopes task definitions by their process anyway.
GAPS 6
The API offers no message id, so a redelivered dispatch correlates again where the outbox retries after a crash. This concerns correlations carrying a correlation id, which VanillaBP deduplicates engine-side on other BPMS. Model catch events idempotently where a duplicate correlation would matter. GAPS 11
The API has neither a repository nor a query/history API, so the viewer is answered from what THIS application
version deployed: getProcessDefinitions reports the deployed process versioned by its deployment key,
getBpmnXml the deployed resource byte for byte, and getWorkflowHistory the definition plus a null element
history, the SPI's documented "not supported by the underlying BPMS". Three consequences: call activities cannot be
drilled into, usedByElements is never filled, and a workflow running on a definition deployed by a PREVIOUS
application version is served with the currently deployed model.
GAPS 12
and GAPS 13
