diff --git a/kogito-quarkus-examples/dmn-knative-quickstart-quarkus/src/test/resources/application.properties b/kogito-quarkus-examples/dmn-knative-quickstart-quarkus/src/test/resources/application.properties
index 0d7c6beeca..bb8bd6ceaf 100644
--- a/kogito-quarkus-examples/dmn-knative-quickstart-quarkus/src/test/resources/application.properties
+++ b/kogito-quarkus-examples/dmn-knative-quickstart-quarkus/src/test/resources/application.properties
@@ -22,3 +22,5 @@ quarkus.log.level=INFO
mp.messaging.outgoing.kogito_outgoing_stream.connector=quarkus-http
mp.messaging.outgoing.kogito_outgoing_stream.url=http://0.0.0.0:8181
+
+kogito.addon.messaging.outgoing.cloudEventMode=structured
\ No newline at end of file
diff --git a/kogito-quarkus-examples/pom.xml b/kogito-quarkus-examples/pom.xml
index ea58824dfd..67e4b8a8dc 100644
--- a/kogito-quarkus-examples/pom.xml
+++ b/kogito-quarkus-examples/pom.xml
@@ -95,6 +95,7 @@
process-usertasks-quarkus-with-console
process-usertasks-quarkus
process-usertasks-timer-quarkus-with-console
+ process-usertasks-timer-data-index-persistence-addon-quarkus
process-usertasks-with-security-oidc-quarkus-with-console
process-usertasks-with-security-oidc-quarkus
process-usertasks-with-security-quarkus
diff --git a/kogito-quarkus-examples/process-knative-quickstart-quarkus/src/test/resources/application.properties b/kogito-quarkus-examples/process-knative-quickstart-quarkus/src/test/resources/application.properties
index f2e180a5c3..b7fee18b52 100644
--- a/kogito-quarkus-examples/process-knative-quickstart-quarkus/src/test/resources/application.properties
+++ b/kogito-quarkus-examples/process-knative-quickstart-quarkus/src/test/resources/application.properties
@@ -21,3 +21,5 @@ quarkus.http.test-port=8282
quarkus.log.level=INFO
mp.messaging.outgoing.kogito_outgoing_stream.url=http://0.0.0.0:8181
+
+kogito.addon.messaging.outgoing.cloudEventMode=structured
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/README.md b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/README.md
new file mode 100644
index 0000000000..1b3c4418c8
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/README.md
@@ -0,0 +1,538 @@
+# Process user tasks with timer with persistence addon : Hiring
+
+## Description
+
+This example showcases a basic implementation of the **Hiring** process that drives a *Candidate* through different
+interviews until he gets hired.
+
+This quickstart project shows a simple example user task orchestration including the use of DMN decisions to
+generate the candidate offer and timers to skip User Tasks.
+
+This example also demonstrates how to configure the whole *Kogito* environment using the new *Compact Architecture* that
+enable simplifying the communication among *Kogito* services removing the need of events (Kafka/HTTP) between them. This can
+be achieved using the following *Quarkus* addons:
+- `kogito-addons-quarkus-data-index-persistence-postgresql`: enables the *Kogito Runtime* persisting directly into the
+*Data-Index* database.
+- `kogito-addons-quarkus-jobs`: enables collocating the *Jobs Service* inside the *Kogito Runtime*.
+
+## The Java models
+
+The **Hiring** process uses two POJOs to handle the process data, both of them can be found in the *org.kie.kogito.hr* package.
+
+The `CandidateData` POJO is the input of the process. It represents the person that wants to get the job.
+
+```java
+public class CandidateData {
+
+ private String name; // Name of the candidate
+ private String lastName; // Last name of the candidate
+ private String email; // Email of the candidate
+ private Integer experience; // Years of experience
+ private List skills; // List of technical skills
+
+ // Constructors, setters, getters...
+}
+```
+
+The `Offer` POJO is the output of the process and represents the job offer that will be sent to the candidate.
+It will be automatically calculated during the process execution depending on the candidate years of experience & skills.
+```java
+public class Offer {
+
+ private String category; // Job category based on the candidate experience
+ private Integer salary; // Salary based on the candidate experience and skills
+
+ // Constructors, setters, getters...
+}
+```
+## The *New Hiring Offer* DMN
+This example makes use of the *New Hiring Offer* DMN to generate a base offer for the `Candidate`. The DMN looks like this:
+
+In this simple DMN we have an `Offer` *Decision*, that will generate the candidate offer, which
+has a requirement of a `CandidateData` *Input Data*.
+
+
+
+
+ New Hiring Offer DMN diagram
+
+
+
+The DMN defines the following data types (`tCandidateData` & `tOffer` ) matching the POJOs defined in the project
+(`CandidateData.java` & `Offer.java`):
+
+
+
+
+ New Hiring Offer DMN types
+
+
+
+As expected, `CandidateData` *Input Data* & `Offer` *Decision* have a `tCandidateData` data
+
+The `Offer` decision uses the following *Boxed Expression* to generate the `tOffer`:
+
+
+
+
+ New Hiring Offer DMN decision
+
+
+
+## The Hiring Process
+### Process variables
+
+The process handles the following _Variables_:
+
+| Variable | Type | Tags | Description |
+|--------------------|-----------------------------------|--------------|---------------------------------------------------|
+| **candidateData** | `org.kie.kogito.hr.CandidateData` | **input** | The candidate data |
+| **offer** | `org.kie.kogito.hr.Offer` | **output** | The generated candidate offer |
+| **hr_approval** | `Boolean` | **internal** | Determines that HR department approves the hiring |
+| **it_approval** | `Boolean` | **internal** | Determines that IT department approves the hiring |
+
+### The BPMN Process
+
+
+
+
+ Hiring Process Diagram
+
+
+
+The process starts receiving the `CandidateData` as an input and storing it into the `candidateData` variable, and if the
+candidate meets two minimal requirements, the process will continue and reach the **Generate base offer**, otherwise the
+candidate application will be denied and the process will complete without sending the `offer` to the candidate.
+
+The **Generate base offer** is a *Business Rule Task* that will use the *New Hiring Offer* decision defined in the
+`NewHiringOffer.dmn` to generate the an `Offer` based on the candidate experience and skills. The task takes the `candidateData`
+as an input and will produce an instance of `org.kie.kogito.hr.Offer` that will be stored in the `offer` variable.
+
+
+
+
+
+ Generate base Offer data assignments
+
+
+
+After the `offer` has been generated, the process will jump into the **HR Interview** *User Task*, where the candidate we'll
+be interviewed by the *HR* department. The task takes the `candidateData` and `offer` as inputs and as an output will produce
+the `hr_approve` boolean and an updated `offer`.
+
+
+
+
+ HR Interviewr task data assignments
+
+
+
+The **HR Interview** *User Task* also has a *Boundary Timer Event* that will prevent the task to delay and will cancel the
+task after certain time (for example purpose just 3 minutes). This *Boundary Timer Event* will schedule a Job in the Jobs Service
+that when trigger will notify the *Kogito Runtime* to cancel the task and deny the application.
+
+If **HR Interview** successfully completed, the process will jump into the **IT Interview** *User Task*. Again the candidate
+we'll have a second interview with the *IT* department. Again, this task will take the `candidateData` and `offer` as inputs
+but as an output will produce the `it_approve` boolean.
+
+
+
+
+ IT Interviewr task data assignments
+
+
+
+
+Once both tasks are completed, if the candidate got the approvals from *HR* & *IT* (both `hr_interview` & `hr_interview` being true)
+the process will jump into the **Send Offer to Candidate** *Script Task* that will notify the candidate about the offer
+and the process will end.
+
+> **NOTE:** for simplicity, all the *User Tasks* in this example are assigned to the *jdoe* user present in the keycloak configuration
+
+## Running the example
+### Prerequisites
+
+* Java 17+ installed
+* Environment variable JAVA_HOME set accordingly
+* Maven 3.9.3+ installed
+* Docker and Docker Compose to run the required example infrastructure.
+
+And when using native image compilation, you will also need:
+- GraalVM 20.3+ installed
+- Environment variable GRAALVM_HOME set accordingly
+- GraalVM native image needs as well native-image extension: https://www.graalvm.org/reference-manual/native-image/
+- Note that GraalVM native image compilation typically requires other packages (glibc-devel, zlib-devel and gcc) to be installed too, please refer to GraalVM installation documentation for more details.
+
+### Infrastructure Services
+
+This quickstart provides a docker compose template that starts all the required services. This setup ensures that all services are connected with a default configuration.
+
+- PostgreSQL: 5432
+- Data Index: 8180
+- Management Console: 8280
+- Task Console: 8380
+- Keycloak: 8480
+- PgAdmin: 8055
+- Kogito Example Service: 8080
+
+To help bootstraping the Infrastructure Services, the example provides the `startServices.sh` script inside the *docker-compose*
+folder.
+
+> **_NOTE_**: the docker compose template requires using _extra_hosts_ to allow the services use the host network, this may
+> carry some issues if you are using a **podman** version older than **4.7**.
+
+### Building & Running the example
+
+To build the example, on a Terminal, run the following command:
+```shell
+mvn clean package -Pcontainer
+```
+This will build the example quarkus application and create a Docker image that will be started in the `docker-compose` template.
+
+To execute the full example (including consoles), open a Terminal and run the following command inside the `docker-compose` folder:
+
+```shell
+sh startServices.sh
+```
+
+Additionally, if you want to start only the example and the minimal Infrastructure Services (PostgreSQL, Data-Index and Jobs Service),
+you can run the same `startServices.sh` script but passing the `example` argument
+
+```shell
+sh startServices.sh example
+```
+
+> **_NOTE:_** starting the Infrastructure Services, please consider running a ```mvn clean package -Pcontainer```
+> command on the project root before running the ```startServices.sh``` script for the first time or any time you modify the project.
+
+### Running the example in Development mode
+
+To run the example in Development mode, just run the following command in a Terminal:
+
+```shell
+mvn clean package quarkus:dev -Pdevelopment
+```
+
+The Development Mode will embed all the needed Infrastructure Services (PostgreSQL, Data-Index & Jobs Service) and won't
+require any extra step.
+
+The `development` profile includes the **Runtime Tools Quarkus Extension** that exposes a new section in the **Quarkus Dev-UI**
+unifying the **Management Console** & **Task Console** functionalities. **Quarkus Dev-UI** is available at http://localhost:8080/q/dev
+
+> **_NOTE:_** For more information about how to work with Kogito Runtime Tools Quarkus Extension, please refer to the [Kogito Documentation](https://docs.kogito.kie.org/latest/html_single/#con-runtime-tools-dev-ui_kogito-developing-process-services) page.
+
+### Starting an instance of the Hiring Process
+
+Once the service is up and running you can make use of the **Hiring** application by a sending request to `http://localhost:8080/hiring`.
+
+Sending the following valid `CandidateData` will start a process instance that will land into the *HR Interview* task:
+
+```json
+{
+ "candidateData": {
+ "name": "Jon",
+ "lastName": "Snow",
+ "email": "jon@snow.org",
+ "experience": 5,
+ "skills": [
+ "Java", "Kogito", "Fencing"
+ ]
+ }
+}
+```
+
+In a Terminal you can execute this curl command to start a **Hiring** process:
+```bash
+curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 5, "skills": ["Java", "Kogito", "Fencing"]}}'
+```
+
+If everything went well you may get a response like:
+```json
+{
+ "id": "628e679f-4deb-4abc-9f28-668914c64ef9",
+ "offer": {
+ "category": "Senior Software Engineer",
+ "salary": 40450
+ }
+}
+```
+
+In the server log You may find a trace like:
+```
+New Hiring has been created for candidate: Jon Snow
+###################################
+Generated offer for candidate: Jon Snow
+Job Category: Senior Software Engineer
+Base salary: 40450
+###################################
+```
+
+Use the following `CandidateData` that don't match the minimal candidate requirements, to start a process that will automatically end:
+```json
+{
+ "candidateData": {
+ "name": "Jon",
+ "lastName": "Snow",
+ "email": "jon@snow.org",
+ "experience": 0,
+ "skills": []
+ }
+}
+```
+
+In a Terminal you can execute this curl command to start a **Hiring** process:
+```bash
+curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 0, "skills": []}}'
+```
+
+If everything went well you may get a response like:
+```json
+{
+ "id": "3659601a-bb59-458d-859e-7892621ad5b7",
+ "offer": null
+}
+```
+
+In the server log You may find a trace like:
+```
+New Hiring has been created for candidate: Jon Snow
+###################################
+Candidate Jon Snow don't meet the requirements for the position but we'll keep it on records for the future!
+###################################
+```
+
+### Using Keycloak as Authentication Server
+
+In this Quickstart we'll be using [Keycloak](https://www.keycloak.org/) as *Authentication Server*. It will be started as a part of the project *Infrastructure Services*, you can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder.
+
+It will install the *Kogito Realm* that comes with a predefined set of users:
+
+| Login | Password | Roles |
+| ------------- | ---------- | ------------------- |
+| admin | admin | *admin*, *managers* |
+| alice | alice | *user* |
+| jdoe | jdoe | *managers* |
+
+Once Keycloak is started, you should be able to access your *Keycloak Server* at [localhost:8480/auth](http://localhost:8480/auth) with *admin* user.
+
+> **_NOTE:_** This example uses keycloak authentication to enable security only in the consoles not in runtime.
+
+### Using the Kogito Runtime Consoles to interact with the Hiring Process
+
+The following *step-by-step* guides will show how to take advantage of both *Kogito Management Console* and *Kogito Task Console*
+to operate with the instances of *Hiring* process.
+
+To be able to follow the guides, please make sure that the example has been built using the `container` and all the *Infractructure Services*
+are started as explained in the [Building & Running the example](#building--running-the-example) section.
+
+> **_NOTE_**: For more information about how to operate with the *Kogito Runtime Consoles*, please refer to the
+> [Management Console](https://docs.kogito.kie.org/latest/html_single/#con-management-console_kogito-developing-process-services) & [Task Console](https://docs.kogito.kie.org/latest/html_single/#con-task-console_kogito-developing-process-services) documentation.
+
+#### Show active Hiring process instance at Kogito Management Console
+
+*Kogito Management Console* is the tool that enables the user to view and administrate process instances in our *Kogito application*.
+
+In this guide we'll see how to use the *Kogito Management Console* to view the state of the Hiring process instances.
+
+1. With the example built and all the *Infrastructure Services* running, let's start an instance of the *Hiring* process. To do so, in a Terminal just run:
+
+ ```bash
+ curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 5, "skills": ["Java", "Kogito", "Fencing"]}}'
+ ```
+
+ If everything went well, you should get a response like:
+ ```json
+ {"id":"064a6372-b5bb-4eff-a059-d7b24d4ac64a","offer":{"category":"Senior Software Engineer","salary":40450}}
+ ```
+ Which indicates that a new process instance with id **064a6372-b5bb-4eff-a059-d7b24d4ac64a** has been started.
+
+
+2. Now let's check the process instance state with the *Kogito Management Console*. To do so, in your browser navigate
+ to http://localhost:8280 and log in using any of the users specified in the [Using Keycloak as Authentication Server](#using-keycloak-as-authentication-server).
+
+ Once you are logged in, you should be redirected to the **Process Instances** page where you should be able to see
+ the started process instance in active state.
+
+
+
+
+
+ Process List in Kogito Management Console
+
+
+
+
+3. Click on the instance **id** to navigate into the *Process Details* page. In there you'll be able to see different panels displaying relevant information about the instance state, such as the *Diagram*, *Timeline*, *Details*, *Variables*, *Jobs*...
+
+
+
+
+
+ Process Instance Details page
+
+
+
+ Now check the **Diagram** panel, in there you'll se the instance execution path. Notice that it's stopped *HR Interview* *User Task* waiting for some input from the user.
+ The task has *Timer* that will skip the task if it's not completed in a given time (3 minutes in this example). You should be able to see the
+ associated *Job* in the **Jobs** panel. Now, let's wait 3 minutes to see the timer in action.
+
+4. After 3 minutes, the scheduled *Job* should have been executed, making the process instance skip the *HR Interview* task.
+ In the **Process Details** page, click the *Refresh* button to see the process instance state.
+
+
+
+
+ Process Instance completed after the timer execution.
+
+
+
+ Again, check the *Diagram* panel to see the process instance execution path and the *HR Interview* task
+ should have been skipped and the process instance continued its execution by following the *Application denied* path
+ reaching the *Completed* state.
+
+ Notice in the *Jobs* panel that the associated *Job* has the **Executed** status.
+
+#### Complete Hiring process instances using Kogito Task Console
+
+When a *Kogito* process reaches a *User Task*, the process execution stops waiting for the user input
+that will enable the *User Task* to finish and allowing the process execution to continue.
+
+*Kogito Task Console* is the tool that enables the user interacting with the process *User Tasks* and provide the necesary data
+for the process to continue (usually wiht forms).
+
+In this guide, we'll see how to complete the process *User Tasks* using the *Kogito Task Console* to interact with the process *User Tasks*
+using the engine autogenerated forms.
+
+> **_NOTE_**: For simplicity, all the *User Tasks* are assigned to the user *jdoe*. Please make sure you use the *jdoe*/*jdoe* credentials
+> when logging in the *Task Console*
+
+1. With the example built and all the *Infrastructure Services* running, let's start an instance of the *Hiring* process. To do so, in a Terminal just run:
+
+ ```bash
+ curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 5, "skills": ["Java", "Kogito", "Fencing"]}}'
+ ```
+
+ If everything went well, you should get a response like:
+ ```json
+ {"id":"3cf0d58f-a824-4046-ba6c-c2e79edc1df7","offer":{"category":"Senior Software Engineer","salary":40450}}
+ ```
+ Which indicates that a new process instance with id **3cf0d58f-a824-4046-ba6c-c2e79edc1df7** has been started.
+
+
+2. Let's check the process instance state. Again browse to http://localhost:8280 to access the *Kogito Management Console*,
+ and in the **Process List** click the **Id** column to open the **Process Details** page.
+
+
+
+
+ Process List in Kogito Management Console
+
+
+
+
+
+
+ Process instance Details page.
+
+
+
+ As expected, the process instance is stopped in the *HR Interview* task waiting for some input from the user. Let's try to
+ complete the task.
+
+
+3. Now open the *Kogito Task Console* by browsing to http://localhost:8380 and login using the **jdoe/jdoe** credentials.
+ After logging in, you'll be redirected to the **Task Inbox** page, which contains the list of *Active* tasks assigned to the
+ logged user. In this case you should be able to see only the new *HR Interview* task.
+
+
+
+
+ Task Inbox in Kogito Task Console
+
+
+
+ Click on the **HR Interview** task to open the form and complete it!
+
+
+4. The **Task Form** is the main component to interact with User Tasks, it allows the user to provide the data required by
+ the task and transition it to the next phase, allowing the Process to continue. The **Task Form** is autogenerated based
+ on the *User Task* data assignments.
+
+
+
+
+
+ HR Interview Task Form
+
+
+
+
+ *HR Interview* Form allows you to edit the actual **Offer** that will be sent to the *Candidate* and also approve or deny
+ the job application with the **Approve** checkbox.
+
+ Now, check the **Approve** checkbox click the **Complete** button in order to submit the form and complete the task. If the
+ task could be successfully completed, a notification should appear in the screen and the form will stay in Read-Only mode.
+
+
+
+
+
+ HR Interview Success notification!
+
+
+
+ With the *HR Interview* task successfully completed the process has moved forward and reached the *IT Interview* task.
+
+ Optionally, you can check the process instance state in the **Kogito Management Console** and verify the current
+ execution path.
+
+
+
+
+ Process Instance details stopped in IT Interview
+
+
+
+5. Now is time to complete the **IT Interview** task and complete this Hiring process instance. In **Task Console**, go
+ back to **Task Inbox** and as expected, there you'll see that **HR Interview** is no longer available and a new
+ **IT Interview** has appeared.
+
+
+
+
+ IT Interview in Task Inbox
+
+
+
+ As done in Step #3, click in the **IT Interview** task to open the task form. *IT Interview* task only needs the
+ candidate **Approval** to be submitted. Please, check the **Approval** field and click the **Complete** button to
+ submit the form.
+
+
+
+
+ IT Interview Task Form
+
+
+
+
+6. After the form is submitted the *IT Task* should be completed and the process should continue, notifying the *Candidate*
+ that he has succesfully finished the Hiring process. Please go back to **Task Inbox** to verify there are no other active tasks
+ waiting for you.
+
+
+
+
+ Empty **Task Inbox** after completing the *IT Interview* Task
+
+
+
+ You can also open use *Kogito Management Console* to check the state of the process instance and verify that the
+ instance has been successfully completed.
+
+
+
+
+ Hiring Process sucessfully completed
+
+
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/.gitignore b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/.gitignore
new file mode 100644
index 0000000000..b6632dbda5
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/.gitignore
@@ -0,0 +1,3 @@
+.env
+svg/
+persistence/
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/README.md b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/README.md
new file mode 100644
index 0000000000..17ed70a4db
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/README.md
@@ -0,0 +1,57 @@
+# Kogito and Infrastructure services
+
+To allow a quick setup of all services required to run this demo, we provide a docker compose template that starts the following services:
+- Postgresql
+- PgAdmin
+- Kogito Data Index
+- Kogito Example Service (Only available if the example has been compiled using the `container` mvn profile eg: ```mvn cleanp package -Dcontainer```)
+- Kogito Management Console
+- Kogito Task Console
+- Keycloak
+
+The docker compose template provides three profiles to enable starting only the set of services you want to use. The profiles are:
+- **infra**: Starts only the minimal infrastructure to run the example (Postgresql, pgadmin, Kogito Data Index)
+- **example**: Starts the services in *infra* profile and the Kogito Example Service. Requires the example to be compiled using the `container` mvn profile eg: ```mvn cleanp package -Dcontainer```.
+- **full** (default): includes all the above and also starts the **Management Console**, **Task Console** and a **Keycloak** to handle the consoles authentication. Requires the example to be compiled using the `container` mvn profile eg: ```mvn cleanp package -Dcontainer```.
+
+> NOTE: In order to use it, please ensure you have Docker Compose installed on your machine, otherwise follow the instructions available
+in [here](https://docs.docker.com/compose/install/).
+
+## Starting the services
+
+Use the `startServices.sh` passing the docker profile you want to use as an argument. If no profile is provided the script will default to **full**.
+
+Eg:
+```shell
+sh startServices.sh example
+```
+
+Once the services are started (depending on the profile), the following ports will be assigned on your local machine:
+- Postgresql: 5432
+- PgAdmin: 8055
+- Kogito Data Index: 8180
+- Kogito Example Service: 8080
+- Kogito Management Console: 8280
+- Kogito Task Console: 8380
+- Keycloak: 8480
+
+## Stopping and removing volume data
+
+To stop all services, simply run:
+
+```shell
+docker compose stop
+```
+or
+
+```shell
+docker compose down
+```
+to stop the services and remove the containers
+docker-compose -f docker-compose-postgresql.yml stop
+
+For more details please check the Docker Compose documentation.
+
+```shell
+docker-compose --help
+```
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml
new file mode 100644
index 0000000000..0a057a07fc
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml
@@ -0,0 +1,146 @@
+version: '3'
+
+services:
+ postgres:
+ container_name: postgres
+ image: postgres:16.1-alpine3.19
+ profiles: [ "infra", "example", "full" ]
+ ports:
+ - "5432:5432"
+ volumes:
+ - ./sql:/docker-entrypoint-initdb.d:Z
+ healthcheck:
+ test: [ "CMD", "pg_isready", "-q", "-d", "kogito", "-U", "kogito-user" ]
+ timeout: 45s
+ interval: 10s
+ retries: 50
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres
+
+ pgadmin:
+ container_name: pgadmin
+ image: dpage/pgadmin4:8.2
+ profiles: [ "infra", "example", "full" ]
+ ports:
+ - 8055:80
+ depends_on:
+ - postgres
+ volumes:
+ - ./pgadmin/servers.json:/pgadmin4/servers.json
+ - ./pgadmin/pgpass:/pgadmin4/pgpass
+ entrypoint: >
+ /bin/sh -c "
+ cp -f /pgadmin4/pgpass /var/lib/pgadmin/;
+ chmod 600 /var/lib/pgadmin/pgpass;
+ /entrypoint.sh
+ "
+ environment:
+ PGADMIN_DEFAULT_EMAIL: user@kogito.org
+ PGADMIN_DEFAULT_PASSWORD: pass
+ PGADMIN_CONFIG_SERVER_MODE: 'False'
+ PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False'
+
+ data-index:
+ container_name: data-index
+ image: quay.io/kiegroup/kogito-data-index-postgresql:${KOGITO_VERSION}
+ profiles: [ "infra", "example", "full" ]
+ ports:
+ - "8180:8080"
+ depends_on:
+ postgres:
+ condition: service_healthy
+ volumes:
+ - ./persistence:/home/kogito/data/protobufs/
+ environment:
+ QUARKUS_DATASOURCE_JDBC_URL: "jdbc:postgresql://postgres:5432/kogito"
+ QUARKUS_DATASOURCE_USERNAME: kogito-user
+ QUARKUS_DATASOURCE_PASSWORD: kogito-pass
+ QUARKUS_HTTP_CORS_ORIGINS: "/.*/"
+ KOGITO_DATA_INDEX_QUARKUS_PROFILE: "http-events-support"
+ KOGITO_DATA_INDEX_PROPS: -Dkogito.protobuf.folder=/home/kogito/data/protobufs/
+ extra_hosts:
+ - "${DOCKER_GATEWAY_HOST}:host-gateway"
+
+ kogito-example-service:
+ container_name: kogito-example-service
+ image: dev.local/${USER}/kogito-example-service:1.0-SNAPSHOT
+ profiles: ["example", "full"]
+ ports:
+ - "8080:8080"
+ depends_on:
+ data-index:
+ condition: service_started
+ environment:
+ QUARKUS_HTTP_CORS_ORIGINS: "/.*/"
+ QUARKUS_DATASOURCE_JDBC_URL: "jdbc:postgresql://postgres:5432/kogito"
+ QUARKUS_DATASOURCE_REACTIVE_URL: "postgresql://postgres:5432/kogito"
+ QUARKUS_DATASOURCE_USERNAME: kogito-user
+ QUARKUS_DATASOURCE_PASSWORD: kogito-pass
+ QUARKUS_DATASOURCE_DB_KIND: postgresql
+ KOGITO_JOBS_SERVICE_URL: http://${DOCKER_GATEWAY_HOST}:8080
+ KOGITO_SERVICE_URL: http://${DOCKER_GATEWAY_HOST}:8080
+ KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST}:8180
+ extra_hosts:
+ - "${DOCKER_GATEWAY_HOST}:host-gateway"
+
+ keycloak:
+ container_name: keycloak
+ image: quay.io/keycloak/keycloak:legacy
+ profiles: ["full"]
+ ports:
+ - "8480:8080"
+ depends_on:
+ postgres:
+ condition: service_healthy
+ volumes:
+ - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json
+ healthcheck:
+ test: [ "CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito" ]
+ interval: 2s
+ timeout: 1s
+ retries: 50
+ environment:
+ DB_VENDOR: POSTGRES
+ DB_ADDR: postgres
+ DB_DATABASE: keycloak
+ DB_USER: kogito-user
+ DB_SCHEMA: public
+ DB_PASSWORD: kogito-pass
+ KEYCLOAK_USER: admin
+ KEYCLOAK_PASSWORD: admin
+ KEYCLOAK_IMPORT: /tmp/kogito-realm.json
+
+ management-console:
+ container_name: management-console
+ image: quay.io/kiegroup/kogito-management-console:${KOGITO_VERSION}
+ profiles: ["full"]
+ ports:
+ - 8280:8080
+ depends_on:
+ data-index:
+ condition: service_started
+ keycloak:
+ condition: service_healthy
+ volumes:
+ - ./svg/:/home/kogito/data/svg/
+ environment:
+ KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql
+ QUARKUS_HTTP_CORS_ORIGINS: "/.*/"
+ KOGITO_MANAGEMENT_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration -Dkogito.svg.folder.path=/home/kogito/data/svg
+
+ task-console:
+ container_name: task-console
+ image: quay.io/kiegroup/kogito-task-console:${KOGITO_VERSION}
+ profiles: ["full"]
+ ports:
+ - 8380:8080
+ depends_on:
+ data-index:
+ condition: service_started
+ keycloak:
+ condition: service_healthy
+ environment:
+ KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql
+ QUARKUS_HTTP_CORS_ORIGINS: "/.*/"
+ KOGITO_TASK_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/keycloak/kogito-realm.json b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/keycloak/kogito-realm.json
new file mode 100644
index 0000000000..fd3cdc0942
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/keycloak/kogito-realm.json
@@ -0,0 +1,2242 @@
+{
+ "realm": "kogito",
+ "notBefore": 0,
+ "revokeRefreshToken": false,
+ "refreshTokenMaxReuse": 0,
+ "accessTokenLifespan": 300,
+ "accessTokenLifespanForImplicitFlow": 900,
+ "ssoSessionIdleTimeout": 1800,
+ "ssoSessionMaxLifespan": 36000,
+ "ssoSessionIdleTimeoutRememberMe": 0,
+ "ssoSessionMaxLifespanRememberMe": 0,
+ "offlineSessionIdleTimeout": 2592000,
+ "offlineSessionMaxLifespanEnabled": false,
+ "offlineSessionMaxLifespan": 5184000,
+ "accessCodeLifespan": 60,
+ "accessCodeLifespanUserAction": 300,
+ "accessCodeLifespanLogin": 1800,
+ "actionTokenGeneratedByAdminLifespan": 43200,
+ "actionTokenGeneratedByUserLifespan": 300,
+ "enabled": true,
+ "sslRequired": "external",
+ "registrationAllowed": false,
+ "registrationEmailAsUsername": false,
+ "rememberMe": false,
+ "verifyEmail": false,
+ "loginWithEmailAllowed": true,
+ "duplicateEmailsAllowed": false,
+ "resetPasswordAllowed": false,
+ "editUsernameAllowed": false,
+ "bruteForceProtected": false,
+ "permanentLockout": false,
+ "maxFailureWaitSeconds": 900,
+ "minimumQuickLoginWaitSeconds": 60,
+ "waitIncrementSeconds": 60,
+ "quickLoginCheckMilliSeconds": 1000,
+ "maxDeltaTimeSeconds": 43200,
+ "failureFactor": 30,
+ "roles": {
+ "realm": [
+ {
+ "name": "managers",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ },
+ {
+ "name": "uma_authorization",
+ "description": "${role_uma_authorization}",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ },
+ {
+ "name": "admin",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ },
+ {
+ "name": "user",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ },
+ {
+ "name": "HR",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ },
+ {
+ "name": "IT",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ },
+ {
+ "name": "offline_access",
+ "description": "${role_offline-access}",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b",
+ "attributes": {}
+ }
+ ],
+ "client": {
+ "realm-management": [
+ {
+ "name": "manage-identity-providers",
+ "description": "${role_manage-identity-providers}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "impersonation",
+ "description": "${role_impersonation}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "view-identity-providers",
+ "description": "${role_view-identity-providers}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "view-realm",
+ "description": "${role_view-realm}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "query-users",
+ "description": "${role_query-users}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "manage-clients",
+ "description": "${role_manage-clients}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "manage-events",
+ "description": "${role_manage-events}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "realm-admin",
+ "description": "${role_realm-admin}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "realm-management": [
+ "impersonation",
+ "manage-identity-providers",
+ "view-identity-providers",
+ "view-realm",
+ "query-users",
+ "manage-clients",
+ "manage-events",
+ "manage-realm",
+ "view-authorization",
+ "manage-authorization",
+ "view-users",
+ "create-client",
+ "query-clients",
+ "query-groups",
+ "manage-users",
+ "view-clients",
+ "view-events",
+ "query-realms"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "manage-realm",
+ "description": "${role_manage-realm}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "view-authorization",
+ "description": "${role_view-authorization}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "manage-authorization",
+ "description": "${role_manage-authorization}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "create-client",
+ "description": "${role_create-client}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "view-users",
+ "description": "${role_view-users}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "realm-management": [
+ "query-groups",
+ "query-users"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "query-clients",
+ "description": "${role_query-clients}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "query-groups",
+ "description": "${role_query-groups}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "manage-users",
+ "description": "${role_manage-users}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "view-clients",
+ "description": "${role_view-clients}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "realm-management": [
+ "query-clients"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "view-events",
+ "description": "${role_view-events}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ },
+ {
+ "name": "query-realms",
+ "description": "${role_query-realms}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "376bd940-e50a-4495-80fc-9c6c07312748",
+ "attributes": {}
+ }
+ ],
+ "security-admin-console": [],
+ "admin-cli": [],
+ "kogito-service": [
+ {
+ "name": "uma_protection",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "0ac5df91-e044-4051-bd03-106a3a5fb9cc",
+ "attributes": {}
+ }
+ ],
+ "broker": [
+ {
+ "name": "read-token",
+ "description": "${role_read-token}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "53d4fe53-a039-471e-886a-28eddc950e95",
+ "attributes": {}
+ }
+ ],
+ "account": [
+ {
+ "name": "view-profile",
+ "description": "${role_view-profile}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d",
+ "attributes": {}
+ },
+ {
+ "name": "manage-account",
+ "description": "${role_manage-account}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "account": [
+ "manage-account-links"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d",
+ "attributes": {}
+ },
+ {
+ "name": "manage-account-links",
+ "description": "${role_manage-account-links}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d",
+ "attributes": {}
+ }
+ ]
+ }
+ },
+ "groups": [],
+ "defaultRoles": [
+ "uma_authorization",
+ "offline_access"
+ ],
+ "requiredCredentials": [
+ "password"
+ ],
+ "otpPolicyType": "totp",
+ "otpPolicyAlgorithm": "HmacSHA1",
+ "otpPolicyInitialCounter": 0,
+ "otpPolicyDigits": 6,
+ "otpPolicyLookAheadWindow": 1,
+ "otpPolicyPeriod": 30,
+ "otpSupportedApplications": [
+ "FreeOTP",
+ "Google Authenticator"
+ ],
+ "scopeMappings": [
+ {
+ "clientScope": "offline_access",
+ "roles": [
+ "offline_access"
+ ]
+ }
+ ],
+ "clients": [
+ {
+ "clientId": "account",
+ "name": "${client_account}",
+ "baseUrl": "/auth/realms/kogito/account",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "0136c3ef-0dfd-4b13-a6d0-2c8b6358edec",
+ "defaultRoles": [
+ "view-profile",
+ "manage-account"
+ ],
+ "redirectUris": [
+ "/auth/realms/kogito/account/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "clientId": "admin-cli",
+ "name": "${client_admin-cli}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "a951803a-79c7-46a6-8197-e32835286971",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": false,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "clientId": "broker",
+ "name": "${client_broker}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "e1f7edd7-e15c-43b4-8736-ff8204d16836",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "clientId": "kogito-frontend",
+ "rootUrl": "http://localhost:8082",
+ "adminUrl": "http://localhost:8082",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "secret",
+ "redirectUris": [
+ "http://localhost:8082/*"
+ ],
+ "webOrigins": [
+ "http://localhost:8082"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ],
+ "access": {
+ "view": true,
+ "configure": true,
+ "manage": true
+ }
+ },
+ {
+ "clientId": "kogito-app",
+ "rootUrl": "http://localhost:8080",
+ "adminUrl": "http://localhost:8080",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "secret",
+ "redirectUris": [
+ "http://localhost:8080/*"
+ ],
+ "webOrigins": [
+ "*"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ],
+ "access": {
+ "view": true,
+ "configure": true,
+ "manage": true
+ }
+ },
+ {
+ "clientId": "kogito-service",
+ "rootUrl": "",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "secret",
+ "redirectUris": [
+ "*"
+ ],
+ "webOrigins": [
+ "*"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": true,
+ "authorizationServicesEnabled": true,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "protocolMappers": [
+ {
+ "name": "Client ID",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usersessionmodel-note-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.session.note": "clientId",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "clientId",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "Client IP Address",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usersessionmodel-note-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.session.note": "clientAddress",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "clientAddress",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "Client Host",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usersessionmodel-note-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.session.note": "clientHost",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "clientHost",
+ "jsonType.label": "String"
+ }
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ],
+ "authorizationSettings": {
+ "allowRemoteResourceManagement": true,
+ "policyEnforcementMode": "ENFORCING",
+ "resources": [
+ {
+ "name": "User Resource",
+ "ownerManagedAccess": false,
+ "attributes": {},
+ "_id": "df1b74a9-3f10-499d-a581-368de48e512b",
+ "uris": [
+ "/api/users/*"
+ ]
+ },
+ {
+ "name": "Administration Resource",
+ "ownerManagedAccess": false,
+ "attributes": {},
+ "_id": "7124e2f1-e6dc-44b4-87ab-24b010090b97",
+ "uris": [
+ "/api/admin/*"
+ ]
+ }
+ ],
+ "policies": [
+ {
+ "name": "Any User Policy",
+ "description": "Any user granted with the user role can access something",
+ "type": "role",
+ "logic": "POSITIVE",
+ "decisionStrategy": "UNANIMOUS",
+ "config": {
+ "roles": "[{\"id\":\"user\",\"required\":false}]"
+ }
+ },
+ {
+ "name": "Only Administrators",
+ "description": "Only administrators can access",
+ "type": "role",
+ "logic": "POSITIVE",
+ "decisionStrategy": "UNANIMOUS",
+ "config": {
+ "roles": "[{\"id\":\"admin\",\"required\":false}]"
+ }
+ },
+ {
+ "name": "User Resource Permission",
+ "type": "resource",
+ "logic": "POSITIVE",
+ "decisionStrategy": "UNANIMOUS",
+ "config": {
+ "resources": "[\"User Resource\"]",
+ "applyPolicies": "[\"Any User Policy\"]"
+ }
+ },
+ {
+ "name": "Administration Resource Permission",
+ "type": "resource",
+ "logic": "POSITIVE",
+ "decisionStrategy": "UNANIMOUS",
+ "config": {
+ "resources": "[\"Administration Resource\"]",
+ "applyPolicies": "[\"Only Administrators\"]"
+ }
+ }
+ ],
+ "scopes": [],
+ "decisionStrategy": "UNANIMOUS"
+ }
+ },
+ {
+ "clientId": "kogito-console-react",
+ "rootUrl": "http://localhost:9000",
+ "adminUrl": "http://localhost:9000/",
+ "baseUrl": "http://localhost:9000/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [
+ "http://localhost:9000/*"
+ ],
+ "webOrigins": [
+ "*"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "clientId": "kogito-console-quarkus",
+ "rootUrl": "http://localhost:8380",
+ "adminUrl": "http://localhost:8380/",
+ "baseUrl": "http://localhost:8380/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [
+ "http://localhost:8380/*",
+ "http://localhost:8280/*"
+ ],
+ "webOrigins": [
+ "*"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "protocolMappers": [
+ {
+ "name": "groups",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "multivalued": "true",
+ "user.attribute": "foo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "groups",
+ "jsonType.label": "String"
+ }
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "clientId": "kogito-jobs-service",
+ "rootUrl": "http://localhost:8080",
+ "adminUrl": "http://localhost:8080",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "secret",
+ "redirectUris": [
+ "http://localhost:8080/*"
+ ],
+ "webOrigins": [
+ "http://localhost:8080"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ],
+ "access": {
+ "view": true,
+ "configure": true,
+ "manage": true
+ }
+ },
+ {
+ "clientId": "realm-management",
+ "name": "${client_realm-management}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "c41b709a-a012-4c69-89d7-4f926dba0619",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": true,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "clientId": "security-admin-console",
+ "name": "${client_security-admin-console}",
+ "baseUrl": "/auth/admin/kogito/console/index.html",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "e571b211-2550-475d-b87f-116ff54091ee",
+ "redirectUris": [
+ "/auth/admin/kogito/console/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "protocolMappers": [
+ {
+ "name": "locale",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "locale",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "locale",
+ "jsonType.label": "String"
+ }
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "profile",
+ "roles",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ }
+ ],
+ "clientScopes": [
+ {
+ "name": "address",
+ "description": "OpenID Connect built-in scope: address",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${addressScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "name": "address",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-address-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute.formatted": "formatted",
+ "user.attribute.country": "country",
+ "user.attribute.postal_code": "postal_code",
+ "userinfo.token.claim": "true",
+ "user.attribute.street": "street",
+ "id.token.claim": "true",
+ "user.attribute.region": "region",
+ "access.token.claim": "true",
+ "user.attribute.locality": "locality"
+ }
+ }
+ ]
+ },
+ {
+ "name": "email",
+ "description": "OpenID Connect built-in scope: email",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${emailScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "name": "email",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "email",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "email",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "email verified",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "emailVerified",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "email_verified",
+ "jsonType.label": "boolean"
+ }
+ }
+ ]
+ },
+ {
+ "name": "microprofile-jwt",
+ "description": "Microprofile - JWT built-in scope",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "false"
+ },
+ "protocolMappers": [
+ {
+ "name": "upn",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "username",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "upn",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "groups",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "multivalued": "true",
+ "user.attribute": "foo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "groups",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "name": "offline_access",
+ "description": "OpenID Connect built-in scope: offline_access",
+ "protocol": "openid-connect",
+ "attributes": {
+ "consent.screen.text": "${offlineAccessScopeConsentText}",
+ "display.on.consent.screen": "true"
+ }
+ },
+ {
+ "name": "phone",
+ "description": "OpenID Connect built-in scope: phone",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${phoneScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "name": "phone number verified",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "phoneNumberVerified",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "phone_number_verified",
+ "jsonType.label": "boolean"
+ }
+ },
+ {
+ "name": "phone number",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "phoneNumber",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "phone_number",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "name": "profile",
+ "description": "OpenID Connect built-in scope: profile",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${profileScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "name": "nickname",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "nickname",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "nickname",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "zoneinfo",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "zoneinfo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "zoneinfo",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "updated at",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "updatedAt",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "updated_at",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "birthdate",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "birthdate",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "birthdate",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "given name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "firstName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "given_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "full name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-full-name-mapper",
+ "consentRequired": false,
+ "config": {
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "userinfo.token.claim": "true"
+ }
+ },
+ {
+ "name": "middle name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "middleName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "middle_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "username",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "username",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "preferred_username",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "family name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "lastName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "family_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "gender",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "gender",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "gender",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "picture",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "picture",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "picture",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "locale",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "locale",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "locale",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "profile",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "profile",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "profile",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "name": "website",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "website",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "website",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "name": "role_list",
+ "description": "SAML role list",
+ "protocol": "saml",
+ "attributes": {
+ "consent.screen.text": "${samlRoleListScopeConsentText}",
+ "display.on.consent.screen": "true"
+ },
+ "protocolMappers": [
+ {
+ "name": "role list",
+ "protocol": "saml",
+ "protocolMapper": "saml-role-list-mapper",
+ "consentRequired": false,
+ "config": {
+ "single": "false",
+ "attribute.nameformat": "Basic",
+ "attribute.name": "Role"
+ }
+ }
+ ]
+ },
+ {
+ "name": "roles",
+ "description": "OpenID Connect scope for add user roles to the access token",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "false",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${rolesScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "name": "realm roles",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute": "foo",
+ "access.token.claim": "true",
+ "claim.name": "realm_access.roles",
+ "jsonType.label": "String",
+ "multivalued": "true"
+ }
+ },
+ {
+ "name": "audience resolve",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-audience-resolve-mapper",
+ "consentRequired": false,
+ "config": {}
+ },
+ {
+ "name": "client roles",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-client-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute": "foo",
+ "access.token.claim": "true",
+ "claim.name": "resource_access.${client_id}.roles",
+ "jsonType.label": "String",
+ "multivalued": "true"
+ }
+ }
+ ]
+ },
+ {
+ "name": "web-origins",
+ "description": "OpenID Connect scope for add allowed web origins to the access token",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "false",
+ "display.on.consent.screen": "false",
+ "consent.screen.text": ""
+ },
+ "protocolMappers": [
+ {
+ "name": "allowed web origins",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-allowed-origins-mapper",
+ "consentRequired": false,
+ "config": {}
+ }
+ ]
+ }
+ ],
+ "defaultDefaultClientScopes": [
+ "role_list",
+ "profile",
+ "email",
+ "roles",
+ "web-origins"
+ ],
+ "defaultOptionalClientScopes": [
+ "offline_access",
+ "address",
+ "phone",
+ "microprofile-jwt"
+ ],
+ "browserSecurityHeaders": {
+ "contentSecurityPolicyReportOnly": "",
+ "xContentTypeOptions": "nosniff",
+ "xRobotsTag": "none",
+ "xFrameOptions": "SAMEORIGIN",
+ "xXSSProtection": "1; mode=block",
+ "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
+ "strictTransportSecurity": "max-age=31536000; includeSubDomains"
+ },
+ "smtpServer": {},
+ "eventsEnabled": false,
+ "eventsListeners": [
+ "jboss-logging"
+ ],
+ "enabledEventTypes": [],
+ "adminEventsEnabled": false,
+ "adminEventsDetailsEnabled": false,
+ "components": {
+ "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [
+ {
+ "name": "Allowed Protocol Mapper Types",
+ "providerId": "allowed-protocol-mappers",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "allowed-protocol-mapper-types": [
+ "oidc-full-name-mapper",
+ "saml-user-attribute-mapper",
+ "saml-user-property-mapper",
+ "oidc-address-mapper",
+ "saml-role-list-mapper",
+ "oidc-sha256-pairwise-sub-mapper",
+ "oidc-usermodel-attribute-mapper",
+ "oidc-usermodel-property-mapper"
+ ]
+ }
+ },
+ {
+ "name": "Allowed Client Scopes",
+ "providerId": "allowed-client-templates",
+ "subType": "authenticated",
+ "subComponents": {},
+ "config": {
+ "allow-default-scopes": [
+ "true"
+ ]
+ }
+ },
+ {
+ "name": "Allowed Client Scopes",
+ "providerId": "allowed-client-templates",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "allow-default-scopes": [
+ "true"
+ ]
+ }
+ },
+ {
+ "name": "Trusted Hosts",
+ "providerId": "trusted-hosts",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "host-sending-registration-request-must-match": [
+ "true"
+ ],
+ "client-uris-must-match": [
+ "true"
+ ]
+ }
+ },
+ {
+ "name": "Full Scope Disabled",
+ "providerId": "scope",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {}
+ },
+ {
+ "name": "Max Clients Limit",
+ "providerId": "max-clients",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "max-clients": [
+ "200"
+ ]
+ }
+ },
+ {
+ "name": "Consent Required",
+ "providerId": "consent-required",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {}
+ },
+ {
+ "name": "Allowed Protocol Mapper Types",
+ "providerId": "allowed-protocol-mappers",
+ "subType": "authenticated",
+ "subComponents": {},
+ "config": {
+ "allowed-protocol-mapper-types": [
+ "saml-user-attribute-mapper",
+ "oidc-full-name-mapper",
+ "saml-role-list-mapper",
+ "saml-user-property-mapper",
+ "oidc-usermodel-attribute-mapper",
+ "oidc-address-mapper",
+ "oidc-usermodel-property-mapper",
+ "oidc-sha256-pairwise-sub-mapper"
+ ]
+ }
+ }
+ ],
+ "org.keycloak.keys.KeyProvider": [
+ {
+ "name": "rsa-generated",
+ "providerId": "rsa-generated",
+ "subComponents": {},
+ "config": {
+ "privateKey": [
+ "MIIEowIBAAKCAQEAn5T13suF8mlS+pJXp0U1bto41nW55wpcs+Rps8ZVCRyJKWqzwSCYnI7lm0rB2wBpAAO4OPoj1zlmVoFmBPsDU9Xf7rjsJb5LIzIQDCZY44aSDZt6RR+gakPiQvlzHyW/RozYpngDJF7TsTD7rdRF1xQ4RprfBF8fwK/xsU7pxbeom5xDHZhz3fiw8s+7UdbmnazDHfAjU58aUrLGgVRfUsuoHjtsptYlOIXEifaeMetXZE+HhqLYRHQPDap5fbBJl773Trosn7N9nmzN4x1xxGj9So21WC5UboQs9sAIVgizc4omjZ5Y4RN9HLH7G4YwJctNntzmnJhDui9zAO+zSQIDAQABAoIBADi+F7rTtVoft0Cfnok8o6Y58/HVxHdxiMryUd95iy0FN4RBi48FTx6D9QKFz25Ws/8sU2n3D51srIXf1u24b1N0/f39RQKaqk7mcyxOylaEuBQcj5pah4ihgKd92UBfBKdKV5LBo6RgD3e2yhbiHr8+UlBQqzH7vOef6Bm6zIbfmi3N88swAJhP0YizRZFklsbmLsK6nkwyro00CHJvPVKSBbM+ad+/zIBsLw56MvNngB5TuFguUgoljd6M1T2z4utmZGlTUqrfE1onAVLJZoGnRohyIr7dJEg6YxWR70PxsgmkDKyeRvet9P1trO0n+OSprusfrC3cHJStabap1V0CgYEA1A/CtsqTnjdYYsB19eumZgdpzUgNc/YEAzZ/OWb8yTLoB2ncci+63A1rXHUXAqJFY7vtjn5mxv7SuASNbUrzq+6KfZvC1x9XEtnczqT/ypunNfxmIZuj8Nuu6vtURguZ8kPPwdkI8toTizRFeRE5ZDBvoQryiEVYugfHaHT5vzsCgYEAwKWODwquI0Lv9BuwdNVrBXQpkKh3ZfYOA7i9xvhxlM7xUu8OMCwwCPn3r7vrW5APjTqX4h330mJ44SLEs+7gbCUs4BbJBLA6g0ChlHa9PTkxp6tk2nDF/B34fxiZSRkE85L+d+at0Dc3hnlzLCJCzJawGpoPniPU9e4w0p4dN0sCgYAsGnMGjS8SUrRhJWHjGXVr9tK8TOXvXhULjgP7rj2Yoqu7Dvs4DFEyft/7RKbad2EzEtyfLA64CDtO5jN7rYDsGxpWcVSeZPg5BXJ0z8AbJTArfCjJiJMZ/rZsTIUEZFlKF2xYBolj6JLz+pUQTtK+0YwF1D8ItFN1rTR9twZSDQKBgQC6sPXNX+VH6LuPTjIf1x8CxwLs3EXxOpV0R9kp9GRl+HJnk6GlT30xhcThufQo5KAdllXQXIhoiuNoEoCbevhj9Vbax1oBQCNERSMRNEzKAx46xd9TzYwgeo7x5E3QR/3DaoVOfu+cY5ZcrF/PulgP2kxJS1mtQD5GIpGP2oinpwKBgGqiqTFPqRcelx76vBvTU+Jp1zM62T4AotbMrSQR/oUvqHe5Ytj/SbZx+wbbHAiyGgV700Mosyviik83YEAbR3kdOPjgYvAJJW2Y3jEMdQ7MwriXz8XLh5BGmYfVjkSOJXed9ua9WlYLKOJeXXv191BbDvrx5NXuJyVVU4vJx3YZ"
+ ],
+ "certificate": [
+ "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFYIs3OKJo2eWOETfRyx+xuGMCXLTZ7c5pyYQ7ovcwDvs0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVtmRKDb4OK5iSA46tagMBkp6L7WuPpCWuHGWwobEP+BecYsShW7zP3s12oA8SNSwbhvu0CRqgzxhuypgf3hKQFVU153Erv4hzkj+8S0s5LR/ZE7tDNY2lzJ3yQKXy3Md7EkuzzvOZ50MTrcSKAanWq/ZW1OTnrtGymj5zGJnTg7mMnJzEIGePxkvPu/QdchiPBLqxfZYm1jsFGY25djOC3N/KmVcRVmPRGuu6D8tBFHlKoPfZYPdbMvsvs24aupHKRcZ+ofTCpK+2Qo8c0pSSqeEYHGmuGqC6lC6ozxtxSABPO9Q1R1tZBU7Kg5HvXUwwmoVS3EGub46YbHqbmWMLg=="
+ ],
+ "priority": [
+ "100"
+ ]
+ }
+ },
+ {
+ "name": "hmac-generated",
+ "providerId": "hmac-generated",
+ "subComponents": {},
+ "config": {
+ "kid": [
+ "96afd00e-85cf-4d35-b18e-061d3813d8b2"
+ ],
+ "secret": [
+ "qBFGKdUGf6xDgKphnRfoFzIzaFHJW4bYnZ9MinPFzN38X5_ctq-2u1q5RdZzeJukXvk2biHB8_s3DxWmmLZFsA"
+ ],
+ "priority": [
+ "100"
+ ],
+ "algorithm": [
+ "HS256"
+ ]
+ }
+ },
+ {
+ "name": "aes-generated",
+ "providerId": "aes-generated",
+ "subComponents": {},
+ "config": {
+ "kid": [
+ "b04473d3-8395-4016-b455-19a9e951106b"
+ ],
+ "secret": [
+ "x68mMOVdz3qKWzltzReV0g"
+ ],
+ "priority": [
+ "100"
+ ]
+ }
+ }
+ ]
+ },
+ "internationalizationEnabled": false,
+ "supportedLocales": [],
+ "authenticationFlows": [
+ {
+ "alias": "Handle Existing Account",
+ "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-confirm-link",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "idp-email-verification",
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "flowAlias": "Verify Existing Account by Re-authentication",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "alias": "Verify Existing Account by Re-authentication",
+ "description": "Reauthentication of existing account",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-username-password-form",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-otp-form",
+ "requirement": "OPTIONAL",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "browser",
+ "description": "browser based authentication",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "auth-cookie",
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-spnego",
+ "requirement": "DISABLED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "identity-provider-redirector",
+ "requirement": "ALTERNATIVE",
+ "priority": 25,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "flowAlias": "forms",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "alias": "clients",
+ "description": "Base authentication for clients",
+ "providerId": "client-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "client-secret",
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "client-jwt",
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "client-secret-jwt",
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "client-x509",
+ "requirement": "ALTERNATIVE",
+ "priority": 40,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "direct grant",
+ "description": "OpenID Connect Resource Owner Grant",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "direct-grant-validate-username",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "direct-grant-validate-password",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "direct-grant-validate-otp",
+ "requirement": "OPTIONAL",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "docker auth",
+ "description": "Used by Docker clients to authenticate against the IDP",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "docker-http-basic-authenticator",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "first broker login",
+ "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticatorConfig": "review profile config",
+ "authenticator": "idp-review-profile",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticatorConfig": "create unique user config",
+ "authenticator": "idp-create-user-if-unique",
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "flowAlias": "Handle Existing Account",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "alias": "forms",
+ "description": "Username, password, otp and other auth forms.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "auth-username-password-form",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-otp-form",
+ "requirement": "OPTIONAL",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "http challenge",
+ "description": "An authentication flow based on challenge-response HTTP Authentication Schemes",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "no-cookie-redirect",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "basic-auth",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "basic-auth-otp",
+ "requirement": "DISABLED",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-spnego",
+ "requirement": "DISABLED",
+ "priority": 40,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "registration",
+ "description": "registration flow",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "registration-page-form",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "flowAlias": "registration form",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "alias": "registration form",
+ "description": "registration form",
+ "providerId": "form-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "registration-user-creation",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "registration-profile-action",
+ "requirement": "REQUIRED",
+ "priority": 40,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "registration-password-action",
+ "requirement": "REQUIRED",
+ "priority": 50,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "registration-recaptcha-action",
+ "requirement": "DISABLED",
+ "priority": 60,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "reset credentials",
+ "description": "Reset credentials for a user if they forgot their password or something",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "reset-credentials-choose-user",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "reset-credential-email",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "reset-password",
+ "requirement": "REQUIRED",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "reset-otp",
+ "requirement": "OPTIONAL",
+ "priority": 40,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "alias": "saml ecp",
+ "description": "SAML ECP Profile Authentication Flow",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "http-basic-authenticator",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ }
+ ],
+ "authenticatorConfig": [
+ {
+ "alias": "create unique user config",
+ "config": {
+ "require.password.update.after.registration": "false"
+ }
+ },
+ {
+ "alias": "review profile config",
+ "config": {
+ "update.profile.on.first.login": "missing"
+ }
+ }
+ ],
+ "requiredActions": [
+ {
+ "alias": "CONFIGURE_TOTP",
+ "name": "Configure OTP",
+ "providerId": "CONFIGURE_TOTP",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 10,
+ "config": {}
+ },
+ {
+ "alias": "terms_and_conditions",
+ "name": "Terms and Conditions",
+ "providerId": "terms_and_conditions",
+ "enabled": false,
+ "defaultAction": false,
+ "priority": 20,
+ "config": {}
+ },
+ {
+ "alias": "UPDATE_PASSWORD",
+ "name": "Update Password",
+ "providerId": "UPDATE_PASSWORD",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 30,
+ "config": {}
+ },
+ {
+ "alias": "UPDATE_PROFILE",
+ "name": "Update Profile",
+ "providerId": "UPDATE_PROFILE",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 40,
+ "config": {}
+ },
+ {
+ "alias": "VERIFY_EMAIL",
+ "name": "Verify Email",
+ "providerId": "VERIFY_EMAIL",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 50,
+ "config": {}
+ }
+ ],
+ "browserFlow": "browser",
+ "registrationFlow": "registration",
+ "directGrantFlow": "direct grant",
+ "resetCredentialsFlow": "reset credentials",
+ "clientAuthenticationFlow": "clients",
+ "dockerAuthenticationFlow": "docker auth",
+ "attributes": {
+ "_browser_header.xXSSProtection": "1; mode=block",
+ "_browser_header.xFrameOptions": "SAMEORIGIN",
+ "_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains",
+ "permanentLockout": "false",
+ "quickLoginCheckMilliSeconds": "1000",
+ "_browser_header.xRobotsTag": "none",
+ "maxFailureWaitSeconds": "900",
+ "minimumQuickLoginWaitSeconds": "60",
+ "failureFactor": "30",
+ "actionTokenGeneratedByUserLifespan": "300",
+ "maxDeltaTimeSeconds": "43200",
+ "_browser_header.xContentTypeOptions": "nosniff",
+ "offlineSessionMaxLifespan": "5184000",
+ "actionTokenGeneratedByAdminLifespan": "43200",
+ "_browser_header.contentSecurityPolicyReportOnly": "",
+ "bruteForceProtected": "false",
+ "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
+ "waitIncrementSeconds": "60",
+ "offlineSessionMaxLifespanEnabled": "false"
+ },
+ "users": [
+ {
+ "username": "admin",
+ "enabled": true,
+ "totp": false,
+ "emailVerified": false,
+ "credentials": [
+ {
+ "type": "password",
+ "hashedSaltedValue": "NICTtwsvSxJ5hL8hLAuleDUv9jwZcuXgxviMXvR++cciyPtiIEStEaJUyfA9DOir59awjPrHOumsclPVjNBplA==",
+ "salt": "T/2P5o5oxFJUEk68BRURRg==",
+ "hashIterations": 27500,
+ "counter": 0,
+ "algorithm": "pbkdf2-sha256",
+ "digits": 0,
+ "period": 0,
+ "createdDate": 1554245879354,
+ "config": {}
+ }
+ ],
+ "disableableCredentialTypes": [
+ "password"
+ ],
+ "requiredActions": [],
+ "realmRoles": [
+ "admin",
+ "managers",
+ "user",
+ "IT",
+ "HR"
+ ],
+ "notBefore": 0,
+ "groups": []
+ },
+ {
+ "username": "alice",
+ "enabled": true,
+ "totp": false,
+ "emailVerified": false,
+ "credentials": [
+ {
+ "type": "password",
+ "hashedSaltedValue": "A3okqV2T/ybXTVEgKfosoSjP8Yc9IZbFP/SY4cEd6hag7TABQrQ6nUSuwagGt96l8cw1DTijO75PqX6uiTXMzw==",
+ "salt": "sl4mXx6T9FypPH/s9TngfQ==",
+ "hashIterations": 27500,
+ "counter": 0,
+ "algorithm": "pbkdf2-sha256",
+ "digits": 0,
+ "period": 0,
+ "createdDate": 1554245879116,
+ "config": {}
+ }
+ ],
+ "disableableCredentialTypes": [
+ "password"
+ ],
+ "requiredActions": [],
+ "realmRoles": [
+ "user",
+ "HR"
+ ],
+ "notBefore": 0,
+ "groups": []
+ },
+ {
+ "username": "jdoe",
+ "enabled": true,
+ "totp": false,
+ "emailVerified": false,
+ "credentials": [
+ {
+ "type": "password",
+ "hashedSaltedValue": "JV3DUNLjqOadjbBOtC4rvacQI553CGaDGAzBS8MR5ReCr7SwF3E6CsW3T7/XO8ITZAsch8+A/6loeuCoVLLJrg==",
+ "salt": "uCbOH7HZtyDtMd0E9DG/nw==",
+ "hashIterations": 27500,
+ "counter": 0,
+ "algorithm": "pbkdf2-sha256",
+ "digits": 0,
+ "period": 0,
+ "createdDate": 1554245879227,
+ "config": {}
+ }
+ ],
+ "disableableCredentialTypes": [
+ "password"
+ ],
+ "requiredActions": [],
+ "realmRoles": [
+ "managers",
+ "user",
+ "IT"
+ ],
+ "notBefore": 0,
+ "groups": []
+ }
+ ],
+ "keycloakVersion": "6.0.0",
+ "userManagedAccessAllowed": false
+}
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/pgadmin/pgpass b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/pgadmin/pgpass
new file mode 100644
index 0000000000..11a6f7c601
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/pgadmin/pgpass
@@ -0,0 +1,3 @@
+postgres:5432:kogito:kogito-user:kogito-pass
+postgres:5432:keycloak:kogito-user:kogito-pass
+postgres:5432:postgres:kogito-user:kogito-pass
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/pgadmin/servers.json b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/pgadmin/servers.json
new file mode 100644
index 0000000000..a112980d55
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/pgadmin/servers.json
@@ -0,0 +1,14 @@
+{
+ "Servers": {
+ "1": {
+ "Name": "kogito",
+ "Group": "Servers",
+ "Host": "postgres",
+ "Port": 5432,
+ "MaintenanceDB": "kogito",
+ "Username": "kogito-user",
+ "SSLMode": "disable",
+ "PassFile": "/var/lib/pgadmin/pgpass"
+ }
+ }
+}
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/sql/init.sql b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/sql/init.sql
new file mode 100644
index 0000000000..92ea9b4e5c
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/sql/init.sql
@@ -0,0 +1,33 @@
+CREATE ROLE "kogito-user" WITH
+ LOGIN
+ SUPERUSER
+ INHERIT
+ CREATEDB
+ CREATEROLE
+ NOREPLICATION
+ PASSWORD 'kogito-pass';
+
+CREATE DATABASE kogito
+ WITH
+ OWNER = "kogito-user"
+ ENCODING = 'UTF8'
+ LC_COLLATE = 'en_US.utf8'
+ LC_CTYPE = 'en_US.utf8'
+ TABLESPACE = pg_default
+ CONNECTION LIMIT = -1;
+
+CREATE DATABASE keycloak
+ WITH
+ OWNER = "kogito-user"
+ ENCODING = 'UTF8'
+ LC_COLLATE = 'en_US.utf8'
+ LC_CTYPE = 'en_US.utf8'
+ TABLESPACE = pg_default
+ CONNECTION LIMIT = -1;
+
+GRANT ALL PRIVILEGES ON DATABASE postgres TO "kogito-user";
+GRANT ALL PRIVILEGES ON DATABASE kogito TO "kogito-user";
+GRANT ALL PRIVILEGES ON DATABASE kogito TO postgres;
+
+GRANT ALL PRIVILEGES ON DATABASE keycloak TO "kogito-user";
+GRANT ALL PRIVILEGES ON DATABASE keycloak TO postgres;
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/startServices.sh b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/startServices.sh
new file mode 100755
index 0000000000..5ff991124a
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/startServices.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+PROFILE="full"
+
+echo "Script requires your Kogito Example to be compiled"
+
+PROJECT_VERSION=$(cd ../ && mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
+
+echo "Project version: ${PROJECT_VERSION}"
+
+if [[ $PROJECT_VERSION == *SNAPSHOT ]];
+then
+ KOGITO_VERSION="latest"
+else
+ KOGITO_VERSION=${PROJECT_VERSION%.*}
+fi
+
+if [ -n "$1" ]; then
+ if [[ ("$1" == "full") || ("$1" == "infra") || ("$1" == "example")]];
+ then
+ PROFILE="$1"
+ else
+ echo "Unknown docker profile '$1'. The supported profiles are:"
+ echo "* 'infra': Use this profile to start only the minimum infrastructure to run the example (postgresql, data-index & jobs-service)."
+ echo "* 'example': Use this profile to start the example infrastructure and the kogito-example service. Requires the example to be compiled using the 'container' profile (-Pcontainer)"
+ echo "* 'full' (default): Starts full example setup, including infrastructure (database, data-index & jobs-service), the kogito-example-service container and the runtime consoles (management-console, task-console & keycloak). Requires the example to be compiled using the 'container' profile (-Pcontainer)"
+ exit 1;
+ fi
+fi
+
+echo "Kogito Image version: ${KOGITO_VERSION}"
+echo "KOGITO_VERSION=${KOGITO_VERSION}" > ".env"
+echo "COMPOSE_PROFILES='${PROFILE}'" >> ".env"
+
+if [ "$(uname)" == "Darwin" ]; then
+ echo "DOCKER_GATEWAY_HOST=kubernetes.docker.internal" >> ".env"
+elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
+ echo "DOCKER_GATEWAY_HOST=172.17.0.1" >> ".env"
+fi
+
+if [ ! -d "./persistence" ]
+then
+ echo "$KOGITO_EXAMPLE_PERSISTENCE does not exist. Have you compiled the project? mvn clean install -DskipTests"
+ exit 1
+fi
+PERSISTENCE_FOLDER=./persistence
+
+if [ ! -d "./svg" ]
+then
+ echo "$KOGITO_EXAMPLE_SVG_FOLDER does not exist. Have you compiled the project? mvn clean install -DskipTests"
+ exit 1
+fi
+
+docker compose up
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_1_mc_list.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_1_mc_list.png
new file mode 100644
index 0000000000..4e5aa6274d
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_1_mc_list.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_2_mc_details.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_2_mc_details.png
new file mode 100644
index 0000000000..f2b228f20d
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_2_mc_details.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_3_mc_details_executed_job.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_3_mc_details_executed_job.png
new file mode 100644
index 0000000000..1ab358819c
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g1_3_mc_details_executed_job.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_10_mc_details_completed.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_10_mc_details_completed.png
new file mode 100644
index 0000000000..610849f19e
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_10_mc_details_completed.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_1_mc_list.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_1_mc_list.png
new file mode 100644
index 0000000000..6526e8e7f2
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_1_mc_list.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_2_mc_details.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_2_mc_details.png
new file mode 100644
index 0000000000..ec18201f08
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_2_mc_details.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_3_tc_inbox.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_3_tc_inbox.png
new file mode 100644
index 0000000000..0d612f76c8
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_3_tc_inbox.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_4_tc_hr_form.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_4_tc_hr_form.png
new file mode 100644
index 0000000000..d89b41302d
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_4_tc_hr_form.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_5_tc_hr_form_notification.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_5_tc_hr_form_notification.png
new file mode 100644
index 0000000000..8dd81fc4a9
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_5_tc_hr_form_notification.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_6_mc_details.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_6_mc_details.png
new file mode 100644
index 0000000000..4970b8f837
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_6_mc_details.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_7_tc_inbox.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_7_tc_inbox.png
new file mode 100644
index 0000000000..03f63ff7b4
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_7_tc_inbox.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_8_tc_it_form.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_8_tc_it_form.png
new file mode 100644
index 0000000000..5e6872a09c
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_8_tc_it_form.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_9_tc_inbox_empty.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_9_tc_inbox_empty.png
new file mode 100644
index 0000000000..696433e93d
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/g2_9_tc_inbox_empty.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/generate_offer_assignments.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/generate_offer_assignments.png
new file mode 100644
index 0000000000..2e3f93529f
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/generate_offer_assignments.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/hiring_diagram.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/hiring_diagram.png
new file mode 100644
index 0000000000..cb57a2dfb9
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/hiring_diagram.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/hr_interview_assignments.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/hr_interview_assignments.png
new file mode 100644
index 0000000000..63de050eb5
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/hr_interview_assignments.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/it_interview_assignments.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/it_interview_assignments.png
new file mode 100644
index 0000000000..077430569d
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/it_interview_assignments.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/mc_details_1.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/mc_details_1.png
new file mode 100644
index 0000000000..2c1c3b26ab
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/mc_details_1.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/mc_list.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/mc_list.png
new file mode 100644
index 0000000000..4fc32b05cc
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/mc_list.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn.png
new file mode 100644
index 0000000000..451313a264
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn_decision.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn_decision.png
new file mode 100644
index 0000000000..f58d869d36
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn_decision.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn_types.png b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn_types.png
new file mode 100644
index 0000000000..d028d331da
Binary files /dev/null and b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docs/images/new_hiring_offer_dmn_types.png differ
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml
new file mode 100644
index 0000000000..9843eec268
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml
@@ -0,0 +1,241 @@
+
+
+
+ 4.0.0
+
+ org.kie.kogito.examples
+ kogito-quarkus-examples
+ 999-SNAPSHOT
+
+ process-usertasks-timer-data-index-persistence-addon-quarkus
+ Kogito Example :: Process Usertasks with Timer Data Index persistence addon Quarkus
+ Kogito user tasks orchestration with security enabled on REST api using the Data Index Persistence addon - Quarkus
+
+ 3.2.9.Final
+ quarkus-bom
+ io.quarkus
+ 3.2.9.Final
+ org.kie.kogito
+ kogito-bom
+ kogito-apps-bom
+ 999-SNAPSHOT
+
+
+
+
+ ${quarkus.platform.group-id}
+ ${quarkus.platform.artifact-id}
+ ${quarkus.platform.version}
+ pom
+ import
+
+
+ ${kogito.bom.group-id}
+ ${kogito.bom.artifact-id}
+ ${version.org.kie.kogito}
+ pom
+ import
+
+
+ ${kogito.bom.group-id}
+ ${kogito-apps.bom.artifact-id}
+ ${version.org.kie.kogito}
+ pom
+ import
+
+
+
+
+
+ io.quarkus
+ quarkus-resteasy
+
+
+ io.quarkus
+ quarkus-resteasy-jackson
+
+
+ io.quarkus
+ quarkus-smallrye-openapi
+
+
+ io.quarkus
+ quarkus-smallrye-health
+
+
+
+ org.kie.kogito
+ kogito-quarkus
+
+
+
+ org.kie.kogito
+ kogito-quarkus-processes
+
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-process-management
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-jobs-management
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-process-svg
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-source-files
+
+
+
+
+ io.quarkus
+ quarkus-jdbc-postgresql
+
+
+ io.quarkus
+ quarkus-agroal
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-persistence-jdbc
+
+
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-data-index-persistence-postgresql
+
+
+
+
+ org.kie.kogito
+ kogito-addons-quarkus-jobs
+
+
+ org.kie.kogito
+ jobs-service-postgresql-common
+
+
+
+
+ org.kie.kogito
+ kogito-addons-data-audit-jpa-quarkus
+
+
+ org.kie.kogito
+ kogito-addons-data-audit-quarkus
+
+
+
+
+ container
+
+ container
+
+
+
+ io.quarkus
+ quarkus-container-image-jib
+
+
+
+
+ development
+
+ dev
+
+
+
+ org.kie.kogito
+ runtime-tools-quarkus-extension
+
+
+
+
+
+ ${project.artifactId}
+
+
+ maven-compiler-plugin
+ ${version.compiler.plugin}
+
+ ${maven.compiler.release}
+
+
+
+ ${quarkus.platform.group-id}
+ quarkus-maven-plugin
+ ${quarkus-plugin.version}
+
+
+
+ build
+
+
+
+
+
+ maven-antrun-plugin
+
+
+ package
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ maven-failsafe-plugin
+
+
+ org.jboss.logmanager.LogManager
+ ${maven.home}
+
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/java/org/kie/kogito/hr/CandidateData.java b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/java/org/kie/kogito/hr/CandidateData.java
new file mode 100644
index 0000000000..eae14184da
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/java/org/kie/kogito/hr/CandidateData.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.hr;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+public class CandidateData {
+
+ private String name;
+
+ private String lastName;
+
+ private String email;
+
+ private Integer experience;
+
+ private List skills;
+
+ public CandidateData() {
+ }
+
+ public CandidateData(String name, String lastName, String email, Integer experience, List skills) {
+ this.name = name;
+ this.lastName = lastName;
+ this.email = email;
+ this.experience = experience;
+ this.skills = skills;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public Integer getExperience() {
+ return experience;
+ }
+
+ public void setExperience(Integer experience) {
+ this.experience = experience;
+ }
+
+ public List getSkills() {
+ return skills;
+ }
+
+ public void setSkills(List skills) {
+ this.skills = skills;
+ }
+
+ @JsonIgnore
+ public String getFullName() {
+ return name + " " + lastName;
+ }
+}
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/java/org/kie/kogito/hr/Offer.java b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/java/org/kie/kogito/hr/Offer.java
new file mode 100644
index 0000000000..a377b480aa
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/java/org/kie/kogito/hr/Offer.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.hr;
+
+public class Offer {
+
+ private String category;
+
+ private Integer salary;
+
+ public Offer() {
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public Integer getSalary() {
+ return salary;
+ }
+
+ public void setSalary(Integer salary) {
+ this.salary = salary;
+ }
+}
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/META-INF/processSVG/hiring.svg b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/META-INF/processSVG/hiring.svg
new file mode 100644
index 0000000000..fba0500706
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/META-INF/processSVG/hiring.svg
@@ -0,0 +1 @@
+HR Interview IT Interview New Hiring Send notification HR Interview avoided Application denied Generate base offer Log Offer Send Offer to Candidate
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/META-INF/resources/index.html b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/META-INF/resources/index.html
new file mode 100644
index 0000000000..8556bab48e
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/META-INF/resources/index.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+ Kogito quickstart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to Kogito
+
+ Cloud-native business automation for building intelligent applications, backed by
+ battle-tested capabilities.
+
+
+ Get Started
+
+
+ Latest updates
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/NewHiringOffer.dmn b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/NewHiringOffer.dmn
new file mode 100644
index 0000000000..67b0eded68
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/NewHiringOffer.dmn
@@ -0,0 +1,163 @@
+
+
+
+
+
+ string
+
+
+ string
+
+
+ string
+
+
+ number
+
+
+ string
+
+
+
+
+ number
+
+
+ string
+
+ "Software Engineer", "Senior Software Engineer", "Software Architect"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ count(CandidateData.skills) * 150
+
+
+
+
+
+
+
+ CandidateData.experience
+
+
+
+
+ "Software Engineer", "Senior Software Engineer", "Software Architect"
+
+
+
+
+
+
+ [0..5)
+
+
+ "Software Engineer"
+
+
+ 30000 + SalaryBonus
+
+
+
+
+
+
+
+ [5..10)
+
+
+ "Senior Software Engineer"
+
+
+ 40000 + SalaryBonus
+
+
+
+
+
+
+
+ >=10
+
+
+ "Software Architect"
+
+
+ 50000 + SalaryBonus
+
+
+
+
+
+
+
+
+
+ Offer
+
+
+
+
+
+
+
+
+
+ 50
+ 120
+ 926
+
+
+ 926
+
+
+ 50
+ 175
+ 104
+ 437
+ 140
+
+
+ 926
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/application.properties b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/application.properties
new file mode 100644
index 0000000000..61f77f5d5f
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/application.properties
@@ -0,0 +1,52 @@
+# Packaging
+#quarkus.package.type=fast-jar
+
+#https://quarkus.io/guides/openapi-swaggerui
+quarkus.http.cors=true
+quarkus.smallrye-openapi.path=/docs/openapi.json
+quarkus.swagger-ui.always-include=true
+quarkus.kogito.data-index.graphql.ui.always-include=true
+quarkus.http.test-port=0
+
+# Kogito-service
+kogito.service.url=http://localhost:8080
+
+#Job-service
+kogito.jobs-service.url=http://localhost:8080
+
+# to be reachable from the container running job-service
+kogito.dataindex.http.url=http://localhost:8180
+kogito.dataindex.ws.url=ws://localhost:8180
+
+# run create tables scripts
+quarkus.flyway.migrate-at-start=true
+quarkus.flyway.baseline-on-migrate=true
+quarkus.flyway.baseline-version=0.0
+quarkus.flyway.locations=classpath:/db/migration,classpath:/db/jobs-service,classpath:/db/data-audit/postgresql
+quarkus.flyway.table=FLYWAY_RUNTIME_SERVICE
+
+kogito.persistence.type=jdbc
+quarkus.datasource.db-kind=postgresql
+%prod.quarkus.datasource.username=kogito-user
+%prod.quarkus.datasource.password=kogito-pass
+%prod.quarkus.datasource.jdbc.url=${QUARKUS_DATASOURCE_JDBC_URL:jdbc:postgresql://localhost:5432/kogito}
+%prod.quarkus.datasource.reactive.url=${QUARKUS_DATASOURCE_REACTIVE_URL:postgresql://localhost:5432/kogito}
+
+quarkus.native.native-image-xmx=8g
+
+# profile to pack this example into a container, to use it execute activate the maven container profile, -Pcontainer
+%container.quarkus.container-image.build=true
+%container.quarkus.container-image.push=false
+%container.quarkus.container-image.group=${USER}
+%container.quarkus.container-image.registry=dev.local
+%container.quarkus.container-image.tag=1.0-SNAPSHOT
+%container.quarkus.jib.jvm-entrypoint=/home/kogito/kogito-app-launch.sh
+%container.quarkus.jib.base-jvm-image=quay.io/kiegroup/kogito-runtime-jvm-nightly:latest
+%container.quarkus.jib.working-directory=/home/kogito/bin
+%container.quarkus.container-image.name=kogito-example-service
+
+%dev.quarkus.kogito.devservices.enabled=true
+%dev.kogito.users.jdoe.groups=admin,HR,IT
+
+# Disabling OIDC
+quarkus.oidc.enabled=false
\ No newline at end of file
diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/hiring.bpmn b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/hiring.bpmn
new file mode 100644
index 0000000000..3c043c24cf
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/hiring.bpmn
@@ -0,0 +1,691 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _B11455DE-F77A-4251-A85B-4C66636E3CD9
+ _7DDA574A-C220-4FEF-9784-22EF8052EDEC
+ System.out.println("###################################");
+System.out.println("To: " + candidateData.getEmail());
+System.out.println("Subject: Congratulations you made it!");
+System.out.println("Dear " + candidateData.getFullName() + ", we are happy to tell you that you've successfuly went trhough the hiring process. You'll find the fina Offer details in attached.");
+System.out.println("Job Category: " + offer.getCategory());
+System.out.println("Base salary: " + offer.getSalary());
+System.out.println("###################################");
+
+
+
+
+
+
+
+ _9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5
+ _ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383
+ System.out.println("###################################");
+System.out.println("Generated offer for candidate: " + candidateData.getFullName());
+System.out.println("Job Category: " + offer.getCategory());
+System.out.println("Base salary: " + offer.getSalary());
+System.out.println("###################################");
+
+
+ _7DDA574A-C220-4FEF-9784-22EF8052EDEC
+
+
+
+
+
+
+
+ _59F9A0E6-7F9C-43A9-8920-5B40A91169E6
+ _9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5
+
+
+
+
+
+
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX
+
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX
+
+
+
+
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX
+
+
+
+
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX
+
+
+
+
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX
+
+
+
+
+
+
+ candidateData
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX
+
+
+ _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX
+ offer
+
+
+
+ _527D3164-4989-4D2C-B80B-9BA9D4C8FB89
+
+
+
+
+
+
+
+ _94172225-E124-4F14-98DA-C3D62C11254A
+ _527D3164-4989-4D2C-B80B-9BA9D4C8FB89
+ System.out.println("###################################");
+System.out.println("Candidate " + candidateData.getFullName() + " don't meet the requirements for the position but we'll keep it on records for the future!");
+System.out.println("###################################");
+
+
+
+ _5334FFDC-1FCB-47E6-8085-36DC9A3D17B9
+ _B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E
+ _C6E61C53-FD35-4347-B69E-30AA93AE4404
+ _94172225-E124-4F14-98DA-C3D62C11254A
+
+
+ _5162ABF0-DD2E-4BDC-9A46-DDCFCB010287
+ _59F9A0E6-7F9C-43A9-8920-5B40A91169E6
+ _C6E61C53-FD35-4347-B69E-30AA93AE4404
+
+
+ _C62F7EFB-A009-450A-81C7-57D36F0DF766
+ _B11455DE-F77A-4251-A85B-4C66636E3CD9
+ _B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E
+
+
+
+
+
+
+
+ _7B41F971-C74D-4036-8A5E-EFF81C37986A
+ _5334FFDC-1FCB-47E6-8085-36DC9A3D17B9
+ System.out.println("###################################");
+System.out.println("HR Interview have been avoided after reasonable time");
+System.out.println("###################################");
+
+
+
+
+
+
+
+
+ _8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A
+ _5162ABF0-DD2E-4BDC-9A46-DDCFCB010287
+ System.out.println("New Hiring has been created for candidate: " + candidateData.getFullName());
+
+kcontext.setVariable("hr_approval", false);
+kcontext.setVariable("it_approval", false);
+
+
+
+
+
+
+
+ _A76C6603-0406-423C-940B-3403948DCA1F
+ _C62F7EFB-A009-450A-81C7-57D36F0DF766
+
+
+
+
+
+
+
+
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX
+
+
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX
+
+
+
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX
+
+
+
+
+
+
+ candidateData
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX
+
+
+ offer
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX
+
+
+ it_approval
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX
+
+
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX
+
+
+
+
+
+
+ _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX
+ it_approval
+
+
+
+ jdoe
+
+
+
+
+
+
+
+
+
+ _ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383
+ _A76C6603-0406-423C-940B-3403948DCA1F
+
+
+
+
+
+
+
+
+
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX
+
+
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX
+
+
+
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX
+
+
+
+
+
+
+ candidateData
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX
+
+
+ offer
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX
+
+
+ hr_approval
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX
+
+
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX
+
+
+
+
+
+
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX
+ hr_approval
+
+
+ _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX
+ offer
+
+
+
+ jdoe
+
+
+
+
+ _8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A
+
+
+ _7B41F971-C74D-4036-8A5E-EFF81C37986A
+
+ PT180S
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _0IqVEG0AEDySCYWhrcdpgA
+ _0IqVEG0AEDySCYWhrcdpgA
+
+
\ No newline at end of file
diff --git a/kogito-springboot-examples/process-kafka-multi-springboot/src/main/resources/application.properties b/kogito-springboot-examples/process-kafka-multi-springboot/src/main/resources/application.properties
index 6cb7bd292a..4f1a6cdf99 100644
--- a/kogito-springboot-examples/process-kafka-multi-springboot/src/main/resources/application.properties
+++ b/kogito-springboot-examples/process-kafka-multi-springboot/src/main/resources/application.properties
@@ -20,6 +20,6 @@
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=travellers-group
spring.kafka.consumer.auto-offset-reset=earliest
-kogito.addon.cloudevents.kafka.kogito_incoming_stream=travellers
+kogito.addon.cloudevents.kafka.kogito_incoming_stream.travellers=travellers
kogito.addon.cloudevents.kafka.kogito_outgoing_stream=processedtravellers
kogito.addon.cloudevents.kafka.kogito_outgoing_stream.no\u0020travel=cancelledtravellers
\ No newline at end of file
diff --git a/kogito-springboot-examples/process-kafka-multi-springboot/src/test/java/org/acme/travel/tests/multimessaging/springboot/MultiMessagingIT.java b/kogito-springboot-examples/process-kafka-multi-springboot/src/test/java/org/acme/travel/tests/multimessaging/springboot/MultiMessagingIT.java
index 125641c8bd..d06810462f 100644
--- a/kogito-springboot-examples/process-kafka-multi-springboot/src/test/java/org/acme/travel/tests/multimessaging/springboot/MultiMessagingIT.java
+++ b/kogito-springboot-examples/process-kafka-multi-springboot/src/test/java/org/acme/travel/tests/multimessaging/springboot/MultiMessagingIT.java
@@ -18,6 +18,7 @@
*/
package org.acme.travel.tests.multimessaging.springboot;
+import java.io.UncheckedIOException;
import java.net.URI;
import java.time.OffsetDateTime;
import java.util.Arrays;
@@ -29,7 +30,6 @@
import org.acme.travel.Traveller;
import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.kie.kogito.test.springboot.kafka.KafkaTestClient;
import org.kie.kogito.testcontainers.springboot.KafkaSpringBootTestResource;
@@ -69,7 +69,6 @@ public class MultiMessagingIT {
private KafkaTestClient kafkaClient;
@Test
- @Disabled("Flaky test")
public void testProcess() throws InterruptedException {
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
@@ -116,8 +115,8 @@ private String generateCloudEvent(Traveller traveller) {
.withTime(OffsetDateTime.now())
.withData(objectMapper.writeValueAsString(traveller).getBytes())
.build());
- } catch (Exception e) {
- throw new RuntimeException(e);
+ } catch (JsonProcessingException e) {
+ throw new UncheckedIOException(e);
}
}
diff --git a/kogito-springboot-examples/process-kafka-quickstart-springboot/src/test/java/org/acme/travel/tests/messaging/springboot/MessagingIT.java b/kogito-springboot-examples/process-kafka-quickstart-springboot/src/test/java/org/acme/travel/tests/messaging/springboot/MessagingIT.java
index 96a90df125..a2d912c580 100644
--- a/kogito-springboot-examples/process-kafka-quickstart-springboot/src/test/java/org/acme/travel/tests/messaging/springboot/MessagingIT.java
+++ b/kogito-springboot-examples/process-kafka-quickstart-springboot/src/test/java/org/acme/travel/tests/messaging/springboot/MessagingIT.java
@@ -18,6 +18,8 @@
*/
package org.acme.travel.tests.messaging.springboot;
+import java.io.IOException;
+import java.io.UncheckedIOException;
import java.net.URI;
import java.time.OffsetDateTime;
import java.util.Optional;
@@ -28,7 +30,6 @@
import org.acme.travel.Traveller;
import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.kie.kogito.test.springboot.kafka.KafkaTestClient;
import org.kie.kogito.testcontainers.springboot.KafkaSpringBootTestResource;
@@ -66,7 +67,6 @@ public class MessagingIT {
private KafkaTestClient kafkaClient;
@Test
- @Disabled("Flaky test")
public void testProcess() throws InterruptedException {
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
@@ -110,8 +110,8 @@ private String generateCloudEvent(Traveller traveller) {
.withTime(OffsetDateTime.now())
.withData(objectMapper.writeValueAsString(traveller).getBytes())
.build());
- } catch (Exception e) {
- throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
}
}
diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/resources/application.properties b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/resources/application.properties
index 454e33ca9b..eb97107b39 100644
--- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/resources/application.properties
+++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/src/main/resources/application.properties
@@ -34,6 +34,7 @@ quarkus.rest-client.subscription_service_yaml.url=${SUBSCRIPTION_SERVICE_URL:htt
mp.messaging.incoming.kogito_incoming_stream.connector=quarkus-http
mp.messaging.incoming.kogito_incoming_stream.path=/
+kogito.addon.messaging.outgoing.cloudEventMode=structured
# The K_SINK variable is automatically injected by the Knative ecosystem. The default value http://localhost:8181
# is used for local testing, which correspond to the event-display local container.
diff --git a/serverless-workflow-examples/serverless-workflow-order-processing/src/main/resources/application.properties b/serverless-workflow-examples/serverless-workflow-order-processing/src/main/resources/application.properties
index 5b96ef246a..74f3823419 100644
--- a/serverless-workflow-examples/serverless-workflow-order-processing/src/main/resources/application.properties
+++ b/serverless-workflow-examples/serverless-workflow-order-processing/src/main/resources/application.properties
@@ -21,6 +21,7 @@ quarkus.log.level=INFO
# The K_SINK variable will be injected for us by the KogitoSource
mp.messaging.outgoing.kogito_outgoing_stream.url=${K_SINK:http://localhost:8181}
+kogito.addon.messaging.outgoing.cloudEventMode.kogito_outgoing_stream=structured
mp.messaging.incoming.kogito_incoming_stream.connector=quarkus-http
mp.messaging.incoming.kogito_incoming_stream.path=/