This is an automated email from the ASF dual-hosted git repository.

fjtiradosarti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git


The following commit(s) were added to refs/heads/main by this push:
     new e50ca030d [Fix_1983] Handling null version (#1984)
e50ca030d is described below

commit e50ca030d2533473d1b1404d31e271fb9c7f5c91
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Fri Feb 9 18:18:12 2024 +0100

    [Fix_1983] Handling null version (#1984)
    
    Rather than composing string for postgres, we pass composite key from
    businnes layer
---
 .../kie/kogito/index/service/IndexingService.java  |  7 +--
 .../graphql/AbstractGraphQLSchemaManager.java      |  9 +--
 .../kie/kogito/index/model/ProcessDefinition.java  | 15 -----
 .../kogito/index/model/ProcessDefinitionKey.java}  | 59 ++++++-----------
 .../index/storage/DataIndexStorageService.java     |  3 +-
 .../org/kie/kogito/index/test/QueryTestBase.java   |  4 +-
 .../query/AbstractProcessDefinitionQueryIT.java    | 35 ++++++-----
 .../storage/ModelDataIndexStorageService.java      |  5 +-
 .../storage/ModelProcessDefinitionStorage.java     | 73 ++++++++++++++++++++++
 .../index/storage/ModelProcessInstanceStorage.java | 20 +++++-
 .../kogito/index/storage/ModelStorageFetcher.java  | 39 ++++++++++--
 .../storage/ModelUserTaskInstanceStorage.java      | 20 +++++-
 .../storage/ModelDataIndexStorageServiceTest.java  | 36 +++++++++++
 .../index/jpa/model/ProcessDefinitionEntity.java   |  4 +-
 .../model/ProcessDefinitionEntityRepository.java   |  4 +-
 .../jpa/storage/AbstractJPAStorageFetcher.java     | 10 +--
 .../kogito/index/jpa/storage/AbstractStorage.java  | 18 +++---
 .../jpa/storage/JPADataIndexStorageService.java    | 22 +++----
 .../index/jpa/storage/JPAStorageService.java       | 73 ----------------------
 .../kogito/index/jpa/storage/JobEntityStorage.java |  2 +-
 .../storage/ProcessDefinitionEntityStorage.java    | 27 ++++----
 .../jpa/storage/ProcessInstanceEntityStorage.java  |  2 +-
 .../jpa/storage/UserTaskInstanceEntityStorage.java |  2 +-
 .../AbstractProcessDefinitionEntityQueryIT.java    |  3 +-
 .../index/jpa/storage/AbstractJobStorageIT.java    | 18 ++----
 .../AbstractProcessDefinitionStorageIT.java        | 20 ++----
 .../index/jpa/storage/AbstractStorageIT.java       | 13 ++--
 .../index/jdbc/JdbcStorageServiceProducer.java     | 49 ---------------
 .../model/ProcessDefinitionEntityMapper.java       |  2 +-
 .../mongodb/query/ProcessDefinitionQueryIT.java    | 10 +--
 .../storage/ProcessDefinitionStorageIT.java        | 12 ++--
 .../PostgreSqlStorageServiceProducer.java          | 50 ---------------
 .../index/addon/ProcessDefinitionRegister.java     |  3 +-
 33 files changed, 313 insertions(+), 356 deletions(-)

diff --git 
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/IndexingService.java
 
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/IndexingService.java
index 4e9c733f3..2802fe8f9 100644
--- 
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/IndexingService.java
+++ 
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/service/IndexingService.java
@@ -41,7 +41,7 @@ import 
org.kie.kogito.event.usertask.UserTaskInstanceDeadlineDataEvent;
 import org.kie.kogito.event.usertask.UserTaskInstanceStateDataEvent;
 import org.kie.kogito.event.usertask.UserTaskInstanceVariableDataEvent;
 import org.kie.kogito.index.model.Job;
-import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.storage.DataIndexStorageService;
 import org.kie.kogito.index.storage.ProcessInstanceStorage;
 import org.kie.kogito.index.storage.UserTaskInstanceStorage;
@@ -92,9 +92,8 @@ public class IndexingService {
     //retry in case of rare but possible race condition during the insert for 
the first registry
     @Retry(maxRetries = 3, delay = 300, jitter = 100, retryOn = 
ConcurrentModificationException.class)
     public void indexProcessDefinition(ProcessDefinitionDataEvent 
definitionDataEvent) {
-        ProcessDefinition definition = ProcessDefinitionHelper
-                
.merge(manager.getProcessDefinitionStorage().get(ProcessDefinition.toKey(definitionDataEvent.getKogitoProcessId(),
 definitionDataEvent.getData().getVersion())), definitionDataEvent);
-        manager.getProcessDefinitionStorage().put(definition.getKey(), 
definition);
+        ProcessDefinitionKey key = new 
ProcessDefinitionKey(definitionDataEvent.getKogitoProcessId(), 
definitionDataEvent.getData().getVersion());
+        manager.getProcessDefinitionStorage().put(key, 
ProcessDefinitionHelper.merge(manager.getProcessDefinitionStorage().get(key), 
definitionDataEvent));
     }
 
     //retry in case of rare but possible race condition during the insert for 
the first registry
diff --git 
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
 
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
index bcb759c63..6dd81262b 100644
--- 
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
+++ 
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
@@ -34,6 +34,7 @@ import 
org.kie.kogito.index.graphql.query.GraphQLQueryParserRegistry;
 import org.kie.kogito.index.model.Job;
 import org.kie.kogito.index.model.Node;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.model.ProcessInstance;
 import org.kie.kogito.index.model.UserTaskInstance;
 import org.kie.kogito.index.service.DataIndexServiceException;
@@ -137,7 +138,7 @@ public abstract class AbstractGraphQLSchemaManager 
implements GraphQLSchemaManag
 
     public ProcessDefinition getProcessDefinition(DataFetchingEnvironment env) 
{
         ProcessInstance source = env.getSource();
-        return 
cacheService.getProcessDefinitionStorage().get(ProcessDefinition.toKey(source.getProcessId(),
 source.getVersion()));
+        return cacheService.getProcessDefinitionStorage().get(new 
ProcessDefinitionKey(source.getProcessId(), source.getVersion()));
     }
 
     protected String getServiceUrl(String endpoint, String processId) {
@@ -188,7 +189,7 @@ public abstract class AbstractGraphQLSchemaManager 
implements GraphQLSchemaManag
         return 
executeAdvancedQueryForCache(cacheService.getProcessInstanceStorage(), env);
     }
 
-    protected <T> List<T> executeAdvancedQueryForCache(StorageFetcher<String, 
T> cache, DataFetchingEnvironment env) {
+    protected <K, T> List<T> executeAdvancedQueryForCache(StorageFetcher<K, T> 
cache, DataFetchingEnvironment env) {
         Objects.requireNonNull(cache, "Cache not found");
 
         String inputTypeName = ((GraphQLNamedType) 
env.getFieldDefinition().getArgument("where").getType()).getName();
@@ -231,7 +232,7 @@ public abstract class AbstractGraphQLSchemaManager 
implements GraphQLSchemaManag
 
     public CompletableFuture<String> 
getProcessInstanceSource(DataFetchingEnvironment env) {
         ProcessInstance pi = env.getSource();
-        ProcessDefinition pd = 
cacheService.getProcessDefinitionStorage().get(ProcessDefinition.toKey(pi.getProcessId(),
 pi.getVersion()));
+        ProcessDefinition pd = 
cacheService.getProcessDefinitionStorage().get(new 
ProcessDefinitionKey(pi.getProcessId(), pi.getVersion()));
         if (pd == null) {
             return 
dataIndexApiExecutor.getProcessDefinitionSourceFileContent(getServiceUrl(pi.getEndpoint(),
 pi.getProcessId()), pi.getProcessId());
         } else {
@@ -241,7 +242,7 @@ public abstract class AbstractGraphQLSchemaManager 
implements GraphQLSchemaManag
 
     public CompletableFuture<List<Node>> 
getProcessInstanceNodes(DataFetchingEnvironment env) {
         ProcessInstance pi = env.getSource();
-        ProcessDefinition pd = 
cacheService.getProcessDefinitionStorage().get(ProcessDefinition.toKey(pi.getProcessId(),
 pi.getVersion()));
+        ProcessDefinition pd = 
cacheService.getProcessDefinitionStorage().get(new 
ProcessDefinitionKey(pi.getProcessId(), pi.getVersion()));
         if (pd == null) {
             return 
dataIndexApiExecutor.getProcessDefinitionNodes(getServiceUrl(pi.getEndpoint(), 
pi.getProcessId()), pi.getProcessId());
         } else {
diff --git 
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
index 200d4347f..e6e2450ea 100644
--- 
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
+++ 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinition.java
@@ -21,9 +21,7 @@ package org.kie.kogito.index.model;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.Set;
-import java.util.regex.Pattern;
 
 public class ProcessDefinition {
 
@@ -112,18 +110,6 @@ public class ProcessDefinition {
         this.nodes = nodes;
     }
 
-    public String getKey() {
-        return toKey(id, version);
-    }
-
-    public static String toKey(String processId, String version) {
-        return processId + "$v:" + version;
-    }
-
-    public static String[] fromKey(String key) {
-        return Optional.ofNullable(key).map(k -> 
k.split(Pattern.quote("$v:"))).orElse(new String[0]);
-    }
-
     public String getDescription() {
         return description;
     }
@@ -176,5 +162,4 @@ public class ProcessDefinition {
                 ", nodes='" + nodes + '\'' +
                 '}';
     }
-
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityId.java
 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinitionKey.java
similarity index 52%
rename from 
data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityId.java
rename to 
data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinitionKey.java
index 28f61990f..a850f9efd 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityId.java
+++ 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessDefinitionKey.java
@@ -16,74 +16,53 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.index.jpa.model;
+package org.kie.kogito.index.model;
 
-import java.io.Serializable;
 import java.util.Objects;
 
-import static org.kie.kogito.index.model.ProcessDefinition.fromKey;
-import static org.kie.kogito.index.model.ProcessDefinition.toKey;
-
-public class ProcessDefinitionEntityId implements Serializable {
+public class ProcessDefinitionKey {
 
     private String id;
-
     private String version;
 
-    public ProcessDefinitionEntityId() {
-    }
-
-    public ProcessDefinitionEntityId(String key) {
-        String[] fromKey = fromKey(key);
-        this.id = fromKey[0];
-        this.version = fromKey[1];
-    }
-
-    public ProcessDefinitionEntityId(String id, String version) {
+    public ProcessDefinitionKey(String id, String version) {
         this.id = id;
         this.version = version;
     }
 
-    public String getKey() {
-        return toKey(id, version);
-    }
-
     public String getId() {
         return id;
     }
 
-    public void setId(String id) {
-        this.id = id;
-    }
-
     public String getVersion() {
         return version;
     }
 
-    public void setVersion(String version) {
-        this.version = version;
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, version);
     }
 
     @Override
-    public boolean equals(Object o) {
-        if (this == o)
+    public boolean equals(Object obj) {
+        if (this == obj) {
             return true;
-        if (o == null || getClass() != o.getClass())
+        }
+        if (!(obj instanceof ProcessDefinitionKey)) {
             return false;
-        ProcessDefinitionEntityId that = (ProcessDefinitionEntityId) o;
-        return Objects.equals(id, that.id) && Objects.equals(version, 
that.version);
+        }
+        ProcessDefinitionKey other = (ProcessDefinitionKey) obj;
+        return Objects.equals(id, other.id) && Objects.equals(version, 
other.version);
     }
 
     @Override
-    public int hashCode() {
-        return Objects.hash(id, version);
+    public String toString() {
+        return "ProcessDefinitionKey [id=" + id + ", version=" + version + "]";
     }
 
-    @Override
-    public String toString() {
-        return "ProcessDefinitionEntityId{" +
-                "id='" + id + '\'' +
-                ", version='" + version + '\'' +
-                '}';
+    @SuppressWarnings("unused")
+    private ProcessDefinitionKey() {
+        // needed by external tools 
     }
+
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/storage/DataIndexStorageService.java
 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/storage/DataIndexStorageService.java
index 5e8995d08..43c951fd8 100644
--- 
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/storage/DataIndexStorageService.java
+++ 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/storage/DataIndexStorageService.java
@@ -20,13 +20,14 @@ package org.kie.kogito.index.storage;
 
 import org.kie.kogito.index.model.Job;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.persistence.api.Storage;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public interface DataIndexStorageService {
 
-    Storage<String, ProcessDefinition> getProcessDefinitionStorage();
+    Storage<ProcessDefinitionKey, ProcessDefinition> 
getProcessDefinitionStorage();
 
     ProcessInstanceStorage getProcessInstanceStorage();
 
diff --git 
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestBase.java
 
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestBase.java
index c2a654df8..5e25817c6 100644
--- 
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestBase.java
+++ 
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/QueryTestBase.java
@@ -34,8 +34,8 @@ public abstract class QueryTestBase<K, V> {
         return true;
     }
 
-    public void queryAndAssert(BiConsumer<List<V>, String[]> assertConsumer, 
StorageFetcher<K, V> storage, List<AttributeFilter<?>> filters, 
List<AttributeSort> sort, Integer offset, Integer limit,
-            String... ids) {
+    public void queryAndAssert(BiConsumer<List<V>, K[]> assertConsumer, 
StorageFetcher<K, V> storage, List<AttributeFilter<?>> filters, 
List<AttributeSort> sort, Integer offset, Integer limit,
+            K... ids) {
         
assertConsumer.accept(storage.query().filter(filters).sort(sort).offset(offset).limit(limit).execute(),
 ids);
     }
 
diff --git 
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
 
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
index dc0bd2de9..a6e61fc01 100644
--- 
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessDefinitionQueryIT.java
@@ -22,8 +22,10 @@ import java.util.List;
 import java.util.Set;
 import java.util.function.BiConsumer;
 
+import org.assertj.core.groups.Tuple;
 import org.junit.jupiter.api.Test;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.test.QueryTestBase;
 import org.kie.kogito.index.test.TestUtils;
 import org.kie.kogito.persistence.api.Storage;
@@ -41,34 +43,37 @@ import static 
org.kie.kogito.persistence.api.query.QueryFilterFactory.isNull;
 import static org.kie.kogito.persistence.api.query.QueryFilterFactory.notNull;
 import static org.kie.kogito.persistence.api.query.QueryFilterFactory.orderBy;
 
-public abstract class AbstractProcessDefinitionQueryIT extends 
QueryTestBase<String, ProcessDefinition> {
+public abstract class AbstractProcessDefinitionQueryIT extends 
QueryTestBase<ProcessDefinitionKey, ProcessDefinition> {
 
-    public abstract Storage<String, ProcessDefinition> getStorage();
+    public abstract Storage<ProcessDefinitionKey, ProcessDefinition> 
getStorage();
 
     @Test
     void testProcessDefinitionQuery() {
         String processId = "travels";
         ProcessDefinition pdv1 = TestUtils.createProcessDefinition(processId, 
"1.0", Set.of("admin", "kogito"));
-        Storage<String, ProcessDefinition> storage = getStorage();
-        storage.put(pdv1.getKey(), pdv1);
+        Storage<ProcessDefinitionKey, ProcessDefinition> storage = 
getStorage();
+        ProcessDefinitionKey pdv1Key = new ProcessDefinitionKey(pdv1.getId(), 
pdv1.getVersion());
+        storage.put(pdv1Key, pdv1);
         ProcessDefinition pdv2 = TestUtils.createProcessDefinition(processId, 
"2.0", Set.of("kogito"));
-        storage.put(pdv2.getKey(), pdv2);
+        ProcessDefinitionKey pdv2Key = new ProcessDefinitionKey(pdv2.getId(), 
pdv2.getVersion());
+        storage.put(pdv2Key, pdv2);
 
-        queryAndAssert(assertWithKey(), storage, 
singletonList(isNull("type")), null, null, null, pdv1.getKey(), pdv2.getKey());
-        queryAndAssert(assertWithKey(), storage, 
singletonList(notNull("version")), null, null, null, pdv1.getKey(), 
pdv2.getKey());
-        queryAndAssert(assertWithKey(), storage, 
singletonList(equalTo("version", pdv1.getVersion())), null, null, null, 
pdv1.getKey());
-        queryAndAssert(assertWithKey(), storage, 
singletonList(contains("roles", "admin")), null, null, null, pdv1.getKey());
-        queryAndAssert(assertWithKey(), storage, 
singletonList(containsAny("roles", asList("admin", "kogito"))), null, null, 
null, pdv1.getKey(), pdv2.getKey());
-        queryAndAssert(assertWithKey(), storage, 
singletonList(containsAll("roles", asList("admin", "kogito"))), null, null, 
null, pdv1.getKey());
+        queryAndAssert(assertWithKey(), storage, 
singletonList(isNull("type")), null, null, null, pdv1Key, pdv2Key);
+        queryAndAssert(assertWithKey(), storage, 
singletonList(notNull("version")), null, null, null, pdv1Key, pdv2Key);
+        queryAndAssert(assertWithKey(), storage, 
singletonList(equalTo("version", pdv1.getVersion())), null, null, null, 
pdv1Key);
+        queryAndAssert(assertWithKey(), storage, 
singletonList(contains("roles", "admin")), null, null, null, pdv1Key);
+        queryAndAssert(assertWithKey(), storage, 
singletonList(containsAny("roles", asList("admin", "kogito"))), null, null, 
null, pdv1Key, pdv2Key);
+        queryAndAssert(assertWithKey(), storage, 
singletonList(containsAll("roles", asList("admin", "kogito"))), null, null, 
null, pdv1Key);
         queryAndAssert(assertWithKey(), storage, asList(in("id", 
asList(pdv1.getId(), pdv2.getId())),
                 in("version", asList(pdv1.getVersion(), pdv2.getVersion()))),
-                singletonList(orderBy("version", SortDirection.ASC)), 1, 1, 
pdv2.getKey());
+                singletonList(orderBy("version", SortDirection.ASC)), 1, 1, 
pdv2Key);
         queryAndAssert(assertWithKey(), storage, null, 
singletonList(orderBy("version", SortDirection.DESC)), null,
-                null, pdv2.getKey(), pdv1.getKey());
+                null, pdv2Key, pdv1Key);
     }
 
-    public static <V> BiConsumer<List<V>, String[]> assertWithKey() {
-        return (instances, ids) -> assertThat(instances).hasSize(ids == null ? 
0 : ids.length).extracting("key").containsExactly(ids);
+    public static <V> BiConsumer<List<V>, ProcessDefinitionKey[]> 
assertWithKey() {
+        return (instances, ids) -> assertThat(instances).hasSize(ids == null ? 
0 : ids.length).extracting("id", "version").map(Tuple::toArray)
+                .map(objs -> new ProcessDefinitionKey((String) objs[0], 
(String) objs[1])).containsExactly(ids);
     }
 
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelDataIndexStorageService.java
 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelDataIndexStorageService.java
index 007ecb51c..693928d99 100644
--- 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelDataIndexStorageService.java
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelDataIndexStorageService.java
@@ -20,6 +20,7 @@ package org.kie.kogito.index.storage;
 
 import org.kie.kogito.index.model.Job;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.model.ProcessInstance;
 import org.kie.kogito.index.model.UserTaskInstance;
 import org.kie.kogito.persistence.api.Storage;
@@ -43,8 +44,8 @@ public class ModelDataIndexStorageService implements 
DataIndexStorageService {
     StorageService storageService;
 
     @Override
-    public Storage<String, ProcessDefinition> getProcessDefinitionStorage() {
-        return storageService.getCache(PROCESS_DEFINITIONS_STORAGE, 
ProcessDefinition.class);
+    public Storage<ProcessDefinitionKey, ProcessDefinition> 
getProcessDefinitionStorage() {
+        return new 
ModelProcessDefinitionStorage(storageService.getCache(PROCESS_DEFINITIONS_STORAGE,
 ProcessDefinition.class));
     }
 
     @Override
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessDefinitionStorage.java
 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessDefinitionStorage.java
new file mode 100644
index 000000000..5462c4df0
--- /dev/null
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessDefinitionStorage.java
@@ -0,0 +1,73 @@
+/*
+ * 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.index.storage;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
+import org.kie.kogito.persistence.api.Storage;
+
+public class ModelProcessDefinitionStorage extends 
ModelStorageFetcher<ProcessDefinitionKey, ProcessDefinition> implements 
Storage<ProcessDefinitionKey, ProcessDefinition> {
+
+    private static final String VERSION_SEPARATOR = "$v:";
+
+    static ProcessDefinitionKey fromString(String key) {
+        int indexOf = key.indexOf(VERSION_SEPARATOR);
+        return indexOf == -1 ? new ProcessDefinitionKey(key, null)
+                : new ProcessDefinitionKey(key.substring(0, indexOf), 
key.substring(indexOf + VERSION_SEPARATOR.length()));
+    }
+
+    static String toString(ProcessDefinitionKey key) {
+        String id = key.getId();
+        String version = key.getVersion();
+        return version == null ? id : id + VERSION_SEPARATOR + version;
+    }
+
+    public ModelProcessDefinitionStorage(Storage<String, ProcessDefinition> 
storage) {
+        super(storage, ModelProcessDefinitionStorage::toString, 
ModelProcessDefinitionStorage::fromString);
+    }
+
+    @Override
+    public ProcessDefinition put(ProcessDefinitionKey key, ProcessDefinition 
value) {
+        return storage.put(toString(key), value);
+    }
+
+    @Override
+    public ProcessDefinition remove(ProcessDefinitionKey key) {
+        return storage.remove(toString(key));
+    }
+
+    @Override
+    public boolean containsKey(ProcessDefinitionKey key) {
+        return storage.containsKey(toString(key));
+    }
+
+    @Override
+    public Map<ProcessDefinitionKey, ProcessDefinition> entries() {
+        return 
storage.entries().entrySet().stream().collect(Collectors.toMap(e -> 
fromString(e.getKey()), Entry::getValue));
+    }
+
+    @Override
+    public String getRootType() {
+        return ProcessDefinition.class.getName();
+    }
+}
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessInstanceStorage.java
 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessInstanceStorage.java
index 52c8b5689..9f21497fc 100644
--- 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessInstanceStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelProcessInstanceStorage.java
@@ -1,3 +1,21 @@
+/*
+ * 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.index.storage;
 
 import org.kie.kogito.event.process.ProcessInstanceDataEvent;
@@ -15,7 +33,7 @@ import 
org.kie.kogito.index.storage.merger.ProcessInstanceStateDataEventMerger;
 import 
org.kie.kogito.index.storage.merger.ProcessInstanceVariableDataEventMerger;
 import org.kie.kogito.persistence.api.Storage;
 
-public class ModelProcessInstanceStorage extends 
ModelStorageFetcher<ProcessInstance> implements ProcessInstanceStorage {
+public class ModelProcessInstanceStorage extends ModelStorageFetcher<String, 
ProcessInstance> implements ProcessInstanceStorage {
     private final ProcessInstanceErrorDataEventMerger errorMerger = new 
ProcessInstanceErrorDataEventMerger();
     private final ProcessInstanceNodeDataEventMerger nodeMerger = new 
ProcessInstanceNodeDataEventMerger();
     private final ProcessInstanceSLADataEventMerger slaMerger = new 
ProcessInstanceSLADataEventMerger();
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelStorageFetcher.java
 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelStorageFetcher.java
index cbadc33c5..8ea6b833d 100644
--- 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelStorageFetcher.java
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelStorageFetcher.java
@@ -1,17 +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.index.storage;
 
+import java.util.function.Function;
+
 import org.kie.kogito.persistence.api.Storage;
 import org.kie.kogito.persistence.api.StorageFetcher;
 import org.kie.kogito.persistence.api.query.Query;
 
 import io.smallrye.mutiny.Multi;
 
-public abstract class ModelStorageFetcher<V> implements StorageFetcher<String, 
V> {
+public abstract class ModelStorageFetcher<K, V> implements StorageFetcher<K, 
V> {
 
     protected final Storage<String, V> storage;
 
+    private final Function<K, String> toString;
+    private final Function<String, K> fromString;
+
     public ModelStorageFetcher(Storage<String, V> storage) {
+        this(storage, Object::toString, s -> (K) s);
+    }
+
+    public ModelStorageFetcher(Storage<String, V> storage, Function<K, String> 
toString, Function<String, K> fromString) {
         this.storage = storage;
+        this.toString = toString;
+        this.fromString = fromString;
     }
 
     @Override
@@ -25,8 +54,8 @@ public abstract class ModelStorageFetcher<V> implements 
StorageFetcher<String, V
     }
 
     @Override
-    public Multi<String> objectRemovedListener() {
-        return storage.objectRemovedListener();
+    public Multi<K> objectRemovedListener() {
+        return storage.objectRemovedListener().map(fromString);
     }
 
     @Override
@@ -35,8 +64,8 @@ public abstract class ModelStorageFetcher<V> implements 
StorageFetcher<String, V
     }
 
     @Override
-    public V get(String key) {
-        return storage.get(key);
+    public V get(K key) {
+        return storage.get(toString.apply(key));
     }
 
     @Override
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelUserTaskInstanceStorage.java
 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelUserTaskInstanceStorage.java
index d5a46917a..20f98a396 100644
--- 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelUserTaskInstanceStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/ModelUserTaskInstanceStorage.java
@@ -1,3 +1,21 @@
+/*
+ * 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.index.storage;
 
 import java.util.ArrayList;
@@ -19,7 +37,7 @@ import 
org.kie.kogito.index.storage.merger.UserTaskInstanceStateEventMerger;
 import 
org.kie.kogito.index.storage.merger.UserTaskInstanceVariableDataEventMerger;
 import org.kie.kogito.persistence.api.Storage;
 
-public class ModelUserTaskInstanceStorage extends 
ModelStorageFetcher<UserTaskInstance> implements UserTaskInstanceStorage {
+public class ModelUserTaskInstanceStorage extends ModelStorageFetcher<String, 
UserTaskInstance> implements UserTaskInstanceStorage {
 
     private final UserTaskInstanceAssignmentDataEventMerger assignmentMerger = 
new UserTaskInstanceAssignmentDataEventMerger();
     private final UserTaskInstanceAttachmentDataEventMerger attachmentMerger = 
new UserTaskInstanceAttachmentDataEventMerger();
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/test/java/org/kie/kogito/index/storage/ModelDataIndexStorageServiceTest.java
 
b/data-index/data-index-storage/data-index-storage-common/src/test/java/org/kie/kogito/index/storage/ModelDataIndexStorageServiceTest.java
new file mode 100644
index 000000000..64ab4b0d7
--- /dev/null
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/test/java/org/kie/kogito/index/storage/ModelDataIndexStorageServiceTest.java
@@ -0,0 +1,36 @@
+package org.kie.kogito.index.storage;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ModelDataIndexStorageServiceTest {
+
+    @Test
+    void testIdAndVersion() {
+        assertKeyConversion(new ProcessDefinitionKey("Javierito", "1_0"));
+    }
+
+    @Test
+    void testIdEmptyVersion() {
+        assertKeyConversion(new ProcessDefinitionKey("Javierito", ""));
+    }
+
+    @Test
+    void testIdNullVersion() {
+        assertKeyConversion(new ProcessDefinitionKey("Javierito", null));
+    }
+
+    private void assertKeyConversion(ProcessDefinitionKey key) {
+        Set<ProcessDefinitionKey> set = new HashSet<>();
+        set.add(key);
+        ProcessDefinitionKey deserializedKey = 
ModelProcessDefinitionStorage.fromString(ModelProcessDefinitionStorage.toString(key));
+        set.add(deserializedKey);
+        assertThat(deserializedKey).isEqualTo(key);
+        assertThat(set).hasSize(1);
+    }
+}
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
index 5ffdec6e2..dd2db761a 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntity.java
@@ -23,6 +23,8 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 
+import org.kie.kogito.index.model.ProcessDefinitionKey;
+
 import jakarta.persistence.CascadeType;
 import jakarta.persistence.CollectionTable;
 import jakarta.persistence.Column;
@@ -38,7 +40,7 @@ import jakarta.persistence.Table;
 
 @Entity(name = "definitions")
 @Table(name = "definitions")
-@IdClass(ProcessDefinitionEntityId.class)
+@IdClass(ProcessDefinitionKey.class)
 public class ProcessDefinitionEntity extends AbstractEntity {
 
     @Id
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityRepository.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityRepository.java
index a17d92a5f..c055cba6b 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityRepository.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessDefinitionEntityRepository.java
@@ -18,11 +18,13 @@
  */
 package org.kie.kogito.index.jpa.model;
 
+import org.kie.kogito.index.model.ProcessDefinitionKey;
+
 import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
 
 import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
-public class ProcessDefinitionEntityRepository implements 
PanacheRepositoryBase<ProcessDefinitionEntity, ProcessDefinitionEntityId> {
+public class ProcessDefinitionEntityRepository implements 
PanacheRepositoryBase<ProcessDefinitionEntity, ProcessDefinitionKey> {
 
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractJPAStorageFetcher.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractJPAStorageFetcher.java
index a87c7f8eb..c8ab20c38 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractJPAStorageFetcher.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractJPAStorageFetcher.java
@@ -29,18 +29,18 @@ import io.smallrye.mutiny.Multi;
 
 import jakarta.transaction.Transactional;
 
-public class AbstractJPAStorageFetcher<E extends AbstractEntity, V> implements 
StorageFetcher<String, V> {
+public class AbstractJPAStorageFetcher<K, E extends AbstractEntity, V> 
implements StorageFetcher<K, V> {
 
     private static final String LISTENER_NOT_AVAILABLE_IN_JPA = "Listener not 
available in JPA database";
 
-    protected PanacheRepositoryBase<E, String> repository;
+    protected PanacheRepositoryBase<E, K> repository;
     protected Class<E> entityClass;
     protected Function<E, V> mapToModel;
 
     protected AbstractJPAStorageFetcher() {
     }
 
-    protected AbstractJPAStorageFetcher(PanacheRepositoryBase<E, String> 
repository, Class<E> entityClass, Function<E, V> mapToModel) {
+    protected AbstractJPAStorageFetcher(PanacheRepositoryBase<E, K> 
repository, Class<E> entityClass, Function<E, V> mapToModel) {
         this.repository = repository;
         this.entityClass = entityClass;
         this.mapToModel = mapToModel;
@@ -57,7 +57,7 @@ public class AbstractJPAStorageFetcher<E extends 
AbstractEntity, V> implements S
     }
 
     @Override
-    public Multi<String> objectRemovedListener() {
+    public Multi<K> objectRemovedListener() {
         throw new UnsupportedOperationException(LISTENER_NOT_AVAILABLE_IN_JPA);
     }
 
@@ -68,7 +68,7 @@ public class AbstractJPAStorageFetcher<E extends 
AbstractEntity, V> implements S
 
     @Override
     @Transactional
-    public V get(String key) {
+    public V get(K key) {
         return repository.findByIdOptional(key).map(mapToModel).orElse(null);
     }
 
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractStorage.java
index abae372eb..4d339888e 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/AbstractStorage.java
@@ -33,18 +33,18 @@ import jakarta.transaction.Transactional;
 
 import static java.util.stream.Collectors.toMap;
 
-public abstract class AbstractStorage<E extends AbstractEntity, V> extends 
AbstractJPAStorageFetcher<E, V> implements Storage<String, V> {
+public abstract class AbstractStorage<K, E extends AbstractEntity, V> extends 
AbstractJPAStorageFetcher<K, E, V> implements Storage<K, V> {
 
     private Class<V> modelClass;
 
     private Function<V, E> mapToEntity;
-    private Function<E, String> mapEntityToKey;
+    private Function<E, K> mapEntityToKey;
 
     protected AbstractStorage() {
     }
 
-    protected AbstractStorage(PanacheRepositoryBase<E, String> repository, 
Class<V> modelClass, Class<E> entityClass, Function<E, V> mapToModel,
-            Function<V, E> mapToEntity, Function<E, String> mapEntityToKey) {
+    protected AbstractStorage(PanacheRepositoryBase<E, K> repository, Class<V> 
modelClass, Class<E> entityClass, Function<E, V> mapToModel,
+            Function<V, E> mapToEntity, Function<E, K> mapEntityToKey) {
         super(repository, entityClass, mapToModel);
         this.modelClass = modelClass;
         this.mapToEntity = mapToEntity;
@@ -53,7 +53,7 @@ public abstract class AbstractStorage<E extends 
AbstractEntity, V> extends Abstr
 
     @Override
     @Transactional
-    public V put(String key, V value) {
+    public V put(K key, V value) {
         //Pessimistic lock is used to lock the row to handle concurrency with 
an exiting registry
         E persistedEntity = repository.findById(key, 
LockModeType.PESSIMISTIC_WRITE);
         E newEntity = mapToEntity.apply(value);
@@ -72,7 +72,7 @@ public abstract class AbstractStorage<E extends 
AbstractEntity, V> extends Abstr
 
     @Override
     @Transactional
-    public V remove(String key) {
+    public V remove(K key) {
         V value = get(key);
         if (value != null) {
             repository.deleteById(key);
@@ -82,12 +82,12 @@ public abstract class AbstractStorage<E extends 
AbstractEntity, V> extends Abstr
 
     @Transactional
     @Override
-    public boolean containsKey(String key) {
+    public boolean containsKey(K key) {
         return repository.count("id = ?1", key) == 1;
     }
 
     @Override
-    public Map<String, V> entries() {
+    public Map<K, V> entries() {
         return repository.streamAll().collect(toMap(mapEntityToKey, 
mapToModel));
     }
 
@@ -102,7 +102,7 @@ public abstract class AbstractStorage<E extends 
AbstractEntity, V> extends Abstr
         return modelClass.getCanonicalName();
     }
 
-    protected PanacheRepositoryBase<E, String> getRepository() {
+    protected PanacheRepositoryBase<E, K> getRepository() {
         return repository;
     }
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPADataIndexStorageService.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPADataIndexStorageService.java
index 9a726a3a6..99bbccf0c 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPADataIndexStorageService.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPADataIndexStorageService.java
@@ -20,26 +20,25 @@ package org.kie.kogito.index.jpa.storage;
 
 import org.kie.kogito.index.model.Job;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.storage.DataIndexStorageService;
 import org.kie.kogito.index.storage.ProcessInstanceStorage;
 import org.kie.kogito.index.storage.UserTaskInstanceStorage;
 import org.kie.kogito.persistence.api.Storage;
-import org.kie.kogito.persistence.api.StorageService;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 
-import static org.kie.kogito.index.storage.Constants.JOBS_STORAGE;
-import static 
org.kie.kogito.index.storage.Constants.PROCESS_DEFINITIONS_STORAGE;
-import static org.kie.kogito.index.storage.Constants.PROCESS_ID_MODEL_STORAGE;
-
 @ApplicationScoped
 public class JPADataIndexStorageService implements DataIndexStorageService {
 
     @Inject
-    StorageService storageService;
+    ProcessDefinitionEntityStorage definitionStorage;
+
+    @Inject
+    JobEntityStorage jobsStorage;
 
     @Inject
     ProcessInstanceStorage processInstanceStorage;
@@ -48,8 +47,8 @@ public class JPADataIndexStorageService implements 
DataIndexStorageService {
     UserTaskInstanceStorage userTaskInstanceStorage;
 
     @Override
-    public Storage<String, ProcessDefinition> getProcessDefinitionStorage() {
-        return storageService.getCache(PROCESS_DEFINITIONS_STORAGE, 
ProcessDefinition.class);
+    public Storage<ProcessDefinitionKey, ProcessDefinition> 
getProcessDefinitionStorage() {
+        return definitionStorage;
     }
 
     @Override
@@ -64,13 +63,12 @@ public class JPADataIndexStorageService implements 
DataIndexStorageService {
 
     @Override
     public Storage<String, Job> getJobsStorage() {
-        return storageService.getCache(JOBS_STORAGE, Job.class);
+        return jobsStorage;
     }
 
     @Override
     public Storage<String, ObjectNode> getDomainModelCache(String processId) {
-        String rootType = getProcessIdModelCache().get(processId);
-        return rootType == null ? null : 
storageService.getCache(getDomainModelCacheName(processId), ObjectNode.class, 
rootType);
+        throw new UnsupportedOperationException("Generic custom type cache not 
available in JPA");
     }
 
     @Override
@@ -80,6 +78,6 @@ public class JPADataIndexStorageService implements 
DataIndexStorageService {
 
     @Override
     public Storage<String, String> getProcessIdModelCache() {
-        return storageService.getCache(PROCESS_ID_MODEL_STORAGE);
+        throw new UnsupportedOperationException("Generic String cache not 
available in JPA");
     }
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPAStorageService.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPAStorageService.java
deleted file mode 100644
index 89446436f..000000000
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPAStorageService.java
+++ /dev/null
@@ -1,73 +0,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.
- */
-package org.kie.kogito.index.jpa.storage;
-
-import org.kie.kogito.index.model.Job;
-import org.kie.kogito.index.model.ProcessDefinition;
-import org.kie.kogito.index.model.ProcessInstance;
-import org.kie.kogito.index.model.UserTaskInstance;
-import org.kie.kogito.persistence.api.Storage;
-import org.kie.kogito.persistence.api.StorageService;
-
-import static java.lang.String.format;
-
-public class JPAStorageService implements StorageService {
-
-    private ProcessDefinitionEntityStorage definitionStorage;
-    private ProcessInstanceEntityStorage processStorage;
-    private JobEntityStorage jobStorage;
-    private UserTaskInstanceEntityStorage taskStorage;
-
-    public JPAStorageService(final ProcessDefinitionEntityStorage 
definitionStorage,
-            final ProcessInstanceEntityStorage processStorage,
-            final JobEntityStorage jobStorage,
-            final UserTaskInstanceEntityStorage taskStorage) {
-        this.definitionStorage = definitionStorage;
-        this.processStorage = processStorage;
-        this.jobStorage = jobStorage;
-        this.taskStorage = taskStorage;
-    }
-
-    @Override
-    public Storage<String, String> getCache(String name) {
-        throw new UnsupportedOperationException("Generic String cache not 
available in PostgresSQL");
-    }
-
-    @Override
-    public <T> Storage<String, T> getCache(String name, Class<T> type) {
-        if (type == ProcessInstance.class) {
-            return (Storage<String, T>) processStorage;
-        }
-        if (type == ProcessDefinition.class) {
-            return (Storage<String, T>) definitionStorage;
-        }
-        if (type == Job.class) {
-            return (Storage<String, T>) jobStorage;
-        }
-        if (type == UserTaskInstance.class) {
-            return (Storage<String, T>) taskStorage;
-        }
-        throw new UnsupportedOperationException(format("Unknown class type: 
%s, cache not available", type.getCanonicalName()));
-    }
-
-    @Override
-    public <T> Storage<String, T> getCache(String name, Class<T> type, String 
rootType) {
-        throw new UnsupportedOperationException("Generic custom type cache not 
available in PostgresSQL");
-    }
-}
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JobEntityStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JobEntityStorage.java
index 697ed00c3..f5b9c270d 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JobEntityStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JobEntityStorage.java
@@ -28,7 +28,7 @@ import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 
 @ApplicationScoped
-public class JobEntityStorage extends AbstractStorage<JobEntity, Job> {
+public class JobEntityStorage extends AbstractStorage<String, JobEntity, Job> {
 
     protected JobEntityStorage() {
     }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
index 1bbe7d546..db641e4de 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessDefinitionEntityStorage.java
@@ -22,9 +22,9 @@ import java.util.Optional;
 
 import org.kie.kogito.index.jpa.mapper.ProcessDefinitionEntityMapper;
 import org.kie.kogito.index.jpa.model.ProcessDefinitionEntity;
-import org.kie.kogito.index.jpa.model.ProcessDefinitionEntityId;
 import org.kie.kogito.index.jpa.model.ProcessDefinitionEntityRepository;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 
 import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
 
@@ -35,25 +35,24 @@ import jakarta.persistence.LockModeType;
 import jakarta.transaction.Transactional;
 
 @ApplicationScoped
-public class ProcessDefinitionEntityStorage extends 
AbstractStorage<ProcessDefinitionEntity, ProcessDefinition> {
+public class ProcessDefinitionEntityStorage extends 
AbstractStorage<ProcessDefinitionKey, ProcessDefinitionEntity, 
ProcessDefinition> {
 
     protected ProcessDefinitionEntityStorage() {
     }
 
     @Inject
     public ProcessDefinitionEntityStorage(ProcessDefinitionEntityRepository 
repository, ProcessDefinitionEntityMapper mapper) {
-        super(new RepositoryAdapter(repository), ProcessDefinition.class, 
ProcessDefinitionEntity.class, mapper::mapToModel, mapper::mapToEntity, e -> 
new ProcessDefinitionEntityId(e.getId(),
-                e.getVersion()).getKey());
+        super(new RepositoryAdapter(repository), ProcessDefinition.class, 
ProcessDefinitionEntity.class, mapper::mapToModel, mapper::mapToEntity, e -> 
new ProcessDefinitionKey(e.getId(),
+                e.getVersion()));
     }
 
     @Transactional
     @Override
-    public boolean containsKey(String key) {
-        ProcessDefinitionEntityId id = new ProcessDefinitionEntityId(key);
-        return getRepository().count("id = ?1 and version = ?2", id.getId(), 
id.getVersion()) == 1;
+    public boolean containsKey(ProcessDefinitionKey key) {
+        return getRepository().count("id = ?1 and version = ?2", key.getId(), 
key.getVersion()) == 1;
     }
 
-    public static class RepositoryAdapter implements 
PanacheRepositoryBase<ProcessDefinitionEntity, String> {
+    public static class RepositoryAdapter implements 
PanacheRepositoryBase<ProcessDefinitionEntity, ProcessDefinitionKey> {
 
         ProcessDefinitionEntityRepository repository;
 
@@ -62,18 +61,18 @@ public class ProcessDefinitionEntityStorage extends 
AbstractStorage<ProcessDefin
         }
 
         @Override
-        public boolean deleteById(String key) {
-            return repository.deleteById(new ProcessDefinitionEntityId(key));
+        public boolean deleteById(ProcessDefinitionKey key) {
+            return repository.deleteById(key);
         }
 
         @Override
-        public Optional<ProcessDefinitionEntity> findByIdOptional(String key) {
-            return repository.findByIdOptional(new 
ProcessDefinitionEntityId(key));
+        public Optional<ProcessDefinitionEntity> 
findByIdOptional(ProcessDefinitionKey key) {
+            return repository.findByIdOptional(key);
         }
 
         @Override
-        public ProcessDefinitionEntity findById(String s, LockModeType 
lockModeType) {
-            return repository.findById(new ProcessDefinitionEntityId(s), 
lockModeType);
+        public ProcessDefinitionEntity findById(ProcessDefinitionKey s, 
LockModeType lockModeType) {
+            return repository.findById(s, lockModeType);
         }
 
         @Override
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
index f86570fbd..ffd900462 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
@@ -55,7 +55,7 @@ import static 
org.kie.kogito.event.process.ProcessInstanceNodeEventBody.EVENT_TY
 import static org.kie.kogito.index.DateTimeUtils.toZonedDateTime;
 
 @ApplicationScoped
-public class ProcessInstanceEntityStorage extends 
AbstractJPAStorageFetcher<ProcessInstanceEntity, ProcessInstance> implements 
ProcessInstanceStorage {
+public class ProcessInstanceEntityStorage extends 
AbstractJPAStorageFetcher<String, ProcessInstanceEntity, ProcessInstance> 
implements ProcessInstanceStorage {
 
     protected ProcessInstanceEntityStorage() {
     }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
index 4d5cc4700..1e2c127a3 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
@@ -56,7 +56,7 @@ import static java.lang.String.format;
 import static org.kie.kogito.index.DateTimeUtils.toZonedDateTime;
 
 @ApplicationScoped
-public class UserTaskInstanceEntityStorage extends 
AbstractJPAStorageFetcher<UserTaskInstanceEntity, UserTaskInstance> implements 
UserTaskInstanceStorage {
+public class UserTaskInstanceEntityStorage extends 
AbstractJPAStorageFetcher<String, UserTaskInstanceEntity, UserTaskInstance> 
implements UserTaskInstanceStorage {
 
     protected UserTaskInstanceEntityStorage() {
     }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/query/AbstractProcessDefinitionEntityQueryIT.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/query/AbstractProcessDefinitionEntityQueryIT.java
index 0eab6d2d8..1c9a84d66 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/query/AbstractProcessDefinitionEntityQueryIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/query/AbstractProcessDefinitionEntityQueryIT.java
@@ -20,6 +20,7 @@ package org.kie.kogito.index.jpa.query;
 
 import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.test.query.AbstractProcessDefinitionQueryIT;
 import org.kie.kogito.persistence.api.Storage;
 
@@ -31,7 +32,7 @@ public abstract class AbstractProcessDefinitionEntityQueryIT 
extends AbstractPro
     ProcessDefinitionEntityStorage storage;
 
     @Override
-    public Storage<String, ProcessDefinition> getStorage() {
+    public Storage<ProcessDefinitionKey, ProcessDefinition> getStorage() {
         return storage;
     }
 
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractJobStorageIT.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractJobStorageIT.java
index 75ea7aeb0..2510619cc 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractJobStorageIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractJobStorageIT.java
@@ -23,32 +23,23 @@ import java.util.UUID;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.junit.jupiter.api.Test;
 import org.kie.kogito.index.jpa.model.JobEntity;
-import org.kie.kogito.index.jpa.model.JobEntityRepository;
 import org.kie.kogito.index.model.Job;
 import org.kie.kogito.index.test.TestUtils;
-import org.kie.kogito.persistence.api.StorageService;
+import org.kie.kogito.persistence.api.Storage;
 
 import jakarta.inject.Inject;
 
-public abstract class AbstractJobStorageIT extends 
AbstractStorageIT<JobEntity, Job> {
+public abstract class AbstractJobStorageIT extends AbstractStorageIT<String, 
JobEntity, Job> {
 
     @Inject
-    JobEntityRepository repository;
-
-    @Inject
-    StorageService storage;
+    JobEntityStorage storage;
 
     public AbstractJobStorageIT() {
         super(Job.class);
     }
 
     @Override
-    public JobEntityRepository getRepository() {
-        return repository;
-    }
-
-    @Override
-    public StorageService getStorage() {
+    public Storage<String, Job> getStorage() {
         return storage;
     }
 
@@ -65,5 +56,4 @@ public abstract class AbstractJobStorageIT extends 
AbstractStorageIT<JobEntity,
                         RandomStringUtils.randomAlphabetic(10), "SCHEDULED", 
1000L);
         testStorage(jobId, job1, job2);
     }
-
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessDefinitionStorageIT.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessDefinitionStorageIT.java
index 5cbd6db8c..bba2ee7e7 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessDefinitionStorageIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessDefinitionStorageIT.java
@@ -23,32 +23,24 @@ import java.util.Set;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.junit.jupiter.api.Test;
 import org.kie.kogito.index.jpa.model.ProcessDefinitionEntity;
-import org.kie.kogito.index.jpa.model.ProcessDefinitionEntityRepository;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.test.TestUtils;
-import org.kie.kogito.persistence.api.StorageService;
+import org.kie.kogito.persistence.api.Storage;
 
 import jakarta.inject.Inject;
 
-public abstract class AbstractProcessDefinitionStorageIT extends 
AbstractStorageIT<ProcessDefinitionEntity, ProcessDefinition> {
+public abstract class AbstractProcessDefinitionStorageIT extends 
AbstractStorageIT<ProcessDefinitionKey, ProcessDefinitionEntity, 
ProcessDefinition> {
 
     @Inject
-    ProcessDefinitionEntityRepository repository;
-
-    @Inject
-    StorageService storage;
+    ProcessDefinitionEntityStorage storage;
 
     public AbstractProcessDefinitionStorageIT() {
         super(ProcessDefinition.class);
     }
 
     @Override
-    public ProcessDefinitionEntityStorage.RepositoryAdapter getRepository() {
-        return new 
ProcessDefinitionEntityStorage.RepositoryAdapter(repository);
-    }
-
-    @Override
-    public StorageService getStorage() {
+    public Storage<ProcessDefinitionKey, ProcessDefinition> getStorage() {
         return storage;
     }
 
@@ -58,7 +50,7 @@ public abstract class AbstractProcessDefinitionStorageIT 
extends AbstractStorage
         String version = "1.0";
         ProcessDefinition pdv1 = TestUtils.createProcessDefinition(processId, 
version, Set.of("admin", "kogito"));
         ProcessDefinition pdv2 = TestUtils.createProcessDefinition(processId, 
version, Set.of("kogito"));
-        testStorage(pdv1.getKey(), pdv1, pdv2);
+        testStorage(new ProcessDefinitionKey(pdv1.getId(), pdv1.getVersion()), 
pdv1, pdv2);
     }
 
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractStorageIT.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractStorageIT.java
index b8d11a039..165ce328d 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractStorageIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractStorageIT.java
@@ -20,13 +20,10 @@ package org.kie.kogito.index.jpa.storage;
 
 import org.kie.kogito.index.jpa.model.AbstractEntity;
 import org.kie.kogito.persistence.api.Storage;
-import org.kie.kogito.persistence.api.StorageService;
-
-import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public abstract class AbstractStorageIT<E extends AbstractEntity, T> {
+public abstract class AbstractStorageIT<K, E extends AbstractEntity, T> {
 
     Class<T> type;
 
@@ -34,12 +31,10 @@ public abstract class AbstractStorageIT<E extends 
AbstractEntity, T> {
         this.type = type;
     }
 
-    abstract StorageService getStorage();
-
-    abstract PanacheRepositoryBase<E, String> getRepository();
+    abstract Storage<K, T> getStorage();
 
-    void testStorage(String key, T value1, T value2) {
-        Storage<String, T> cache = getStorage().getCache("cache", type);
+    void testStorage(K key, T value1, T value2) {
+        Storage<K, T> cache = getStorage();
         assertThat(cache.get(key)).isNull();
         assertThat(cache.containsKey(key)).isFalse();
 
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa/src/main/java/org/kie/kogito/index/jdbc/JdbcStorageServiceProducer.java
 
b/data-index/data-index-storage/data-index-storage-jpa/src/main/java/org/kie/kogito/index/jdbc/JdbcStorageServiceProducer.java
deleted file mode 100644
index a5de13fbc..000000000
--- 
a/data-index/data-index-storage/data-index-storage-jpa/src/main/java/org/kie/kogito/index/jdbc/JdbcStorageServiceProducer.java
+++ /dev/null
@@ -1,49 +0,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.
- */
-package org.kie.kogito.index.jdbc;
-
-import org.kie.kogito.index.jpa.storage.JPAStorageService;
-import org.kie.kogito.index.jpa.storage.JobEntityStorage;
-import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage;
-import org.kie.kogito.index.jpa.storage.ProcessInstanceEntityStorage;
-import org.kie.kogito.index.jpa.storage.UserTaskInstanceEntityStorage;
-import org.kie.kogito.persistence.api.StorageService;
-
-import io.quarkus.arc.properties.IfBuildProperty;
-
-import jakarta.annotation.Priority;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Alternative;
-import jakarta.enterprise.inject.Produces;
-
-import static 
org.kie.kogito.persistence.api.factory.Constants.PERSISTENCE_TYPE_PROPERTY;
-
-public class JdbcStorageServiceProducer {
-    @Produces
-    @Alternative
-    @Priority(1)
-    @ApplicationScoped
-    @IfBuildProperty(name = PERSISTENCE_TYPE_PROPERTY, stringValue = "jdbc")
-    StorageService PostgreSqlStorageService(final 
ProcessDefinitionEntityStorage definitionStorage,
-            final ProcessInstanceEntityStorage processStorage,
-            final JobEntityStorage jobStorage,
-            final UserTaskInstanceEntityStorage taskStorage) {
-        return new JPAStorageService(definitionStorage, processStorage, 
jobStorage, taskStorage);
-    }
-}
diff --git 
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntityMapper.java
 
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntityMapper.java
index 6dfc5573d..ea91176fb 100644
--- 
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntityMapper.java
+++ 
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessDefinitionEntityMapper.java
@@ -40,7 +40,7 @@ public class ProcessDefinitionEntityMapper implements 
MongoEntityMapper<ProcessD
         }
 
         ProcessDefinitionEntity entity = new ProcessDefinitionEntity();
-        entity.setKey(pd.getKey());
+        entity.setKey(key);
         entity.setId(pd.getId());
         entity.setVersion(pd.getVersion());
         entity.setName(pd.getName());
diff --git 
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/query/ProcessDefinitionQueryIT.java
 
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/query/ProcessDefinitionQueryIT.java
index b2d18d392..1f126d801 100644
--- 
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/query/ProcessDefinitionQueryIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/query/ProcessDefinitionQueryIT.java
@@ -20,8 +20,10 @@ package org.kie.kogito.index.mongodb.query;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.mongodb.model.ProcessDefinitionEntity;
 import org.kie.kogito.index.mongodb.model.ProcessDefinitionEntityMapper;
+import org.kie.kogito.index.storage.ModelProcessDefinitionStorage;
 import org.kie.kogito.index.test.query.AbstractProcessDefinitionQueryIT;
 import org.kie.kogito.persistence.api.Storage;
 import org.kie.kogito.persistence.mongodb.client.MongoClientManager;
@@ -42,16 +44,16 @@ class ProcessDefinitionQueryIT extends 
AbstractProcessDefinitionQueryIT {
     @Inject
     MongoClientManager mongoClientManager;
 
-    Storage<String, ProcessDefinition> storage;
+    Storage<ProcessDefinitionKey, ProcessDefinition> storage;
 
     @BeforeEach
     void setUp() {
-        this.storage = new 
MongoStorage<>(mongoClientManager.getCollection(PROCESS_DEFINITIONS_STORAGE, 
ProcessDefinitionEntity.class),
-                ProcessDefinition.class.getName(), new 
ProcessDefinitionEntityMapper());
+        this.storage = new ModelProcessDefinitionStorage(new 
MongoStorage<>(mongoClientManager.getCollection(PROCESS_DEFINITIONS_STORAGE, 
ProcessDefinitionEntity.class),
+                ProcessDefinition.class.getName(), new 
ProcessDefinitionEntityMapper()));
     }
 
     @Override
-    public Storage<String, ProcessDefinition> getStorage() {
+    public Storage<ProcessDefinitionKey, ProcessDefinition> getStorage() {
         return storage;
     }
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/storage/ProcessDefinitionStorageIT.java
 
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/storage/ProcessDefinitionStorageIT.java
index ec88ef525..4aec97a2c 100644
--- 
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/storage/ProcessDefinitionStorageIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/storage/ProcessDefinitionStorageIT.java
@@ -25,8 +25,10 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.mongodb.model.ProcessDefinitionEntity;
 import org.kie.kogito.index.mongodb.model.ProcessDefinitionEntityMapper;
+import org.kie.kogito.index.storage.ModelProcessDefinitionStorage;
 import org.kie.kogito.index.test.TestUtils;
 import org.kie.kogito.persistence.api.Storage;
 import org.kie.kogito.persistence.mongodb.client.MongoClientManager;
@@ -42,17 +44,17 @@ import static 
org.kie.kogito.index.storage.Constants.PROCESS_DEFINITIONS_STORAGE
 
 @QuarkusTest
 @QuarkusTestResource(MongoDBQuarkusTestResource.class)
-class ProcessDefinitionStorageIT extends StorageTestBase<String, 
ProcessDefinition> {
+class ProcessDefinitionStorageIT extends StorageTestBase<ProcessDefinitionKey, 
ProcessDefinition> {
 
     @Inject
     MongoClientManager mongoClientManager;
 
-    Storage<String, ProcessDefinition> storage;
+    Storage<ProcessDefinitionKey, ProcessDefinition> storage;
 
     @BeforeEach
     void setUp() {
-        this.storage = new 
MongoStorage<>(mongoClientManager.getCollection(PROCESS_DEFINITIONS_STORAGE, 
ProcessDefinitionEntity.class),
-                ProcessDefinition.class.getName(), new 
ProcessDefinitionEntityMapper());
+        this.storage = new ModelProcessDefinitionStorage(new 
MongoStorage<>(mongoClientManager.getCollection(PROCESS_DEFINITIONS_STORAGE, 
ProcessDefinitionEntity.class),
+                ProcessDefinition.class.getName(), new 
ProcessDefinitionEntityMapper()));
     }
 
     @AfterEach
@@ -66,6 +68,6 @@ class ProcessDefinitionStorageIT extends 
StorageTestBase<String, ProcessDefiniti
         String version = "1.0";
         ProcessDefinition pdv1 = TestUtils.createProcessDefinition(processId, 
version, Set.of("admin", "kogito"));
         ProcessDefinition pdv2 = TestUtils.createProcessDefinition(processId, 
version, Set.of("kogito"));
-        testStorage(storage, pdv1.getKey(), pdv1, pdv2);
+        testStorage(storage, new ProcessDefinitionKey(processId, version), 
pdv1, pdv2);
     }
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgreSqlStorageServiceProducer.java
 
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgreSqlStorageServiceProducer.java
deleted file mode 100644
index 4e495f107..000000000
--- 
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgreSqlStorageServiceProducer.java
+++ /dev/null
@@ -1,50 +0,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.
- */
-package org.kie.kogito.index.postgresql;
-
-import org.kie.kogito.index.jpa.storage.JPAStorageService;
-import org.kie.kogito.index.jpa.storage.JobEntityStorage;
-import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage;
-import org.kie.kogito.index.jpa.storage.ProcessInstanceEntityStorage;
-import org.kie.kogito.index.jpa.storage.UserTaskInstanceEntityStorage;
-import org.kie.kogito.persistence.api.StorageService;
-
-import io.quarkus.arc.properties.IfBuildProperty;
-
-import jakarta.annotation.Priority;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Alternative;
-import jakarta.enterprise.inject.Produces;
-
-import static 
org.kie.kogito.persistence.api.factory.Constants.PERSISTENCE_TYPE_PROPERTY;
-import static 
org.kie.kogito.persistence.postgresql.Constants.POSTGRESQL_STORAGE;
-
-public class PostgreSqlStorageServiceProducer {
-    @Produces
-    @Alternative
-    @Priority(1)
-    @ApplicationScoped
-    @IfBuildProperty(name = PERSISTENCE_TYPE_PROPERTY, stringValue = 
POSTGRESQL_STORAGE)
-    StorageService PostgreSqlStorageService(final 
ProcessDefinitionEntityStorage definitionStorage,
-            final ProcessInstanceEntityStorage processStorage,
-            final JobEntityStorage jobStorage,
-            final UserTaskInstanceEntityStorage taskStorage) {
-        return new JPAStorageService(definitionStorage, processStorage, 
jobStorage, taskStorage);
-    }
-}
diff --git 
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java
 
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java
index d3f34c8c2..b291feb5d 100644
--- 
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java
+++ 
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java
@@ -26,6 +26,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.kie.kogito.Application;
 import org.kie.kogito.index.api.KogitoRuntimeClient;
 import org.kie.kogito.index.model.ProcessDefinition;
+import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.service.DataIndexServiceException;
 import org.kie.kogito.index.storage.DataIndexStorageService;
 import org.kie.kogito.process.Process;
@@ -57,7 +58,7 @@ public class ProcessDefinitionRegister {
                     
.map(mapProcessDefinition(app.config().addons().availableAddons(), 
kogitoServiceUrl.orElse(null), client))
                     .forEach(process -> {
                         LOGGER.debug("Registering process definition with id: 
{}", process.getId());
-                        
storage.getProcessDefinitionStorage().put(process.getKey(), process);
+                        storage.getProcessDefinitionStorage().put(new 
ProcessDefinitionKey(process.getId(), process.getVersion()), process);
                     });
         } else {
             LOGGER.info("No process definitions to register.");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to