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 059bc0a1c [Fix_#3405] Using merge in all cases (#1990)
059bc0a1c is described below
commit 059bc0a1c0ddaba80ca643d6764843d5a0377300
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Mon Feb 19 11:11:20 2024 +0100
[Fix_#3405] Using merge in all cases (#1990)
---
.../kogito/index/jpa/storage/AbstractStorage.java | 17 +--------
.../storage/ProcessDefinitionEntityStorage.java | 41 +---------------------
2 files changed, 2 insertions(+), 56 deletions(-)
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 4d339888e..de426fc4e 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
@@ -18,7 +18,6 @@
*/
package org.kie.kogito.index.jpa.storage;
-import java.util.ConcurrentModificationException;
import java.util.Map;
import java.util.function.Function;
@@ -27,8 +26,6 @@ import org.kie.kogito.persistence.api.Storage;
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
-import jakarta.persistence.LockModeType;
-import jakarta.persistence.PersistenceException;
import jakarta.transaction.Transactional;
import static java.util.stream.Collectors.toMap;
@@ -54,19 +51,7 @@ public abstract class AbstractStorage<K, E extends
AbstractEntity, V> extends Ab
@Override
@Transactional
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);
- if (persistedEntity != null) {
- repository.getEntityManager().merge(newEntity);
- } else {
- try {
- //to handle concurrency in case of a new registry persist
flush and throw an exception to allow retry on the caller side
- repository.persistAndFlush(newEntity);
- } catch (PersistenceException e) {
- throw new ConcurrentModificationException(e);
- }
- }
+ repository.getEntityManager().merge(mapToEntity.apply(value));
return value;
}
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 db641e4de..e22670c66 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
@@ -18,20 +18,14 @@
*/
package org.kie.kogito.index.jpa.storage;
-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.ProcessDefinitionEntityRepository;
import org.kie.kogito.index.model.ProcessDefinition;
import org.kie.kogito.index.model.ProcessDefinitionKey;
-import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
-
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.LockModeType;
import jakarta.transaction.Transactional;
@ApplicationScoped
@@ -42,7 +36,7 @@ public class ProcessDefinitionEntityStorage extends
AbstractStorage<ProcessDefin
@Inject
public ProcessDefinitionEntityStorage(ProcessDefinitionEntityRepository
repository, ProcessDefinitionEntityMapper mapper) {
- super(new RepositoryAdapter(repository), ProcessDefinition.class,
ProcessDefinitionEntity.class, mapper::mapToModel, mapper::mapToEntity, e ->
new ProcessDefinitionKey(e.getId(),
+ super(repository, ProcessDefinition.class,
ProcessDefinitionEntity.class, mapper::mapToModel, mapper::mapToEntity, e ->
new ProcessDefinitionKey(e.getId(),
e.getVersion()));
}
@@ -52,37 +46,4 @@ public class ProcessDefinitionEntityStorage extends
AbstractStorage<ProcessDefin
return getRepository().count("id = ?1 and version = ?2", key.getId(),
key.getVersion()) == 1;
}
- public static class RepositoryAdapter implements
PanacheRepositoryBase<ProcessDefinitionEntity, ProcessDefinitionKey> {
-
- ProcessDefinitionEntityRepository repository;
-
- public RepositoryAdapter(ProcessDefinitionEntityRepository repository)
{
- this.repository = repository;
- }
-
- @Override
- public boolean deleteById(ProcessDefinitionKey key) {
- return repository.deleteById(key);
- }
-
- @Override
- public Optional<ProcessDefinitionEntity>
findByIdOptional(ProcessDefinitionKey key) {
- return repository.findByIdOptional(key);
- }
-
- @Override
- public ProcessDefinitionEntity findById(ProcessDefinitionKey s,
LockModeType lockModeType) {
- return repository.findById(s, lockModeType);
- }
-
- @Override
- public void persist(ProcessDefinitionEntity entity) {
- repository.persist(entity);
- }
-
- @Override
- public EntityManager getEntityManager() {
- return repository.getEntityManager();
- }
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]