Activiti Cloud Runtime Bundle
Last updated
Last updated
Runtime Bundle is the Cloud version of the Process Engine. If you ever exposed Activiti (the process engine) as a service, you were defining a Runtime Bundle.
But there are some extra things that you need to know about Runtime Bundles:
Runtime Bundles in the context of Activiti Cloud represent a stateless instance of the process engine which is in charge of executing an immutable set of process definitions.
You cannot deploy new process definitions to a Runtime Bundle, instead you will create a new immutable version of your Runtime Bundle if you want to update your process definitions.
Runtime Bundles expose a (Sync) REST and (Async) Message Based API to interact with them.
Runtime Bundles emit events (in a fire & forget fashion) using a set of implementations of the internal ActivitiEventListener interface. (Listen to the internal Process Engine events and transform them into messages containing all the events generated inside a transaction )
Runtime Bundles, by default when executing Service Tasks (BPMN), will emit Integration Events to perform System to System integration. These Integration Events will be picked up by Activiti Cloud Connectors to perform system to system integrations.
Runtime Bundles expose a REST API with the following user (ACTIVITI_USER role) endpoints:
Also the following admin (ACTIVITI_ADMIN role) endpoints:
Commands are defined as Payloads in the new Java Core API layer. These Payloads contains information to execute different actions implemented inside the process engine and they will return a Result if the execution generated data. When these Commands are executed by the Message Endpoints the results will be sent to a different queue.
These commands are processed by the CommandEndpoint which delegate the operation to more specific Executors for each Command
Commands Payloads (implements Payload)
Process Related Payloads:
id
processDefinitionId
processDefinitionKey
processInstanceName
businessKey
variables [Map]
id
processDefinitionId
id
processDefinitionId
id
name
variables
id
processInstanceId
variables [Map]
localOnly
id
processInstanceId
id
taskId
assignee
id
taskId
id
taskId
variables [Map]
id
taskId
variables [Map]
id
taskId
id
taskId
taskName
description
dueDate
priority
assignee
By design a Runtime Bundle is enabled to consume and produce (async) messages. This is achieved by using Spring Cloud Streams to consume Commands operations or emit Events representing the internal process engine operations.
Notice that a Runtime Bundle, by design, doesn't have WebSockets/Push Notifications built in.
Events are emitted by the process engine using a message queue so external components can react to them. All these events implements the org.activiti.services.core.model.events.ProcessEngineEvent interface.
The events related with BPMN Activities can be found in the Java Core API activiti-api-process-model module.
We have shared events for Variables related operations and can be found here (also as part of the Java Core API activiti-api-model-shared)
The events related with Process Runtime can be found here (also as part of the Java Core API activiti-api-process-runtime)
The events related with Tasks can be found here (also as part of the Java Core API activiti-api-task-runtime)
ActivityCompensateEvent
ProcessCompletedErrorEvent
Runtime Bundles work and expose the following data types which are based on the new Java Core API model packages:
And the Cloud Extension types:
Runtime Bundles then require the following list of infrastructural services:
SSO / IDM service for handling Security and User/Groups resolutions
Message Broker to emit and consume messages
Database to store the state of the process instances and tasks
In addition to authorization at endpoint-level provided through an external authorization system (and in the case of Keycloak configured in a properties file), individual process definitions (and implicitly process instances) within a runtime bundle can have ACLs applied. These are applied via a properties file using a format such as:
Or environment variables can be used such as:
ACTIVITI_CLOUD_SECURITY_USER_HRUSER_RBMYAPP_POLICY_WRITE=SimpleProcess
ACTIVITI_CLOUD_SECURITY_GROUP_HR_RBMYAPP_POLICY_WRITE=SimpleProcess
ACTIVITI_CLOUD_SECURITY_GROUP_TESTGROUP_RBMYAPP_POLICY_WRITE=*
Runtime Bundle -> Source Code Here you can find a Runtime Bundle example that you can use as the starting point to build your domain specific Runtime Bundles. This project was built using the Runtime Bundle Starter that you can find here.