Activiti Cloud Runtime Bundle

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.

REST APIs (HAL)

Runtime Bundles expose a REST API with the following user (ACTIVITI_USER role) endpoints:

Also the following admin (ACTIVITI_ADMIN role) endpoints:

(Async) Command Based Interactions

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:

Message Enabled

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)

Not covered Yet

  • ActivityCompensateEvent

  • ProcessCompletedErrorEvent

Runtime Bundle Data Types

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:

Requirements

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

Security

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:

activiti.cloud.security.user.testuser.runtime-bundle.policy.read=process_pool1,ProcessWithVariables
activiti.cloud.security.group.hr.runtime-bundle.policy.write=process_pool1,ProcessWithVariables,SimpleProcess,ProcessWithVariables2,ProcessWithBoundarySignal

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=*

Source Code & Docker Image

Last updated