From 764b8327a8583deaf525244d293c07c64fff6ce2 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 25 Oct 2024 13:10:27 +0200 Subject: [PATCH 1/6] fix: add missing cache annotations --- .../model/security/permission/PublicInstancePermission.java | 4 ++++ .../permission/PublicInstancePermissionRepository.java | 4 ++++ 2 files changed, 8 insertions(+) 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/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); } From aadf6a8f6dd6d3480cb4f4160c3d0959368702cd Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 25 Oct 2024 13:15:37 +0200 Subject: [PATCH 2/6] fix: add classifier --- pom.xml | 1 + shogun-lib/pom.xml | 1 + 2 files changed, 2 insertions(+) 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-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 From 14474955853b74291495db7c7ebed90678adb334 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 25 Oct 2024 13:15:56 +0200 Subject: [PATCH 3/6] chore: add logging config for ehcache --- shogun-config/src/main/resources/log4j2.yml | 2 ++ 1 file changed, 2 insertions(+) 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 From 6362f596a2b8f595881eb728f3e161d680763135 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 25 Oct 2024 13:16:52 +0200 Subject: [PATCH 4/6] fix: add missing cache regions --- shogun-config/src/main/resources/ehcache.xml | 4 ++++ 1 file changed, 4 insertions(+) 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 @@ + + + + From 00b145944d9077d2e82c0d736c3fd438f391bc89 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 25 Oct 2024 13:25:48 +0200 Subject: [PATCH 5/6] fix: add missing annotations and make findAllById cacheable --- .../lib/repository/BaseCrudRepository.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) 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); } From e499a555f712b807be18735ce1abe686a58c1f1c Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 25 Oct 2024 13:26:22 +0200 Subject: [PATCH 6/6] chore: update config for ehcache --- shogun-config/src/main/resources/application-base.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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