You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kie.apache.org by pe...@apache.org on 2024/02/01 16:37:58 UTC
(incubator-kie-kogito-examples) branch main updated: incubator-kie-issues#723: Adding `process-usertasks-timer-data-index-persistence-addon-quarkus` showcasing the `kogito-addons-quarkus-data-index-persistence-postgresql` including Jobs Service (#1833)
This is an automated email from the ASF dual-hosted git repository.
pefernan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-examples.git
The following commit(s) were added to refs/heads/main by this push:
new 0b6ef9d81 incubator-kie-issues#723: Adding `process-usertasks-timer-data-index-persistence-addon-quarkus` showcasing the `kogito-addons-quarkus-data-index-persistence-postgresql` including Jobs Service (#1833)
0b6ef9d81 is described below
commit 0b6ef9d81447f1bfe8603d3bb577f5138d09a07b
Author: Pere Fernández <pe...@users.noreply.github.com>
AuthorDate: Thu Feb 1 17:37:53 2024 +0100
incubator-kie-issues#723: Adding `process-usertasks-timer-data-index-persistence-addon-quarkus` showcasing the `kogito-addons-quarkus-data-index-persistence-postgresql` including Jobs Service (#1833)
* Adding `process-usertasks-timer-data-index-persistence-addon-quarkus`, showcasing the `kogito-addons-quarkus-data-index-persistence-postgresql` with with Jobs Service`
* - Fix headers
* - Using the `kogito-addons-quarkus-jobs`
* - Adding *Show active Hiring process instance at Kogito Management Console*
* - Adding *Complete Hiring process instances using Kogito Task Console*
* - Upgraded `postgresql` version
- Upgraded `pgadmin` version.
- Added default config for pgadmin (server list, pgpass...)
- Minor readme tweaks
* - Rolling back unnecessary change
* - Flyway fixes
---
kogito-quarkus-examples/pom.xml | 1 +
.../README.md | 538 +++++
.../docker-compose/.gitignore | 3 +
.../docker-compose/README.md | 57 +
.../docker-compose/docker-compose.yml | 146 ++
.../docker-compose/keycloak/kogito-realm.json | 2242 ++++++++++++++++++++
.../docker-compose/pgadmin/pgpass | 3 +
.../docker-compose/pgadmin/servers.json | 14 +
.../docker-compose/sql/init.sql | 33 +
.../docker-compose/startServices.sh | 54 +
.../docs/images/g1_1_mc_list.png | Bin 0 -> 36543 bytes
.../docs/images/g1_2_mc_details.png | Bin 0 -> 94593 bytes
.../docs/images/g1_3_mc_details_executed_job.png | Bin 0 -> 97038 bytes
.../docs/images/g2_10_mc_details_completed.png | Bin 0 -> 85413 bytes
.../docs/images/g2_1_mc_list.png | Bin 0 -> 34309 bytes
.../docs/images/g2_2_mc_details.png | Bin 0 -> 91711 bytes
.../docs/images/g2_3_tc_inbox.png | Bin 0 -> 28098 bytes
.../docs/images/g2_4_tc_hr_form.png | Bin 0 -> 33900 bytes
.../docs/images/g2_5_tc_hr_form_notification.png | Bin 0 -> 21947 bytes
.../docs/images/g2_6_mc_details.png | Bin 0 -> 83551 bytes
.../docs/images/g2_7_tc_inbox.png | Bin 0 -> 29489 bytes
.../docs/images/g2_8_tc_it_form.png | Bin 0 -> 33854 bytes
.../docs/images/g2_9_tc_inbox_empty.png | Bin 0 -> 28261 bytes
.../docs/images/generate_offer_assignments.png | Bin 0 -> 51019 bytes
.../docs/images/hiring_diagram.png | Bin 0 -> 73493 bytes
.../docs/images/hr_interview_assignments.png | Bin 0 -> 60594 bytes
.../docs/images/it_interview_assignments.png | Bin 0 -> 56220 bytes
.../docs/images/mc_details_1.png | Bin 0 -> 137754 bytes
.../docs/images/mc_list.png | Bin 0 -> 84979 bytes
.../docs/images/new_hiring_offer_dmn.png | Bin 0 -> 23193 bytes
.../docs/images/new_hiring_offer_dmn_decision.png | Bin 0 -> 74373 bytes
.../docs/images/new_hiring_offer_dmn_types.png | Bin 0 -> 59378 bytes
.../pom.xml | 241 +++
.../main/java/org/kie/kogito/hr/CandidateData.java | 93 +
.../src/main/java/org/kie/kogito/hr/Offer.java | 46 +
.../main/resources/META-INF/processSVG/hiring.svg | 1 +
.../main/resources/META-INF/resources/index.html | 150 ++
.../src/main/resources/NewHiringOffer.dmn | 163 ++
.../src/main/resources/application.properties | 52 +
.../src/main/resources/hiring.bpmn | 691 ++++++
40 files changed, 4528 insertions(+)
diff --git a/kogito-quarkus-examples/pom.xml b/kogito-quarkus-examples/pom.xml
index ea58824df..67e4b8a8d 100644
--- a/kogito-quarkus-examples/pom.xml
+++ b/kogito-quarkus-examples/pom.xml
@@ -95,6 +95,7 @@
<module>process-usertasks-quarkus-with-console</module>
<module>process-usertasks-quarkus</module>
<module>process-usertasks-timer-quarkus-with-console</module>
+ <module>process-usertasks-timer-data-index-persistence-addon-quarkus</module>
<module>process-usertasks-with-security-oidc-quarkus-with-console</module>
<module>process-usertasks-with-security-oidc-quarkus</module>
<module>process-usertasks-with-security-quarkus</module>
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 000000000..1b3c4418c
--- /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<String> 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*.
+
+<div style="text-align:center">
+ <figure>
+ <img width=55% src="docs/images/new_hiring_offer_dmn.png" alt="DMN Diagram">
+ <figcaption>New Hiring Offer DMN diagram</figcaption>
+ </figure>
+</div>
+
+The DMN defines the following data types (`tCandidateData` & `tOffer` ) matching the POJOs defined in the project
+(`CandidateData.java` & `Offer.java`):
+
+<div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/new_hiring_offer_dmn_types.png" alt="DMN Type Definitions">
+ <figcaption>New Hiring Offer DMN types</figcaption>
+ </figure>
+</div>
+
+As expected, `CandidateData` *Input Data* & `Offer` *Decision* have a `tCandidateData` data
+
+The `Offer` decision uses the following *Boxed Expression* to generate the `tOffer`:
+
+<div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/new_hiring_offer_dmn_decision.png" alt="DMN Decision">
+ <figcaption>New Hiring Offer DMN decision</figcaption>
+ </figure>
+</div>
+
+## 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
+
+<div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/hiring_diagram.png" alt="Hiring Process Diagram">
+ <figcaption>Hiring Process Diagram</figcaption>
+ </figure>
+</div>
+
+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.
+
+
+<div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/generate_offer_assignments.png" alt="Offer assignments">
+ <figcaption><b>Generate base Offer</b> data assignments</figcaption>
+ </figure>
+</div>
+
+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`.
+
+<div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/hr_interview_assignments.png" alt="HR Interview assignments">
+ <figcaption><b>HR Interviewr</b> task data assignments</figcaption>
+ </figure>
+</div>
+
+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.
+
+<div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/it_interview_assignments.png" alt="IT Interview assignments">
+ <figcaption><b>IT Interviewr</b> task data assignments</figcaption>
+ </figure>
+</div>
+
+
+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.
+
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g1_1_mc_list.png" alt="Process List">
+ <figcaption><b>Process List</b> in <i>Kogito Management Console</i></figcaption>
+ </figure>
+ </div>
+
+
+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*...
+
+
+ <div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/g1_2_mc_details.png" alt="Process Details">
+ <figcaption><b>Process Instance Details</b> page</figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+ <div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/g1_3_mc_details_executed_job.png" alt="Process Details after timer">
+ <figcaption>Process Instance completed after the timer execution.</figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_1_mc_list.png" alt="Process List"/>
+ <figcaption>Process List in <i>Kogito Management Console</i></figcaption>
+ </figure>
+ </div>
+
+ <div style="text-align:center">
+ <figure>
+ <img width=75% src="docs/images/g2_2_mc_details.png" alt="Process Details">
+ <figcaption>Process instance Details page.</figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_3_tc_inbox.png" alt="Task Inbox"/>
+ <figcaption><b>Task Inbox</b> in <i>Kogito Task Console</i></figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_4_tc_hr_form.png" alt="HR Interview Form"/>
+ <figcaption><i>HR Interview</i> <b>Task Form</b></figcaption>
+ </figure>
+ </div>
+
+
+ *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.
+
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_5_tc_hr_form_notification.png" alt="HR Interview Form Notification"/>
+ <figcaption><i>HR Interview</i> Success notification!</figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_6_mc_details.png" alt="Process Details"/>
+ <figcaption>Process Instance details stopped in <i>IT Interview</i></figcaption>
+ </figure>
+ </div>
+
+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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_7_tc_inbox.png" alt="Task Inbox"/>
+ <figcaption><i>IT Interview</i> in <b>Task Inbox</b></figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_8_tc_it_form.png" alt="IT Interview Form"/>
+ <figcaption><i>IT Interview</i> <b>Task Form</b></figcaption>
+ </figure>
+ </div>
+
+
+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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_9_tc_inbox_empty.png" alt="Empty Task Inbox"/>
+ <figcaption>Empty **Task Inbox** after completing the *IT Interview* Task</figcaption>
+ </figure>
+ </div>
+
+ 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.
+
+ <div style="text-align:center;">
+ <figure>
+ <img width=75% src="docs/images/g2_10_mc_details_completed.png" alt="Hiring Process succesfully completed"/>
+ <figcaption>Hiring Process sucessfully completed</figcaption>
+ </figure>
+ </div>
\ 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 000000000..b6632dbda
--- /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 000000000..17ed70a4d
--- /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 000000000..0a057a07f
--- /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 000000000..fd3cdc094
--- /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/f39RQKaqk7mcyxOylaEuBQ [...]
+ ],
+ "certificate": [
+ "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFY [...]
+ ],
+ "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 000000000..11a6f7c60
--- /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 000000000..a112980d5
--- /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 000000000..92ea9b4e5
--- /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 000000000..5ff991124
--- /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 000000000..4e5aa6274
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 000000000..f2b228f20
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 000000000..1ab358819
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 000000000..610849f19
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 000000000..6526e8e7f
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 000000000..ec18201f0
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 000000000..0d612f76c
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 000000000..d89b41302
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 000000000..8dd81fc4a
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 000000000..4970b8f83
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 000000000..03f63ff7b
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 000000000..5e6872a09
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 000000000..696433e93
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 000000000..2e3f93529
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 000000000..cb57a2dfb
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 000000000..63de050eb
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 000000000..077430569
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 000000000..2c1c3b26a
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 000000000..4fc32b05c
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 000000000..451313a26
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 000000000..f58d869d3
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 000000000..d028d331d
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 000000000..9843eec26
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml
@@ -0,0 +1,241 @@
+<?xml version="1.0"?>
+<!--
+
+ 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.
+
+-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.kie.kogito.examples</groupId>
+ <artifactId>kogito-quarkus-examples</artifactId>
+ <version>999-SNAPSHOT</version>
+ </parent>
+ <artifactId>process-usertasks-timer-data-index-persistence-addon-quarkus</artifactId>
+ <name>Kogito Example :: Process Usertasks with Timer Data Index persistence addon Quarkus</name>
+ <description>Kogito user tasks orchestration with security enabled on REST api using the Data Index Persistence addon - Quarkus</description>
+ <properties>
+ <quarkus-plugin.version>3.2.9.Final</quarkus-plugin.version>
+ <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+ <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
+ <quarkus.platform.version>3.2.9.Final</quarkus.platform.version>
+ <kogito.bom.group-id>org.kie.kogito</kogito.bom.group-id>
+ <kogito.bom.artifact-id>kogito-bom</kogito.bom.artifact-id>
+ <kogito-apps.bom.artifact-id>kogito-apps-bom</kogito-apps.bom.artifact-id>
+ <version.org.kie.kogito>999-SNAPSHOT</version.org.kie.kogito>
+ </properties>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>${quarkus.platform.group-id}</groupId>
+ <artifactId>${quarkus.platform.artifact-id}</artifactId>
+ <version>${quarkus.platform.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>${kogito.bom.group-id}</groupId>
+ <artifactId>${kogito.bom.artifact-id}</artifactId>
+ <version>${version.org.kie.kogito}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>${kogito.bom.group-id}</groupId>
+ <artifactId>${kogito-apps.bom.artifact-id}</artifactId>
+ <version>${version.org.kie.kogito}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy-jackson</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-smallrye-openapi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-smallrye-health</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-quarkus</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-quarkus-processes</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-process-management</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-jobs-management</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-process-svg</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-source-files</artifactId>
+ </dependency>
+
+ <!-- Persistence -->
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-jdbc-postgresql</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-agroal</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-persistence-jdbc</artifactId>
+ </dependency>
+
+ <!-- Data Index Persistence -->
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-data-index-persistence-postgresql</artifactId>
+ </dependency>
+
+ <!-- Jobs Service -->
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-quarkus-jobs</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>jobs-service-postgresql-common</artifactId>
+ </dependency>
+
+ <!-- Data Audit -->
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-data-audit-jpa-quarkus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-addons-data-audit-quarkus</artifactId>
+ </dependency>
+ </dependencies>
+ <profiles>
+ <profile>
+ <id>container</id>
+ <properties>
+ <quarkus.profile>container</quarkus.profile>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-container-image-jib</artifactId>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>development</id>
+ <properties>
+ <quarkus.profile>dev</quarkus.profile>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>runtime-tools-quarkus-extension</artifactId>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+ <build>
+ <finalName>${project.artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${version.compiler.plugin}</version>
+ <configuration>
+ <release>${maven.compiler.release}</release>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>${quarkus.platform.group-id}</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <version>${quarkus-plugin.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target>
+ <copy todir="./docker-compose/svg" overwrite="true">
+ <fileset dir="target/classes/META-INF/processSVG/"/>
+ </copy>
+ <copy todir="./docker-compose/persistence" overwrite="true">
+ <fileset dir="target/classes/META-INF/resources/persistence/protobuf/"/>
+ </copy>
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
+ <maven.home>${maven.home}</maven.home>
+ </systemPropertyVariables>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
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 000000000..eae14184d
--- /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<String> skills;
+
+ public CandidateData() {
+ }
+
+ public CandidateData(String name, String lastName, String email, Integer experience, List<String> 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<String> getSkills() {
+ return skills;
+ }
+
+ public void setSkills(List<String> 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 000000000..a377b480a
--- /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 000000000..fba050070
--- /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 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1575" height="521" viewBox="0 0 1575 521"><defs/><g transform="matrix(1,0,0,1,0,0)"><g><g><g><path fill="none" stroke="#d3d3d3" paint-order="fill stroke markers" d=" M 0 0 L 1200 0" stroke-miterlimit="10" stroke-opacity="0.8" stroke-dasharray="5"/></g><g><path fill="none" stroke="#d3d3d3" paint-order="fill stroke markers" d=" M 0 0 L 0 800" stroke-miterlimit="10" stroke-opacity="0.8" s [...]
\ 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 000000000..8556bab48
--- /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 @@
+<!--
+ ~ Copyright 2021 Red Hat, Inc. and/or its affiliates.
+ ~
+ ~ Licensed 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.
+ -->
+
+
+ <!DOCTYPE html>
+ <html lang="en">
+
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Kogito quickstart</title>
+ <link rel="stylesheet" href="styles.css" type="text/css">
+ <link rel="icon" href="https://kogito.kie.org/favicon.ico" type="image/icon type">
+ <link href='https://fonts.googleapis.com/css?family=Abril Fatface' rel='stylesheet'>
+ <link href='https://fonts.googleapis.com/css?family=Josefin Sans' rel='stylesheet'>
+ <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
+ <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
+ <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"
+ integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js"
+ integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW"
+ crossorigin="anonymous"></script>
+
+ </head>
+
+ <body>
+ <section class="nav-content" style="padding: 0 13rem; height: 78px;">
+ <div class="row gx-5" style="padding-top: 8px;">
+ <div class="col-lg-6" style="margin-top: 8px;">
+ <a href="/"><img class="project-logo"
+ src="https://kogito.kie.org/assets/images/kogito_logo_rgb_color_horizontal_default_450px.png"
+ alt="Kogito Logo" width="180px"></a>
+ </div>
+ <div class="col-lg-6">
+ <nav style="float: right; padding-top: 10px;">
+ <ul style="list-style: none;">
+ <li>
+ <a href="http://localhost:8080/q/swagger-ui/"
+ style="text-transform: uppercase;
+ color: #fff;
+ line-height: 2.5;
+ padding: 2px 10px 0 10px;
+ background-color: #F5891F;
+ border: 2px solid #F5891F;
+ display: inline-block;
+ text-decoration: none;"
+ >
+ Swagger-UI
+ </a>
+ </li>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </section>
+ <section class="row" >
+ <div class="col-lg-12" style="
+ background: linear-gradient(135deg, #085870 0%, #085870 50%, #97d4e8 100%);
+ height: 524px;
+ ">
+ <div style="
+ background-image: url(https://kogito.kie.org/assets/images/homepage/hero_background.svg);
+ background-repeat: repeat-x;
+ background-size: auto;
+ background-position: left;
+ padding: 6rem 13rem 8rem 13rem;
+ height: 524px;
+ ">
+ <div style="height: 300px">
+ <h1 style="
+ font-family: 'Abril Fatface', sans-serif;
+ font-weight: 400;
+ font-size: 96px;
+ line-height: 96px;
+ color: #fff;">Welcome to Kogito</h1>
+ <h2 style="font-family: 'Josefin Sans', sans-serif;
+ text-transform: uppercase;
+ font-size: 19.2px;
+ line-height: 1;
+ max-width: 42rem;
+ font-weight: 400;
+ color: #fff;
+ margin: 32px 8px;"
+ >
+ Cloud-native business automation for building intelligent applications, backed by
+ battle-tested capabilities.
+ </h2>
+ <a href="https://kogito.kie.org/get-started/" style="
+ font-family: 'Josefin Sans', sans-serif;
+ font-size: 20px;
+ margin: 8px;
+ text-transform: uppercase;
+ color: #fff;
+ line-height: 2.5;
+ padding: 2px 10px 0 10px;
+ background-color: #F5891F;
+ border: 2px solid #fff;
+ padding: 16px 64px 12px 64px;
+ text-decoration: none"
+ >
+ Get Started
+ </a>
+ <a href="https://docs.jboss.org/kogito/release/latest/html_single/#chap-kogito-release-notes"
+ id="latestVersion" style="
+ font-family: 'Josefin Sans', sans-serif;
+ font-size: 20px;
+ margin: 8px;
+ text-transform: uppercase;
+ color: #fff;
+ line-height: 2.5;
+ padding: 2px 10px 0 10px;
+ background-color: #F5891F;
+ border: 2px solid #fff;
+ padding: 16px 64px 12px 64px;
+ text-decoration: none"
+ >
+ Latest updates
+ </a>
+ </div>
+ </div>
+ </div>
+ </section>
+ <section style="height: 350px; margin-top: 24px;">
+ <div class="container">
+ <div class="row">
+ <h2> Quick Links</h2>
+ <ul style="list-style: none;">
+ <li style="line-height: 40px;"><a href="https://kogito.kie.org/get-started/">Documentation</a></li>
+ <li style="line-height: 40px;"><a href="https://kie.zulipchat.com/#narrow/stream/232659-general">Getting Help</a></li>
+ </ul>
+ </div>
+ </div>
+ </section>
+ </body>
+
+ </html>
\ 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 000000000..67b0eded6
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/NewHiringOffer.dmn
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/" xmlns="https://kiegroup.org/dmn/_0DCC505E-71B4-4C29-8848-4006623FE51A" xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/" xmlns:kie="http://www.drools.org/kie/dmn/1.2" xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/" xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" id="_14645A68-5630-4A6F-899F-4FF825252CCD" name="New Hiring Offer" typeLanguage="htt [...]
+ <dmn:extensionElements/>
+ <dmn:itemDefinition id="_91B22404-81DF-44E7-9084-6416BF211BCC" name="tCandidateData" isCollection="false">
+ <dmn:itemComponent id="_657BB44B-D8B2-490A-B383-F63EF31E781E" name="name" isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_F004E7F6-6993-4CA2-8029-C3A87C8A15A8" name="lastName" isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_E9314196-BF96-4014-9548-2BB15D125B34" name="email" isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_D554122C-2BF1-4F1C-AAF2-DC7EBB72E817" name="experience" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_03ACF59E-4EC6-4C79-AE55-427BD51429BD" name="skills" isCollection="true">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+ <dmn:itemDefinition id="_76F919CD-3E75-4EE2-AD60-FB0627E0DA54" name="tOffer" isCollection="false">
+ <dmn:itemComponent id="_C4ABF342-EEB6-4CA6-AAC1-7C6D50A1DD02" name="salary" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_3C2A61B7-AD85-4AF3-B904-51038920EF93" name="category" isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ <dmn:allowedValues kie:constraintType="enumeration" id="_8C8338A1-7CA6-48D8-AECB-3D5082333316">
+ <dmn:text>"Software Engineer", "Senior Software Engineer", "Software Architect"</dmn:text>
+ </dmn:allowedValues>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+ <dmn:inputData id="_59F676A7-D122-4FAB-8ABB-F1E0CC997C08" name="CandidateData">
+ <dmn:extensionElements/>
+ <dmn:variable id="_EF5D30F7-00BF-47E2-9655-D1D21B799F5C" name="CandidateData" typeRef="tCandidateData"/>
+ </dmn:inputData>
+ <dmn:decision id="_26299D78-4931-4077-A636-1364B97AB94F" name="Offer">
+ <dmn:extensionElements/>
+ <dmn:variable id="_1C79A32D-6535-4209-9840-D4FF6FF52CA9" name="Offer" typeRef="tOffer"/>
+ <dmn:informationRequirement id="_87BE8DEF-9B4D-45EC-8E59-6CD9D0613DCF">
+ <dmn:requiredInput href="#_59F676A7-D122-4FAB-8ABB-F1E0CC997C08"/>
+ </dmn:informationRequirement>
+ <dmn:context id="_6CF8329F-A45C-4FC8-AEDD-F2DA34BCD9CC">
+ <dmn:contextEntry>
+ <dmn:variable id="_F97FBBC2-9B78-4280-8053-B5089E422B35" name="SalaryBonus" typeRef="number"/>
+ <dmn:literalExpression id="_DE5ECE12-3B62-497F-9A5F-8DFE8D5B440B">
+ <dmn:text>count(CandidateData.skills) * 150</dmn:text>
+ </dmn:literalExpression>
+ </dmn:contextEntry>
+ <dmn:contextEntry>
+ <dmn:variable id="_CE19A7DC-A559-482A-93A8-38786291B11C" name="Offer" typeRef="tOffer"/>
+ <dmn:decisionTable id="_839000A0-8C02-4FD7-A079-9DCA9C2D9C67" hitPolicy="UNIQUE" preferredOrientation="Rule-as-Row">
+ <dmn:input id="_2003EFC0-4A87-43FA-80B1-25C14F0AB2FF">
+ <dmn:inputExpression id="_663F281B-8A30-44DC-9DA5-B141831D552B" typeRef="number">
+ <dmn:text>CandidateData.experience</dmn:text>
+ </dmn:inputExpression>
+ </dmn:input>
+ <dmn:output id="_BCCDA650-A716-4BA4-9B3D-4CD8AE93CB79" name="category" typeRef="string">
+ <dmn:outputValues kie:constraintType="enumeration" id="_78F5B0AC-CE91-4BEC-8B26-121FF0C0BC2A">
+ <dmn:text>"Software Engineer", "Senior Software Engineer", "Software Architect"</dmn:text>
+ </dmn:outputValues>
+ </dmn:output>
+ <dmn:output id="_FF119A4B-E564-438A-99D9-4D1B26E519F1" name="salary" typeRef="number"/>
+ <dmn:annotation name="annotation-1"/>
+ <dmn:rule id="_2E67A292-D088-4ED7-AC9D-A7D85C3B6188">
+ <dmn:inputEntry id="_5082A566-8E83-4441-B446-A69E5BE4D81E">
+ <dmn:text>[0..5)</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_BF300CEA-9C67-4A48-9E63-781B94552D6F">
+ <dmn:text>"Software Engineer"</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_7B4EBA06-D280-436F-80E6-B6631BED7E8F">
+ <dmn:text>30000 + SalaryBonus </dmn:text>
+ </dmn:outputEntry>
+ <dmn:annotationEntry>
+ <dmn:text/>
+ </dmn:annotationEntry>
+ </dmn:rule>
+ <dmn:rule id="_1322663C-FAD9-48BA-A893-8076ED7D2D55">
+ <dmn:inputEntry id="_6801EF6E-ED61-41DF-9810-7D9118A1F611">
+ <dmn:text>[5..10)</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_43E9D87D-ECE5-4298-B98A-9E69D93B967B">
+ <dmn:text>"Senior Software Engineer"</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_CF868CA5-C53A-4ECD-9167-5C55F858FF7F">
+ <dmn:text>40000 + SalaryBonus</dmn:text>
+ </dmn:outputEntry>
+ <dmn:annotationEntry>
+ <dmn:text/>
+ </dmn:annotationEntry>
+ </dmn:rule>
+ <dmn:rule id="_1104ED9E-0910-40F9-A0C3-911BF018C545">
+ <dmn:inputEntry id="_3D058456-EA96-4D78-9BF1-9AEDF3755C47">
+ <dmn:text>>=10</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_061D4DC8-069B-43C7-9200-C20D11692D8F">
+ <dmn:text>"Software Architect"</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_C7269E79-EE4D-440C-99F7-C5F474F15E2F">
+ <dmn:text>50000 + SalaryBonus</dmn:text>
+ </dmn:outputEntry>
+ <dmn:annotationEntry>
+ <dmn:text/>
+ </dmn:annotationEntry>
+ </dmn:rule>
+ </dmn:decisionTable>
+ </dmn:contextEntry>
+ <dmn:contextEntry>
+ <dmn:literalExpression id="_3676400A-0460-43CC-A96A-B28B460E4D19">
+ <dmn:text>Offer</dmn:text>
+ </dmn:literalExpression>
+ </dmn:contextEntry>
+ </dmn:context>
+ </dmn:decision>
+ <dmndi:DMNDI>
+ <dmndi:DMNDiagram id="_C1A40C3F-E161-41CE-9ED5-BA9F449CF495" name="DRG">
+ <di:extension>
+ <kie:ComponentsWidthsExtension>
+ <kie:ComponentWidths dmnElementRef="_6CF8329F-A45C-4FC8-AEDD-F2DA34BCD9CC">
+ <kie:width>50</kie:width>
+ <kie:width>120</kie:width>
+ <kie:width>926</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths dmnElementRef="_DE5ECE12-3B62-497F-9A5F-8DFE8D5B440B">
+ <kie:width>926</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths dmnElementRef="_839000A0-8C02-4FD7-A079-9DCA9C2D9C67">
+ <kie:width>50</kie:width>
+ <kie:width>175</kie:width>
+ <kie:width>104</kie:width>
+ <kie:width>437</kie:width>
+ <kie:width>140</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths dmnElementRef="_3676400A-0460-43CC-A96A-B28B460E4D19">
+ <kie:width>926</kie:width>
+ </kie:ComponentWidths>
+ </kie:ComponentsWidthsExtension>
+ </di:extension>
+ <dmndi:DMNShape id="dmnshape-drg-_59F676A7-D122-4FAB-8ABB-F1E0CC997C08" dmnElementRef="_59F676A7-D122-4FAB-8ABB-F1E0CC997C08" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="360" y="378" width="137" height="58"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ <dmndi:DMNShape id="dmnshape-drg-_26299D78-4931-4077-A636-1364B97AB94F" dmnElementRef="_26299D78-4931-4077-A636-1364B97AB94F" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="379" y="165" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ <dmndi:DMNEdge id="dmnedge-drg-_87BE8DEF-9B4D-45EC-8E59-6CD9D0613DCF" dmnElementRef="_87BE8DEF-9B4D-45EC-8E59-6CD9D0613DCF">
+ <di:waypoint x="428.5" y="407"/>
+ <di:waypoint x="429" y="215"/>
+ </dmndi:DMNEdge>
+ </dmndi:DMNDiagram>
+ </dmndi:DMNDI>
+</dmn:definitions>
\ 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 000000000..61f77f5d5
--- /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 000000000..3c043c24c
--- /dev/null
+++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/src/main/resources/hiring.bpmn
@@ -0,0 +1,691 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" id="_0IqVEG0AEDySCYWhrcdpgA" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www. [...]
+ <bpmn2:itemDefinition id="_hr_approvalItem" structureRef="Boolean"/>
+ <bpmn2:itemDefinition id="_it_approvalItem" structureRef="Boolean"/>
+ <bpmn2:itemDefinition id="_candidateDataItem" structureRef="org.kie.kogito.hr.CandidateData"/>
+ <bpmn2:itemDefinition id="_offerItem" structureRef="org.kie.kogito.hr.Offer"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_PriorityInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_CommentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_DescriptionInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_CreatedByInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_GroupIdInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_ContentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_NotStartedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_NotCompletedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_NotStartedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_NotCompletedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputXItem" structureRef="org.kie.kogito.hr.CandidateData"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputXItem" structureRef="org.kie.kogito.hr.Offer"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputXItem" structureRef="Boolean"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputXItem" structureRef="Boolean"/>
+ <bpmn2:itemDefinition id="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputXItem" structureRef="org.kie.kogito.hr.Offer"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_PriorityInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_CommentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_DescriptionInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_CreatedByInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_GroupIdInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_ContentInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_NotStartedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_NotCompletedReassignInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_NotStartedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_NotCompletedNotifyInputXItem" structureRef="Object"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputXItem" structureRef="org.kie.kogito.hr.CandidateData"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputXItem" structureRef="org.kie.kogito.hr.Offer"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputXItem" structureRef="Boolean"/>
+ <bpmn2:itemDefinition id="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputXItem" structureRef="Boolean"/>
+ <bpmn2:itemDefinition id="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputXItem" structureRef="java.lang.String"/>
+ <bpmn2:itemDefinition id="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputXItem" structureRef="java.lang.String"/>
+ <bpmn2:itemDefinition id="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputXItem" structureRef="java.lang.String"/>
+ <bpmn2:itemDefinition id="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputXItem" structureRef="java.lang.String"/>
+ <bpmn2:itemDefinition id="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputXItem" structureRef="org.kie.kogito.hr.CandidateData"/>
+ <bpmn2:itemDefinition id="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputXItem" structureRef="org.kie.kogito.hr.Offer"/>
+ <bpmn2:collaboration id="_B7CE00C6-386E-4A14-A6CE-7A6EDDDBFE97" name="Default Collaboration">
+ <bpmn2:participant id="_9068AB92-78FE-4869-B00F-78C8020A281B" name="Pool Participant" processRef="hiring"/>
+ </bpmn2:collaboration>
+ <bpmn2:process id="hiring" drools:packageName="org.kie.kogito.hr" drools:version="1.0" drools:adHoc="false" name="hiring" isExecutable="true" processType="Public">
+ <bpmn2:property id="hr_approval" itemSubjectRef="_hr_approvalItem" name="hr_approval">
+ <bpmn2:extensionElements>
+ <drools:metaData name="customTags">
+ <drools:metaValue><![CDATA[internal]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:property>
+ <bpmn2:property id="it_approval" itemSubjectRef="_it_approvalItem" name="it_approval">
+ <bpmn2:extensionElements>
+ <drools:metaData name="customTags">
+ <drools:metaValue><![CDATA[internal]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:property>
+ <bpmn2:property id="candidateData" itemSubjectRef="_candidateDataItem" name="candidateData">
+ <bpmn2:extensionElements>
+ <drools:metaData name="customTags">
+ <drools:metaValue><![CDATA[input]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:property>
+ <bpmn2:property id="offer" itemSubjectRef="_offerItem" name="offer">
+ <bpmn2:extensionElements>
+ <drools:metaData name="customTags">
+ <drools:metaValue><![CDATA[output]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:property>
+ <bpmn2:sequenceFlow id="_7DDA574A-C220-4FEF-9784-22EF8052EDEC" sourceRef="_940F2A0C-8CC6-4ECA-B504-49363AF68B67" targetRef="_6CE52250-BCEE-485C-8AE4-F6CACF2EF5A1"/>
+ <bpmn2:sequenceFlow id="_9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5" sourceRef="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A" targetRef="_57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C"/>
+ <bpmn2:sequenceFlow id="_527D3164-4989-4D2C-B80B-9BA9D4C8FB89" sourceRef="_4B7FF147-F096-435B-8CAF-48318EF786B0" targetRef="_457DC13A-0AEC-4390-A860-5CCFFB67B366">
+ <bpmn2:extensionElements>
+ <drools:metaData name="isAutoConnection.target">
+ <drools:metaValue><![CDATA[true]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:sequenceFlow>
+ <bpmn2:sequenceFlow id="_94172225-E124-4F14-98DA-C3D62C11254A" sourceRef="_30C8C01B-4149-4AE5-8D86-D27D57BCA8E7" targetRef="_4B7FF147-F096-435B-8CAF-48318EF786B0"/>
+ <bpmn2:sequenceFlow id="_C6E61C53-FD35-4347-B69E-30AA93AE4404" sourceRef="_A51A809E-03C0-4EA7-91F1-7B3C5E29AD04" targetRef="_30C8C01B-4149-4AE5-8D86-D27D57BCA8E7">
+ <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression" language="http://www.java.com/java"><![CDATA[return candidateData.getExperience() < 1 || candidateData.getSkills().size() == 0;]]></bpmn2:conditionExpression>
+ </bpmn2:sequenceFlow>
+ <bpmn2:sequenceFlow id="_59F9A0E6-7F9C-43A9-8920-5B40A91169E6" sourceRef="_A51A809E-03C0-4EA7-91F1-7B3C5E29AD04" targetRef="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A"/>
+ <bpmn2:sequenceFlow id="_B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E" sourceRef="_B9662806-84F3-4444-AD62-4790CDA7C85D" targetRef="_30C8C01B-4149-4AE5-8D86-D27D57BCA8E7"/>
+ <bpmn2:sequenceFlow id="_B11455DE-F77A-4251-A85B-4C66636E3CD9" sourceRef="_B9662806-84F3-4444-AD62-4790CDA7C85D" targetRef="_940F2A0C-8CC6-4ECA-B504-49363AF68B67">
+ <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression" language="http://www.java.com/java"><![CDATA[return hr_approval && it_approval;]]></bpmn2:conditionExpression>
+ </bpmn2:sequenceFlow>
+ <bpmn2:sequenceFlow id="_5334FFDC-1FCB-47E6-8085-36DC9A3D17B9" sourceRef="_834B21EF-9229-44F8-A5DB-D96EBB39A347" targetRef="_30C8C01B-4149-4AE5-8D86-D27D57BCA8E7"/>
+ <bpmn2:sequenceFlow id="_5162ABF0-DD2E-4BDC-9A46-DDCFCB010287" sourceRef="_5BDBE48C-CC83-46A9-9D56-F846F8FC1045" targetRef="_A51A809E-03C0-4EA7-91F1-7B3C5E29AD04"/>
+ <bpmn2:sequenceFlow id="_C62F7EFB-A009-450A-81C7-57D36F0DF766" sourceRef="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E" targetRef="_B9662806-84F3-4444-AD62-4790CDA7C85D"/>
+ <bpmn2:sequenceFlow id="_A76C6603-0406-423C-940B-3403948DCA1F" sourceRef="_B8C4F63C-81AD-4291-9C1B-84967277EEF6" targetRef="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E"/>
+ <bpmn2:sequenceFlow id="_ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383" sourceRef="_57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C" targetRef="_B8C4F63C-81AD-4291-9C1B-84967277EEF6"/>
+ <bpmn2:sequenceFlow id="_8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A" sourceRef="_1639F738-45F3-4CD6-A80E-CCEBAA605D56" targetRef="_5BDBE48C-CC83-46A9-9D56-F846F8FC1045">
+ <bpmn2:extensionElements>
+ <drools:metaData name="isAutoConnection.source">
+ <drools:metaValue><![CDATA[true]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:sequenceFlow>
+ <bpmn2:sequenceFlow id="_7B41F971-C74D-4036-8A5E-EFF81C37986A" sourceRef="_116F3C54-A10E-4952-9E08-1CACE74CED0B" targetRef="_834B21EF-9229-44F8-A5DB-D96EBB39A347"/>
+ <bpmn2:scriptTask id="_940F2A0C-8CC6-4ECA-B504-49363AF68B67" name="Send Offer to Candidate" scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Send Offer to Candidate]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_B11455DE-F77A-4251-A85B-4C66636E3CD9</bpmn2:incoming>
+ <bpmn2:outgoing>_7DDA574A-C220-4FEF-9784-22EF8052EDEC</bpmn2:outgoing>
+ <bpmn2:script>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("###################################");</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:scriptTask id="_57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C" name="Log Offer" scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Log Offer]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5</bpmn2:incoming>
+ <bpmn2:outgoing>_ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383</bpmn2:outgoing>
+ <bpmn2:script>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("###################################");</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:endEvent id="_6CE52250-BCEE-485C-8AE4-F6CACF2EF5A1">
+ <bpmn2:incoming>_7DDA574A-C220-4FEF-9784-22EF8052EDEC</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:businessRuleTask id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A" name="Generate base offer" implementation="http://www.jboss.org/drools/dmn">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Generate base offer]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_59F9A0E6-7F9C-43A9-8920-5B40A91169E6</bpmn2:incoming>
+ <bpmn2:outgoing>_9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX" drools:dtype="java.lang.String" itemSubjectRef="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputXItem" name="fileName"/>
+ <bpmn2:dataInput id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX" drools:dtype="java.lang.String" itemSubjectRef="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputXItem" name="namespace"/>
+ <bpmn2:dataInput id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX" drools:dtype="java.lang.String" itemSubjectRef="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputXItem" name="decision"/>
+ <bpmn2:dataInput id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX" drools:dtype="java.lang.String" itemSubjectRef="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputXItem" name="model"/>
+ <bpmn2:dataInput id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX" drools:dtype="org.kie.kogito.hr.CandidateData" itemSubjectRef="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputXItem" name="CandidateData"/>
+ <bpmn2:dataOutput id="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX" drools:dtype="org.kie.kogito.hr.Offer" itemSubjectRef="__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputXItem" name="Offer"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ <bpmn2:outputSet>
+ <bpmn2:dataOutputRefs>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX</bpmn2:dataOutputRefs>
+ </bpmn2:outputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[NewHiringOffer.dmn]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[https://kiegroup.org/dmn/_0DCC505E-71B4-4C29-8848-4006623FE51A]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[New Hiring Offer]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[New Hiring Offer]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>candidateData</bpmn2:sourceRef>
+ <bpmn2:targetRef>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataOutputAssociation>
+ <bpmn2:sourceRef>_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX</bpmn2:sourceRef>
+ <bpmn2:targetRef>offer</bpmn2:targetRef>
+ </bpmn2:dataOutputAssociation>
+ </bpmn2:businessRuleTask>
+ <bpmn2:endEvent id="_457DC13A-0AEC-4390-A860-5CCFFB67B366">
+ <bpmn2:incoming>_527D3164-4989-4D2C-B80B-9BA9D4C8FB89</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:scriptTask id="_4B7FF147-F096-435B-8CAF-48318EF786B0" name="Application denied" scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Application denied]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_94172225-E124-4F14-98DA-C3D62C11254A</bpmn2:incoming>
+ <bpmn2:outgoing>_527D3164-4989-4D2C-B80B-9BA9D4C8FB89</bpmn2:outgoing>
+ <bpmn2:script>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("###################################");
+</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:exclusiveGateway id="_30C8C01B-4149-4AE5-8D86-D27D57BCA8E7" drools:dg="_94172225-E124-4F14-98DA-C3D62C11254A" gatewayDirection="Converging" default="_94172225-E124-4F14-98DA-C3D62C11254A">
+ <bpmn2:incoming>_5334FFDC-1FCB-47E6-8085-36DC9A3D17B9</bpmn2:incoming>
+ <bpmn2:incoming>_B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E</bpmn2:incoming>
+ <bpmn2:incoming>_C6E61C53-FD35-4347-B69E-30AA93AE4404</bpmn2:incoming>
+ <bpmn2:outgoing>_94172225-E124-4F14-98DA-C3D62C11254A</bpmn2:outgoing>
+ </bpmn2:exclusiveGateway>
+ <bpmn2:exclusiveGateway id="_A51A809E-03C0-4EA7-91F1-7B3C5E29AD04" drools:dg="_59F9A0E6-7F9C-43A9-8920-5B40A91169E6" gatewayDirection="Diverging" default="_59F9A0E6-7F9C-43A9-8920-5B40A91169E6">
+ <bpmn2:incoming>_5162ABF0-DD2E-4BDC-9A46-DDCFCB010287</bpmn2:incoming>
+ <bpmn2:outgoing>_59F9A0E6-7F9C-43A9-8920-5B40A91169E6</bpmn2:outgoing>
+ <bpmn2:outgoing>_C6E61C53-FD35-4347-B69E-30AA93AE4404</bpmn2:outgoing>
+ </bpmn2:exclusiveGateway>
+ <bpmn2:exclusiveGateway id="_B9662806-84F3-4444-AD62-4790CDA7C85D" drools:dg="_B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E" gatewayDirection="Diverging" default="_B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E">
+ <bpmn2:incoming>_C62F7EFB-A009-450A-81C7-57D36F0DF766</bpmn2:incoming>
+ <bpmn2:outgoing>_B11455DE-F77A-4251-A85B-4C66636E3CD9</bpmn2:outgoing>
+ <bpmn2:outgoing>_B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E</bpmn2:outgoing>
+ </bpmn2:exclusiveGateway>
+ <bpmn2:scriptTask id="_834B21EF-9229-44F8-A5DB-D96EBB39A347" name="Send notification HR Interview avoided" scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Send notification HR Interview avoided]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_7B41F971-C74D-4036-8A5E-EFF81C37986A</bpmn2:incoming>
+ <bpmn2:outgoing>_5334FFDC-1FCB-47E6-8085-36DC9A3D17B9</bpmn2:outgoing>
+ <bpmn2:script>System.out.println("###################################");
+System.out.println("HR Interview have been avoided after reasonable time");
+System.out.println("###################################");
+</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:scriptTask id="_5BDBE48C-CC83-46A9-9D56-F846F8FC1045" name="New Hiring" scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[New Hiring]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A</bpmn2:incoming>
+ <bpmn2:outgoing>_5162ABF0-DD2E-4BDC-9A46-DDCFCB010287</bpmn2:outgoing>
+ <bpmn2:script>System.out.println("New Hiring has been created for candidate: " + candidateData.getFullName());
+
+kcontext.setVariable("hr_approval", false);
+kcontext.setVariable("it_approval", false);</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:userTask id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E" name="IT Interview">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[IT Interview]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_A76C6603-0406-423C-940B-3403948DCA1F</bpmn2:incoming>
+ <bpmn2:outgoing>_C62F7EFB-A009-450A-81C7-57D36F0DF766</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX" drools:dtype="Object" itemSubjectRef="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputXItem" name="TaskName"/>
+ <bpmn2:dataInput id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX" drools:dtype="org.kie.kogito.hr.CandidateData" itemSubjectRef="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputXItem" name="candidate"/>
+ <bpmn2:dataInput id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX" drools:dtype="org.kie.kogito.hr.Offer" itemSubjectRef="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputXItem" name="offer"/>
+ <bpmn2:dataInput id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX" drools:dtype="Boolean" itemSubjectRef="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputXItem" name="approve"/>
+ <bpmn2:dataInput id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX" drools:dtype="Object" itemSubjectRef="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputXItem" name="Skippable"/>
+ <bpmn2:dataOutput id="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX" drools:dtype="Boolean" itemSubjectRef="__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputXItem" name="approve"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ <bpmn2:outputSet>
+ <bpmn2:dataOutputRefs>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX</bpmn2:dataOutputRefs>
+ </bpmn2:outputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[ITInterview]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>candidateData</bpmn2:sourceRef>
+ <bpmn2:targetRef>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>offer</bpmn2:sourceRef>
+ <bpmn2:targetRef>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>it_approval</bpmn2:sourceRef>
+ <bpmn2:targetRef>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataOutputAssociation>
+ <bpmn2:sourceRef>_8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX</bpmn2:sourceRef>
+ <bpmn2:targetRef>it_approval</bpmn2:targetRef>
+ </bpmn2:dataOutputAssociation>
+ <bpmn2:potentialOwner id="_0IumgG0AEDySCYWhrcdpgA">
+ <bpmn2:resourceAssignmentExpression id="_0IumgW0AEDySCYWhrcdpgA">
+ <bpmn2:formalExpression>jdoe</bpmn2:formalExpression>
+ </bpmn2:resourceAssignmentExpression>
+ </bpmn2:potentialOwner>
+ </bpmn2:userTask>
+ <bpmn2:userTask id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6" name="HR Interview">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[HR Interview]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383</bpmn2:incoming>
+ <bpmn2:outgoing>_A76C6603-0406-423C-940B-3403948DCA1F</bpmn2:outgoing>
+ <bpmn2:ioSpecification>
+ <bpmn2:dataInput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX" drools:dtype="Object" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputXItem" name="TaskName"/>
+ <bpmn2:dataInput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX" drools:dtype="org.kie.kogito.hr.CandidateData" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputXItem" name="candidate"/>
+ <bpmn2:dataInput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX" drools:dtype="org.kie.kogito.hr.Offer" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputXItem" name="offer"/>
+ <bpmn2:dataInput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX" drools:dtype="Boolean" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputXItem" name="approve"/>
+ <bpmn2:dataInput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX" drools:dtype="Object" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputXItem" name="Skippable"/>
+ <bpmn2:dataOutput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX" drools:dtype="Boolean" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputXItem" name="approve"/>
+ <bpmn2:dataOutput id="_B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX" drools:dtype="org.kie.kogito.hr.Offer" itemSubjectRef="__B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputXItem" name="offer"/>
+ <bpmn2:inputSet>
+ <bpmn2:dataInputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX</bpmn2:dataInputRefs>
+ <bpmn2:dataInputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX</bpmn2:dataInputRefs>
+ </bpmn2:inputSet>
+ <bpmn2:outputSet>
+ <bpmn2:dataOutputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX</bpmn2:dataOutputRefs>
+ <bpmn2:dataOutputRefs>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX</bpmn2:dataOutputRefs>
+ </bpmn2:outputSet>
+ </bpmn2:ioSpecification>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[HRInterview]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>candidateData</bpmn2:sourceRef>
+ <bpmn2:targetRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>offer</bpmn2:sourceRef>
+ <bpmn2:targetRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:sourceRef>hr_approval</bpmn2:sourceRef>
+ <bpmn2:targetRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX</bpmn2:targetRef>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataInputAssociation>
+ <bpmn2:targetRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX</bpmn2:targetRef>
+ <bpmn2:assignment>
+ <bpmn2:from xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+ <bpmn2:to xsi:type="bpmn2:tFormalExpression"><![CDATA[_B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX]]></bpmn2:to>
+ </bpmn2:assignment>
+ </bpmn2:dataInputAssociation>
+ <bpmn2:dataOutputAssociation>
+ <bpmn2:sourceRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX</bpmn2:sourceRef>
+ <bpmn2:targetRef>hr_approval</bpmn2:targetRef>
+ </bpmn2:dataOutputAssociation>
+ <bpmn2:dataOutputAssociation>
+ <bpmn2:sourceRef>_B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX</bpmn2:sourceRef>
+ <bpmn2:targetRef>offer</bpmn2:targetRef>
+ </bpmn2:dataOutputAssociation>
+ <bpmn2:potentialOwner id="_0Iumgm0AEDySCYWhrcdpgA">
+ <bpmn2:resourceAssignmentExpression id="_0Iumg20AEDySCYWhrcdpgA">
+ <bpmn2:formalExpression>jdoe</bpmn2:formalExpression>
+ </bpmn2:resourceAssignmentExpression>
+ </bpmn2:potentialOwner>
+ </bpmn2:userTask>
+ <bpmn2:startEvent id="_1639F738-45F3-4CD6-A80E-CCEBAA605D56">
+ <bpmn2:outgoing>_8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ <bpmn2:boundaryEvent id="_116F3C54-A10E-4952-9E08-1CACE74CED0B" drools:dockerinfo="60.93617021276596^74|" drools:boundaryca="true" attachedToRef="_B8C4F63C-81AD-4291-9C1B-84967277EEF6">
+ <bpmn2:outgoing>_7B41F971-C74D-4036-8A5E-EFF81C37986A</bpmn2:outgoing>
+ <bpmn2:timerEventDefinition>
+ <bpmn2:timeDuration xsi:type="bpmn2:tFormalExpression">PT180S</bpmn2:timeDuration>
+ </bpmn2:timerEventDefinition>
+ </bpmn2:boundaryEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="hiring">
+ <bpmndi:BPMNShape id="shape__116F3C54-A10E-4952-9E08-1CACE74CED0B" bpmnElement="_116F3C54-A10E-4952-9E08-1CACE74CED0B">
+ <dc:Bounds height="56" width="56" x="861.936170212766" y="86.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__1639F738-45F3-4CD6-A80E-CCEBAA605D56" bpmnElement="_1639F738-45F3-4CD6-A80E-CCEBAA605D56">
+ <dc:Bounds height="56" width="56.000000000000014" x="71.99999999999999" y="35.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__B8C4F63C-81AD-4291-9C1B-84967277EEF6" bpmnElement="_B8C4F63C-81AD-4291-9C1B-84967277EEF6">
+ <dc:Bounds height="102" width="154" x="801" y="12.000000000000057"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__8962C15F-55EC-46F7-B926-5D5A1FD8D35E" bpmnElement="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E">
+ <dc:Bounds height="102" width="154" x="984.75" y="12.000000000000057"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__5BDBE48C-CC83-46A9-9D56-F846F8FC1045" bpmnElement="_5BDBE48C-CC83-46A9-9D56-F846F8FC1045">
+ <dc:Bounds height="102" width="154" x="162.75" y="12.000000000000057"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__834B21EF-9229-44F8-A5DB-D96EBB39A347" bpmnElement="_834B21EF-9229-44F8-A5DB-D96EBB39A347">
+ <dc:Bounds height="102" width="154" x="811.75" y="197.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__B9662806-84F3-4444-AD62-4790CDA7C85D" bpmnElement="_B9662806-84F3-4444-AD62-4790CDA7C85D">
+ <dc:Bounds height="56" width="56" x="1164.75" y="35.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__A51A809E-03C0-4EA7-91F1-7B3C5E29AD04" bpmnElement="_A51A809E-03C0-4EA7-91F1-7B3C5E29AD04">
+ <dc:Bounds height="56" width="56" x="343.75" y="35.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__30C8C01B-4149-4AE5-8D86-D27D57BCA8E7" bpmnElement="_30C8C01B-4149-4AE5-8D86-D27D57BCA8E7">
+ <dc:Bounds height="56" width="56" x="1164.75" y="392.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__4B7FF147-F096-435B-8CAF-48318EF786B0" bpmnElement="_4B7FF147-F096-435B-8CAF-48318EF786B0">
+ <dc:Bounds height="102" width="154" x="1263.75" y="369.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__457DC13A-0AEC-4390-A860-5CCFFB67B366" bpmnElement="_457DC13A-0AEC-4390-A860-5CCFFB67B366">
+ <dc:Bounds height="56" width="56" x="1468.75" y="392.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A" bpmnElement="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A">
+ <dc:Bounds height="102" width="154" x="435.75" y="12.000000000000057"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__6CE52250-BCEE-485C-8AE4-F6CACF2EF5A1" bpmnElement="_6CE52250-BCEE-485C-8AE4-F6CACF2EF5A1">
+ <dc:Bounds height="56" width="56" x="1468.75" y="35.00000000000006"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C" bpmnElement="_57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C">
+ <dc:Bounds height="102" width="154" x="618.75" y="12.000000000000057"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__940F2A0C-8CC6-4ECA-B504-49363AF68B67" bpmnElement="_940F2A0C-8CC6-4ECA-B504-49363AF68B67">
+ <dc:Bounds height="102" width="154" x="1263.75" y="12.000000000000057"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="edge_shape__116F3C54-A10E-4952-9E08-1CACE74CED0B_to_shape__834B21EF-9229-44F8-A5DB-D96EBB39A347" bpmnElement="_7B41F971-C74D-4036-8A5E-EFF81C37986A">
+ <di:waypoint x="889.936170212766" y="114.00000000000006"/>
+ <di:waypoint x="888.75" y="248.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__1639F738-45F3-4CD6-A80E-CCEBAA605D56_to_shape__5BDBE48C-CC83-46A9-9D56-F846F8FC1045" bpmnElement="_8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A">
+ <di:waypoint x="99.99999999999999" y="91.00000000000006"/>
+ <di:waypoint x="239.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C_to_shape__B8C4F63C-81AD-4291-9C1B-84967277EEF6" bpmnElement="_ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383">
+ <di:waypoint x="695.75" y="63.00000000000006"/>
+ <di:waypoint x="801" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__B8C4F63C-81AD-4291-9C1B-84967277EEF6_to_shape__8962C15F-55EC-46F7-B926-5D5A1FD8D35E" bpmnElement="_A76C6603-0406-423C-940B-3403948DCA1F">
+ <di:waypoint x="878" y="63.00000000000006"/>
+ <di:waypoint x="984.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__8962C15F-55EC-46F7-B926-5D5A1FD8D35E_to_shape__B9662806-84F3-4444-AD62-4790CDA7C85D" bpmnElement="_C62F7EFB-A009-450A-81C7-57D36F0DF766">
+ <di:waypoint x="1138.75" y="63.00000000000006"/>
+ <di:waypoint x="1164.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__5BDBE48C-CC83-46A9-9D56-F846F8FC1045_to_shape__A51A809E-03C0-4EA7-91F1-7B3C5E29AD04" bpmnElement="_5162ABF0-DD2E-4BDC-9A46-DDCFCB010287">
+ <di:waypoint x="316.75" y="63.00000000000006"/>
+ <di:waypoint x="343.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__834B21EF-9229-44F8-A5DB-D96EBB39A347_to_shape__30C8C01B-4149-4AE5-8D86-D27D57BCA8E7" bpmnElement="_5334FFDC-1FCB-47E6-8085-36DC9A3D17B9">
+ <di:waypoint x="888.75" y="248.00000000000006"/>
+ <di:waypoint x="1164.75" y="420.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__B9662806-84F3-4444-AD62-4790CDA7C85D_to_shape__940F2A0C-8CC6-4ECA-B504-49363AF68B67" bpmnElement="_B11455DE-F77A-4251-A85B-4C66636E3CD9">
+ <di:waypoint x="1220.75" y="63.00000000000006"/>
+ <di:waypoint x="1263.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__B9662806-84F3-4444-AD62-4790CDA7C85D_to_shape__30C8C01B-4149-4AE5-8D86-D27D57BCA8E7" bpmnElement="_B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E">
+ <di:waypoint x="1192.75" y="91.00000000000006"/>
+ <di:waypoint x="1192.75" y="420.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__A51A809E-03C0-4EA7-91F1-7B3C5E29AD04_to_shape__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A" bpmnElement="_59F9A0E6-7F9C-43A9-8920-5B40A91169E6">
+ <di:waypoint x="371.75" y="63.00000000000006"/>
+ <di:waypoint x="435.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__A51A809E-03C0-4EA7-91F1-7B3C5E29AD04_to_shape__30C8C01B-4149-4AE5-8D86-D27D57BCA8E7" bpmnElement="_C6E61C53-FD35-4347-B69E-30AA93AE4404">
+ <di:waypoint x="371.75" y="91.00000000000006"/>
+ <di:waypoint x="371.75" y="420.00000811728415"/>
+ <di:waypoint x="1192.75" y="420.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__30C8C01B-4149-4AE5-8D86-D27D57BCA8E7_to_shape__4B7FF147-F096-435B-8CAF-48318EF786B0" bpmnElement="_94172225-E124-4F14-98DA-C3D62C11254A">
+ <di:waypoint x="1192.75" y="420.00000000000006"/>
+ <di:waypoint x="1263.75" y="420.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__4B7FF147-F096-435B-8CAF-48318EF786B0_to_shape__457DC13A-0AEC-4390-A860-5CCFFB67B366" bpmnElement="_527D3164-4989-4D2C-B80B-9BA9D4C8FB89">
+ <di:waypoint x="1340.75" y="420.00000000000006"/>
+ <di:waypoint x="1545.75" y="392.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_to_shape__57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C" bpmnElement="_9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5">
+ <di:waypoint x="512.75" y="63.00000000000006"/>
+ <di:waypoint x="695.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="edge_shape__940F2A0C-8CC6-4ECA-B504-49363AF68B67_to_shape__6CE52250-BCEE-485C-8AE4-F6CACF2EF5A1" bpmnElement="_7DDA574A-C220-4FEF-9784-22EF8052EDEC">
+ <di:waypoint x="1340.75" y="63.00000000000006"/>
+ <di:waypoint x="1496.75" y="63.00000000000006"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+ <bpmn2:relationship type="BPSimData">
+ <bpmn2:extensionElements>
+ <bpsim:BPSimData>
+ <bpsim:Scenario id="default" name="Simulationscenario">
+ <bpsim:ScenarioParameters/>
+ <bpsim:ElementParameters elementRef="_1639F738-45F3-4CD6-A80E-CCEBAA605D56">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_B8C4F63C-81AD-4291-9C1B-84967277EEF6">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_8962C15F-55EC-46F7-B926-5D5A1FD8D35E">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_5BDBE48C-CC83-46A9-9D56-F846F8FC1045">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_834B21EF-9229-44F8-A5DB-D96EBB39A347">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_4B7FF147-F096-435B-8CAF-48318EF786B0">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_57DBE42C-6850-4A08-AC73-2BB0FFDFCC8C">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ <bpsim:ElementParameters elementRef="_940F2A0C-8CC6-4ECA-B504-49363AF68B67">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ </bpsim:Scenario>
+ </bpsim:BPSimData>
+ </bpmn2:extensionElements>
+ <bpmn2:source>_0IqVEG0AEDySCYWhrcdpgA</bpmn2:source>
+ <bpmn2:target>_0IqVEG0AEDySCYWhrcdpgA</bpmn2:target>
+ </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@kie.apache.org
For additional commands, e-mail: commits-help@kie.apache.org