> For the complete documentation index, see [llms.txt](https://activiti.gitbook.io/activiti-7-developers-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://activiti.gitbook.io/activiti-7-developers-guide/releases/7.1.0-m15.md).

# 7.1.0-M15

Release 7.1.0-M15

You can consume all the Activiti artifacts for this release from Alfresco Nexus:

```markup
<repositories>
  <repository>
    <id>activiti-releases</id>
    <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
  </repository>
</repositories>
```

*Activiti Cloud:*

```markup
<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*

```markup
  <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](https://github.com/Activiti/Activiti/milestone/39):

* [Enhance Kafka Deployment Strategy by enabling dynamic scaling of the query consumer PODs](https://github.com/Activiti/Activiti/issues/3698)
* [Use client/secret auth for Keycloak Admin Client](https://github.com/Activiti/Activiti/issues/3457)
* [Improve message event handling when there are several runtime bundles](https://github.com/Activiti/Activiti/issues/3702)
* [Remove unused zookeeper from Activiti Cloud charts](https://github.com/Activiti/Activiti/issues/3705)
* [Creation of integration context fails intermittently on query service](https://github.com/Activiti/Activiti/issues/3684)
* [Upgrade to Spring Boot 2.5.3 and Spring Cloud 2020.0.3](https://github.com/Activiti/Activiti/issues/3688)

## Changes from previous milestones

* [Enhance Kafka Deployment Strategy by enabling dynamic scaling of the query consumer PODs](https://github.com/Activiti/Activiti/issues/3698): 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 version `7.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 and `replicaCount` is used to define the number of replicas for query service.`partitionCount` should be greater than or equals to `replicaCount`.

```
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](https://github.com/Activiti/Activiti/issues/3457): 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](https://www.keycloak.org/docs/latest/server_admin/#core-concepts-and-terms) 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}`

*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 enabling`useExistingClientSecret`:

```
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 to`activiti-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](https://github.com/Activiti/Activiti/issues/3702): 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
```
