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); }