diff --git a/pom.xml b/pom.xml
index e34f5497..89cc2404 100644
--- a/pom.xml
+++ b/pom.xml
@@ -442,6 +442,7 @@
org.ehcache
ehcache
${ehcache3.version}
+ jakarta
diff --git a/shogun-config/src/main/resources/application-base.yml b/shogun-config/src/main/resources/application-base.yml
index 7e8ab8b1..3c13ad77 100644
--- a/shogun-config/src/main/resources/application-base.yml
+++ b/shogun-config/src/main/resources/application-base.yml
@@ -53,10 +53,6 @@ spring:
hibernate:
id:
db_structure_naming_strategy: single
- jakarta:
- cache:
- provider: org.ehcache.jsr107.EhcacheCachingProvider
- uri: ehcache.xml
format_sql: true
# Generate statistics to check if L2/query cache is actually being used
generate_statistics: true
@@ -66,11 +62,16 @@ spring:
# Enable query cache
use_query_cache: true
region:
- factory_class: org.hibernate.cache.jcache.JCacheRegionFactory
+ factory_class: jcache
integration:
envers:
# Set this to false to disable auditing entity changes
enabled: true
+ javax:
+ cache:
+ uri: ehcache.xml
+ provider: org.ehcache.jsr107.EhcacheCachingProvider
+
jackson:
serialization:
fail-on-empty-beans: false
diff --git a/shogun-config/src/main/resources/ehcache.xml b/shogun-config/src/main/resources/ehcache.xml
index 0307463f..ee0aa1d8 100644
--- a/shogun-config/src/main/resources/ehcache.xml
+++ b/shogun-config/src/main/resources/ehcache.xml
@@ -82,10 +82,14 @@
+
+
+
+
diff --git a/shogun-config/src/main/resources/log4j2.yml b/shogun-config/src/main/resources/log4j2.yml
index 4a473441..5e6e8c4a 100644
--- a/shogun-config/src/main/resources/log4j2.yml
+++ b/shogun-config/src/main/resources/log4j2.yml
@@ -44,6 +44,8 @@ Configuration:
level: info
- name: org.hibernate.type.descriptor.sql
level: info
+ - name: org.ehcache
+ level: info
- name: org.springframework.boot
level: info
- name: org.springframework
diff --git a/shogun-lib/pom.xml b/shogun-lib/pom.xml
index a2bfc0a4..3d107147 100644
--- a/shogun-lib/pom.xml
+++ b/shogun-lib/pom.xml
@@ -161,6 +161,7 @@
org.ehcache
ehcache
+ jakarta
com.sun.xml.bind
diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/PublicInstancePermission.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/PublicInstancePermission.java
index 928c5ffd..b2e3bb09 100644
--- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/PublicInstancePermission.java
+++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/model/security/permission/PublicInstancePermission.java
@@ -19,6 +19,8 @@
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.*;
import lombok.*;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.envers.AuditTable;
@@ -31,6 +33,8 @@
@Table(schema = "shogun")
@Audited
@AuditTable(value = "publicinstancepermissions_rev", schema = "shogun_rev")
+@Cacheable
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region="publicinstancepermissions")
@Getter
@Setter
@AllArgsConstructor
diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/BaseCrudRepository.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/BaseCrudRepository.java
index 08e7cb1a..426cb52d 100644
--- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/BaseCrudRepository.java
+++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/BaseCrudRepository.java
@@ -26,6 +26,7 @@
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.history.RevisionRepository;
+import org.springframework.lang.NonNull;
import java.util.List;
@@ -36,6 +37,8 @@ public interface BaseCrudRepository extends
PagingAndSortingRepository {
@QueryHints(@QueryHint(name = AvailableHints.HINT_CACHEABLE, value = "true"))
+ @Override
+ @NonNull
List findAll();
/**
@@ -63,7 +66,7 @@ AND uip.permission.name IN ('ADMIN', 'READ', 'CREATE_READ', 'CREATE_READ_UPDATE'
AND rip.permission.name IN ('ADMIN', 'READ', 'CREATE_READ', 'CREATE_READ_UPDATE', 'CREATE_READ_DELETE', 'READ_UPDATE', 'READ_DELETE', 'READ_UPDATE_DELETE')
)
""")
- @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
+ @QueryHints(@QueryHint(name = AvailableHints.HINT_CACHEABLE, value = "true"))
Page findAll(Pageable pageable, Long userId, List roleIds);
/**
@@ -97,7 +100,7 @@ AND gip.permission.name IN ('ADMIN', 'READ', 'CREATE_READ', 'CREATE_READ_UPDATE'
AND rip.permission.name IN ('ADMIN', 'READ', 'CREATE_READ', 'CREATE_READ_UPDATE', 'CREATE_READ_DELETE', 'READ_UPDATE', 'READ_DELETE', 'READ_UPDATE_DELETE')
)
""")
- @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
+ @QueryHints(@QueryHint(name = AvailableHints.HINT_CACHEABLE, value = "true"))
Page findAll(Pageable pageable, Long userId, List groupIds, List roleIds);
/**
@@ -107,7 +110,14 @@ AND rip.permission.name IN ('ADMIN', 'READ', 'CREATE_READ', 'CREATE_READ_UPDATE'
* {@literal null}.
* @return A page of entities.
*/
- @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
- Page findAll(Pageable pageable);
+ @QueryHints(@QueryHint(name = AvailableHints.HINT_CACHEABLE, value = "true"))
+ @Override
+ @NonNull
+ Page findAll(@NonNull Pageable pageable);
+
+ @QueryHints(@QueryHint(name = AvailableHints.HINT_CACHEABLE, value = "true"))
+ @Override
+ @NonNull
+ Iterable findAllById(@NonNull Iterable ids);
}
diff --git a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/PublicInstancePermissionRepository.java b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/PublicInstancePermissionRepository.java
index 695aa420..cdd3fa87 100644
--- a/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/PublicInstancePermissionRepository.java
+++ b/shogun-lib/src/main/java/de/terrestris/shogun/lib/repository/security/permission/PublicInstancePermissionRepository.java
@@ -17,6 +17,9 @@
package de.terrestris.shogun.lib.repository.security.permission;
import de.terrestris.shogun.lib.model.security.permission.PublicInstancePermission;
+import jakarta.persistence.QueryHint;
+import org.hibernate.jpa.AvailableHints;
+import org.springframework.data.jpa.repository.QueryHints;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@@ -26,6 +29,7 @@
public interface PublicInstancePermissionRepository extends CrudRepository {
void deleteByEntityId(Long entityId);
+ @QueryHints(@QueryHint(name = AvailableHints.HINT_CACHEABLE, value = "true"))
Optional findByEntityId(Long entityId);
}