Releases: Activiti/activiti-cloud-application
7.1.0-M16
description: Release 7.1.0-M16
7.1.0-M16
You can consume all the Activiti artifacts for this release from Alfresco Nexus:
<repositories>
<repository>
<id>activiti-releases</id>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
</repository>
</repositories>
Activiti Cloud:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-dependencies</artifactId>
<version>7.1.0-M16</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
Activiti Core
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0-M16</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
In the milestone 7.1.0-M16 you will find the following main fixes & features:
-
Support the ability to configure topics on shared message broker instance: Add the possibility to customize destination names used by Activiti Cloud. See the next section for more details.
-
Update Helm charts to use readiness and liveness probes for health checks.
-
Configure Swagger UI to use implicit flow auth: authentication was integrated into the Swagger UI so that now it's possible to call the APIs directly from the Swagger UI
-
Add custom JUEL functions to resolve current date and current date+time
For the complete list of new features and bug fixes, please refer to https://github.com/Activiti/Activiti/milestone/40?closed=1.
Changes from previous milestones
- Added support ability to configure all message topics destinations used by AAE applications.
This PR provides configurations to customize destination names for static, i.e.engineEvents
and dynamic destinations used by cloud connectors.
Given the following channel binding properties in the application environment context:
spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents
When the following configuration property is also present in the application environment context:
# to override engineEvents destination name
activiti.cloud.messaging.destinations.engineEvents.name=engine-events
Then the result destination for all three bindings with matching engineEvents
key will be configured to
spring.cloud.stream.bindings.auditProducer.destination=engine-events
spring.cloud.stream.bindings.auditConsumer.destination=engine-events
spring.cloud.stream.bindings.queryConsumer.destination=engine-events
- All destinations support prefix configuration. Destination prefix can be configured using
activiti.cloud.messaging.destination-prefix
property.
Given the following channel binding properties in the application environment context:
spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents
When the following configuration property is also present in the application environment context:
# to set the prefix and separator
activiti.cloud.messaging.destination-prefix=namespace
Then the result destination for all three bindings with matching engineEvents
key will be configured to
spring.cloud.stream.bindings.auditProducer.destination=namespace_engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=namespace_engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=namespace_engineEvents
- Destinations support destination separator configuration. Destination separator can be configured using
activiti.cloud.messaging.destination-separator
property.
Given the following channel binding properties in the application environment context:
# to set the prefix
activiti.cloud.messaging.destination-prefix=namespace
spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents
When the following configuration property is also present in the application environment context:
# to set the separator
activiti.cloud.messaging.destination-separator=.
Then the result destination for all three bindings with matching engineEvents
key will be configured to
spring.cloud.stream.bindings.auditProducer.destination=namespace.engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=namespace.engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=namespace.engineEvents
- Destination names can be customized via messaging configuration properties to use lower case via transformer configuration properties.
Given the following channel binding properties in the application environment context:
spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents
When the following configuration property is also present in the application environment context:
# to transform to lower case
activiti.cloud.messaging.destination-transformers-enabled=true
activiti.cloud.messaging.destination-transformers=toLowerCase
Then the result destination for all three bindings with matching engineEvents
key will be configured to
spring.cloud.stream.bindings.auditProducer.destination=engineevents
spring.cloud.stream.bindings.auditConsumer.destination=engineevents
spring.cloud.stream.bindings.queryConsumer.destination=engineevents
- The following configuration properties are introduced to configure Activiti messaging destination properties. The Activiti messaging destinations configuration uses channel destinations as key to configure binding service properties during application context initialization. The effective channel destinations will be configured at runtime by BindingServiceProperties bean post processors.
# Set destination separator to use to build full destinations, i.e. prefix_destination. Default is _
activiti.cloud.messaging.destination-separator
# Set destination prefix to use to build destinations, i.e. prefix_destination. Default is empty string.
activiti.cloud.messaging.destination-prefix
# Enable destination name transformers to apply conversion to all destination name for producers, consumers
activiti.cloud.messaging.destination-transformers-enabled
# Configure comma-delimited list of destination transformers functions to apply conversion to all destination name for producers, consumers
activiti.cloud.messaging.destination-transformers
# Configure regex expression to use for replacement of illegal characters in the destination names. Default is [\\t\\s*#:]
activiti.cloud.messaging.destination-illegal-chars-regex
# Configure replacement character for illegal characters in the destination names. Default is -
activiti.cloud.messaging.destination-illegal-chars-replacement
# Configure destination properties to apply customization to producers and consumer channel bindings with matching destination key.
# Destination name to apply for matching channel binding destinations. If empty the key is used as name. Default is empty string.
activiti.cloud.messaging.destinations.[channelBindingDestination].name
# Destination scope to add to destination name, i.e. name.scope. Default is null
activiti.cloud.messaging.destinations.[channelBindingDestination].scope
# Destination prefix to override common destination prefix. Default is null
activiti.cloud.messaging.destinations.[channelBindingDestination].prefix
# Destination separator to override common destination separator. Default is null
activiti.cloud.messaging.destinations.[channelBindingDestination].separator
- The default property source uses
classpath:config/activiti-cloud-messaging.properties
with the following default values for backward compatibility with existing destinations:
activiti.cloud.messaging.destination-separator=${ACT_MESSAGING_DEST_SEPARATOR:_}
activiti.cloud.messaging.destination-prefix=${ACT_MESSAGING_DEST_PREFIX:}
activiti.cloud.messaging.destination-transformers-enabled=${ACT_MESSAGING_DEST_TRANSFORMERS_ENABLED:false}
activiti.cloud.messaging.destination-transformers=${ACT_MESSAGING_DEST_TRANSFORMERS:toLowerCase,escapeIllegalChars}
# Default destination scope mappings for cloud stream bindings with matching channel destination
activiti.cloud.messaging.destinations.engineEvents.name=${ACT_RB_ENG_EVT_DEST:engineEvents}
activiti.cloud.messaging.destinations.signalEvent.name=${ACT_RB_SIG_EVT_DEST:signalEvent}
activiti.cloud.messaging.destinations.commandConsumer.name=${ACT_RB_CMD_CONSUMER_DEST:commandConsumer}
activiti.cloud.messaging.destinations.commandConsumer.scope=${activiti.cloud.application.name}
activiti.cloud.messaging.destinations.asyncExecutorJobs.name=${ACT_RB_ASYNC_JOB_EXEC_DEST...
7.1.0-M15
description: Release 7.1.0-M15
7.1.0-M15
You can consume all the Activiti artifacts for this release from Alfresco Nexus:
<repositories>
<repository>
<id>activiti-releases</id>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
</repository>
</repositories>
Activiti Cloud:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-dependencies</artifactId>
<version>7.1.0-M15</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
Activiti Core
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0-M15</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
In the milestone 7.1.0-M15 you will find the following main fixes & features:
- Enhance Kafka Deployment Strategy by enabling dynamic scaling of the query consumer PODs
- Use client/secret auth for Keycloak Admin Client
- Improve message event handling when there are several runtime bundles
- Remove unused zookeeper from Activiti Cloud charts
- Creation of integration context fails intermittently on query service
- Upgrade to Spring Boot 2.5.3 and Spring Cloud 2020.0.3
Changes from previous milestones
- Enhance Kafka Deployment Strategy by enabling dynamic scaling of the query consumer PODs: previously, while using partioned message streams, the property
partitionCount
was used to define at the same time the number of partitions and the number of replicas for query service for both RabbitMQ and Kafka binders. However, Kafka binder supports dynamically scaling and one replica can handle more than one partition. Starting from version7.1.0-M15
the number of partitions and the number of replica for query service are set independently while using Kafka binder:partitionCount
is used to define the number of partions andreplicaCount
is used to define the number of replicas for query service.partitionCount
should be greater than or equals toreplicaCount
.
global:
messaging:
broker: kafka
partitioned: true
# global.messaging.partitionCount -- set the Kafka partition number
partitionCount: 4
activiti-cloud-query:
# replicaCount -- set the Kafka consumer number
replicaCount: 2
- Use client/secret auth for Keycloak Admin Client: previously, in order to retrieve users and groups from Keycloak, Activiti Cloud used to connect using the credentials (username/password) of a special user called
client
that was added to the Realm. Starting from the version 7.1.0-M15 the user client was removed in favor of a new keycloak client called (activiti-keycloak). As consenquence:- The following mandatory properties has been added:
activiti.keycloak.client-id=${ACT_KEYCLOAK_CLIENT_ID:activiti-keycloak}
activiti.keycloak.client-secret=${ACT_KEYCLOAK_CLIENT_SECRET:}
- The following properties has been removed:
activiti.keycloak.admin-client-app=${ACT_KEYCLOAK_CLIENT_APP:admin-cli}
activiti.keycloak.client-user=${ACT_KEYCLOAK_CLIENT_USER:client}
activiti.keycloak.client-password=${ACT_KEYCLOAK_CLIENT_PASSWORD:client}
- The following mandatory properties has been added:
Configuration with Helm charts:
It's possible to create a default Activiti Keycloak Client Kubernetes secret with Helm by using the following values (replace changeit
by the secret of your choice):
global:
keycloak:
clientSecret: changeit
Or, if you prefer, you can use existing Activiti Keycloak Client Kubernetes secret by enablinguseExistingClientSecret
:
kubectl create secret generic activiti-keycloak-client \
--from-literal=clientId=activiti-keycloak \
--from-literal=clientSecret=changeit
global:
keycloak:
clientSecretName: activiti-keycloak-client
useExistingClientSecret: true
Under the hood, the deployment will add the following environment variables to container specs:
specs:
containers:
- name: runtime-bundle
env:
- name: ACTIVITI_KEYCLOAK_CLIENT_ID
valueFrom:
secretKeyRef:
key: clientId
name: activiti-keycloak-secret
- name: ACTIVITI_KEYCLOAK_CLIENT_SECRET
valueFrom:
secretKeyRef:
key: clientSecret
name: activiti-keycloak-secret
-
Removal of
activiti-cloud-services-common-identity-keycloak
from connector starter: activiti-cloud-starter-connector is no longer bringing the depencency toactiviti-cloud-services-common-identity-keycloak,
please add it explicitly in the case where your connector implementation was rellying on it. -
Improve message event handling when there are several runtime bundles: by default, binding destinations related to BPMN Messages are now scoped by Activiti Cloud Application. This allow having more than one Runtime Bundle using the same message broker. This change should be transparent for most of the users, but here are the changes performed:
New default values starting from version 7.1.0-m15:
spring.cloud.stream.bindings.input.destination=messageEvents${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}
spring.cloud.stream.bindings.output.destination=commandConsumer${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}
spring.cloud.stream.bindings.commandConsumer.destination=${ACT_RB_COMMAND_CONSUMER_DEST:commandConsumer${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}}
spring.cloud.stream.bindings.commandResults.destination=${ACT_RB_COMMAND_RESULTS_DEST:commandResults${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}}
spring.cloud.stream.bindings.messageEvents.destination=messageEvents${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}
Previous default values:
spring.cloud.stream.bindings.input.destination=messageEvents
spring.cloud.stream.bindings.output.destination=commandConsumer
spring.cloud.stream.bindings.commandConsumer.destination=commandConsumer
spring.cloud.stream.bindings.commandResults.destination=commandResults
spring.cloud.stream.bindings.messageEvents.destination=messageEvents
7.1.0-M14
description: Release 7.1.0-M14
7.1.0-M14
You can consume all the Activiti artifacts for this release from Alfresco Nexus:
<repositories>
<repository>
<id>activiti-releases</id>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
</repository>
</repositories>
Activiti Cloud:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-dependencies</artifactId>
<version>7.1.0-M14</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
Activiti Core
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0-M14</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
In the milestone 7.1.0-M14 you will find the following main fixes & features:
-
Split messages containing CloudProcessDeployedEvent: Previously, the runtime bundle was using a single message to aggregate
PROCESS_DEPLOYED
events for each process definition deployed in the runtime bundle (including all their versions). Taking into account that this event is also including the associated process definition file, the message can become very large depending on how many process definitions and how many versions are available for a given runtime bundle.In order to avoid large messages, starting from version 7.1.0-M14,
PROCESS_DEPLOYED
events are split into several messages when it's necessary. The default chunk size is 100 events per message, it can be customized by setting the system propertyactiviti.cloud.runtime-bundle.events-properties.chunk-size
or the environment variableACTIVITI_CLOUD_RUNTIMEBUNDLE_EVENTSPROPERTIES_CHUNKSIZE
.
In addition to that, the logic has been updated and only the latest version of a given process definition is emmiting events.
7.1.0-M13
description: Release 7.1.0-M13
7.1.0-M13
You can consume all the Activiti artifacts for this release from Alfresco Nexus:
<repositories>
<repository>
<id>activiti-releases</id>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
</repository>
</repositories>
Activiti Cloud:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-dependencies</artifactId>
<version>7.1.0-M13</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
Activiti Core
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0-M13</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
In the milestone 7.1.0-M13 you will find the following main fixes & features:
- Add support for partitioned message streams: messages used to transfer data from the runtime bundle to query and audit service can be partitioned. There will be as many instances of the consumer as the number of partitions. Each instance will consume data from a single partition. In Helm deployment, partitioning can be enabled by providing the following extra values (
partitionCount
defines how many partitions will be used and the Helm deployment will create that many replicas of query service using aStatefulSet
rather than aDeployment
):
global:
messaging:
# global.messaging.partitioned -- enables partitioned messaging in combination with messaging.enabled=true && messaging.role=producer|consumer
partitioned: true
# global.messaging.partitionCount -- configures number of partitioned consumers
partitionCount: 2
Result of kubectl get pods
:
NAME READY STATUS RESTARTS AGE
m13-activiti-cloud-connector-66bb74576-j42hm 1/1 Running 0 153m
m13-activiti-cloud-modeling-769fcb67b5-kx9qk 1/1 Running 0 153m
m13-activiti-cloud-query-0 1/1 Running 0 153m
m13-activiti-cloud-query-1 1/1 Running 0 153m
m13-activiti-modeling-app-847d8dfbb-2lggd 1/1 Running 0 153m
m13-keycloak-0 1/1 Running 0 153m
m13-postgresql-0 1/1 Running 0 153m
m13-postgresql-id-0 1/1 Running 0 153m
m13-runtime-bundle-7d568d9844-5vhtq 1/1 Running 0 153m
rabbitmq-0 1/1 Running 0 153m
- Add Activiti Cloud application support for Kafka binder: in addition to Rabbit MQ binder (that remains the default one), the example docker images generated by activiti-cloud-application are also embedding Kafka binder. In order to use it instead of Rabbit MQ binder, pass the following values during Helm deployment:
global:
messaging:
broker: kafka
kafka:
enabled: true
rabbitmq:
enabled: false
Result of kubectl get pods
:
NAMESPACE NAME READY STATUS RESTARTS AGE
m13-kafka activiti-activiti-cloud-connector-6ff67bc988-s88jj 1/1 Running 0 4h35m
m13-kafka activiti-activiti-cloud-modeling-98499f5d5-lw9hd 1/1 Running 0 4h35m
m13-kafka activiti-activiti-cloud-query-fd5bcbc9f-89jrl 1/1 Running 0 4h35m
m13-kafka activiti-activiti-modeling-app-bbd8d97c8-qnl46 1/1 Running 0 4h18m
m13-kafka activiti-keycloak-0 1/1 Running 0 4h35m
m13-kafka activiti-postgresql-0 1/1 Running 0 4h35m
m13-kafka activiti-postgresql-id-0 1/1 Running 0 4h35m
m13-kafka activiti-runtime-bundle-865895df8d-hhgwm 1/1 Running 0 4h35m
m13-kafka kafka-0 1/1 Running 0 4h35m
m13-kafka zookeeper-0 1/1 Running 0 4h35m
- Improve common helm charts for upgrades with customizations
- Block reflection on JUEL Expressions
- Upgrade to Spring Boot 2.4.5 and Spring Cloud 2020.0.2
- Fix Modeling-Service Schemas Problem
- Fix ProcessDefinitionName not provided for sub-processes
- Fix Error color state diagram is not displayed
- Fix Intermittent Sleuth failures on GraphQL service
- Fix Audit service fails with Oracle DB
- Fix M12 version run program prompting circular reference problem
Changes from previous milestones
7.1.0-M12
tagging release 7.1.0-M12