keycloak-developers

replaced multicache for caffeine

7/21/2020 5:49:51 AM

Details

diff --git a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PermissionTicketAdapter.java b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PermissionTicketAdapter.java
index 0222d24..e0bdef4 100644
--- a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PermissionTicketAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PermissionTicketAdapter.java
@@ -49,7 +49,7 @@ public class PermissionTicketAdapter implements PermissionTicket, JpaModel<Permi
         this.storeFactory = storeFactory;
     }
 
-public static GetterCache<PermissionTicketEntity> getEntity = new GetterCache<>("static-getter:PermissionTicketAdapter.getEntity");
+public static CaffeineGetterCache<PermissionTicketEntity> getEntity = new CaffeineGetterCache<>("static-getter:PermissionTicketAdapter.getEntity", 120000);
 
     @Override
     public PermissionTicketEntity getEntity() {
diff --git a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PolicyAdapter.java b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PolicyAdapter.java
index 3657ff5..7962304 100644
--- a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PolicyAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/PolicyAdapter.java
@@ -54,7 +54,7 @@ public class PolicyAdapter extends AbstractAuthorizationModel implements Policy,
         this.storeFactory = storeFactory;
     }
 
-public static GetterCache<PolicyEntity> getEntity = new GetterCache<>("static-getter:PolicyAdapter.getEntity");
+public static CaffeineGetterCache<PolicyEntity> getEntity = new CaffeineGetterCache<>("static-getter:PolicyAdapter.getEntity", 120000);
 
     @Override
     public PolicyEntity getEntity() {
diff --git a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceAdapter.java b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceAdapter.java
index b337177..3b13c64 100644
--- a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceAdapter.java
@@ -59,7 +59,7 @@ public class ResourceAdapter extends AbstractAuthorizationModel implements Resou
         this.storeFactory = storeFactory;
     }
 
-public static GetterCache<ResourceEntity> getEntity = new GetterCache<>("static-getter:ResourceAdapter.getEntity");
+public static CaffeineGetterCache<ResourceEntity> getEntity = new CaffeineGetterCache<>("static-getter:ResourceAdapter.getEntity", 120000);
 
     @Override
     public ResourceEntity getEntity() {
diff --git a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceServerAdapter.java b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceServerAdapter.java
index af22edf..80b0ac3 100644
--- a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceServerAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ResourceServerAdapter.java
@@ -43,7 +43,7 @@ public class ResourceServerAdapter extends AbstractAuthorizationModel implements
         this.storeFactory = storeFactory;
     }
 
-public static GetterCache<ResourceServerEntity> getEntity = new GetterCache<>("static-getter:ResourceServerAdapter.getEntity");
+public static CaffeineGetterCache<ResourceServerEntity> getEntity = new CaffeineGetterCache<>("static-getter:ResourceServerAdapter.getEntity", 120000);
 
     @Override
     public ResourceServerEntity getEntity() {
diff --git a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ScopeAdapter.java b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ScopeAdapter.java
index 988a423..9baa680 100644
--- a/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ScopeAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/authorization/jpa/store/ScopeAdapter.java
@@ -43,7 +43,7 @@ public class ScopeAdapter extends AbstractAuthorizationModel implements Scope, J
         this.storeFactory = storeFactory;
     }
 
-public static GetterCache<ScopeEntity> getEntity = new GetterCache<>("static-getter:ScopeAdapter.getEntity");
+public static CaffeineGetterCache<ScopeEntity> getEntity = new CaffeineGetterCache<>("static-getter:ScopeAdapter.getEntity", 120000);
 
     @Override
     public ScopeEntity getEntity() {
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
index 5889d85..31aa434 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
@@ -68,7 +68,7 @@ public class ClientAdapter implements ClientModel, JpaModel<ClientEntity> {
         this.entity = entity;
     }
 
-public static GetterCache<ClientEntity> getEntity = new GetterCache<>("static-getter:ClientAdapter.getEntity");
+// public static CaffeineGetterCache<ClientEntity> getEntity = new CaffeineGetterCache<>("static-getter:ClientAdapter.getEntity", 120000);
 
     public ClientEntity getEntity() {
 // return getEntity.computeIfAbsent(() -> {
@@ -93,7 +93,7 @@ public static GetterCache<ClientEntity> getEntity = new GetterCache<>("static-ge
 
     @Override
     public void setName(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setName(name);
     }
 
@@ -102,7 +102,7 @@ public static GetterCache<ClientEntity> getEntity = new GetterCache<>("static-ge
 
     @Override
     public void setDescription(String description) { 
-getEntity.invalidate();
+// getEntity.invalidate();
         entity.setDescription(description); }
 
     @Override
@@ -112,7 +112,7 @@ getEntity.invalidate();
 
     @Override
     public void setEnabled(boolean enabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setEnabled(enabled);
     }
 
@@ -123,7 +123,7 @@ getEntity.invalidate();
 
     @Override
     public void setPublicClient(boolean flag) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setPublicClient(flag);
     }
 
@@ -134,7 +134,7 @@ getEntity.invalidate();
 
     @Override
     public void setFrontchannelLogout(boolean flag) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setFrontchannelLogout(flag);
     }
 
@@ -145,7 +145,7 @@ getEntity.invalidate();
 
     @Override
     public void setFullScopeAllowed(boolean value) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setFullScopeAllowed(value);
     }
 
@@ -160,7 +160,7 @@ getEntity.invalidate();
 
     @Override
     public void setWebOrigins(Set<String> webOrigins) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setWebOrigins(webOrigins);
     }
 
@@ -183,7 +183,7 @@ getEntity.invalidate();
 
     @Override
     public void setRedirectUris(Set<String> redirectUris) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setRedirectUris(redirectUris);
     }
 
@@ -204,7 +204,7 @@ getEntity.invalidate();
 
     @Override
     public void setClientAuthenticatorType(String clientAuthenticatorType) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setClientAuthenticatorType(clientAuthenticatorType);
     }
 
@@ -215,7 +215,7 @@ getEntity.invalidate();
 
     @Override
     public void setSecret(String secret) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setSecret(secret);
     }
 
@@ -226,7 +226,7 @@ getEntity.invalidate();
 
     @Override
     public void setRegistrationToken(String registrationToken) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setRegistrationToken(registrationToken);
     }
 
@@ -242,7 +242,7 @@ getEntity.invalidate();
 
     @Override
     public void setNotBefore(int notBefore) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setNotBefore(notBefore);
     }
 
@@ -290,27 +290,27 @@ getEntity.invalidate();
 
     @Override
     public void setProtocol(String protocol) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setProtocol(protocol);
 
     }
 
     @Override
     public void setAuthenticationFlowBindingOverride(String name, String value) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.getAuthFlowBindings().put(name, value);
 
     }
 
     @Override
     public void removeAuthenticationFlowBindingOverride(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.getAuthFlowBindings().remove(name);
     }
 
     @Override
     public String getAuthenticationFlowBindingOverride(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         return entity.getAuthFlowBindings().get(name);
     }
 
@@ -323,7 +323,7 @@ getEntity.invalidate();
 
     @Override
     public void setAttribute(String name, String value) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         for (ClientAttributeEntity attr : entity.getAttributes()) {
             if (attr.getName().equals(name)) {
                 attr.setValue(value);
@@ -341,7 +341,7 @@ getEntity.invalidate();
 
     @Override
     public void removeAttribute(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Iterator<ClientAttributeEntity> it = entity.getAttributes().iterator();
         while (it.hasNext()) {
             ClientAttributeEntity attr = it.next();
@@ -368,7 +368,7 @@ getEntity.invalidate();
 
     @Override
     public void addClientScope(ClientScopeModel clientScope, boolean defaultScope) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         if (getClientScopes(defaultScope, false).containsKey(clientScope.getName())) return;
 
         ClientScopeClientMappingEntity entity = new ClientScopeClientMappingEntity();
@@ -420,7 +420,7 @@ getEntity.invalidate();
 
     @Override
     public Set<ProtocolMapperModel> getProtocolMappers() {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Set<ProtocolMapperModel> mappings = new HashSet<ProtocolMapperModel>();
         for (ProtocolMapperEntity entity : getEntity().getProtocolMappers()) {
             ProtocolMapperModel mapping = new ProtocolMapperModel();
@@ -440,7 +440,7 @@ getEntity.invalidate();
 
     @Override
     public ProtocolMapperModel addProtocolMapper(ProtocolMapperModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         if (getProtocolMapperByName(model.getProtocol(), model.getName()) != null) {
             throw new ModelDuplicateException("Protocol mapper name must be unique per protocol");
         }
@@ -459,7 +459,7 @@ getEntity.invalidate();
     }
 
     protected ProtocolMapperEntity getProtocolMapperEntity(String id) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         for (ProtocolMapperEntity entity : entity.getProtocolMappers()) {
             if (entity.getId().equals(id)) {
                 return entity;
@@ -470,7 +470,7 @@ getEntity.invalidate();
     }
 
     protected ProtocolMapperEntity getProtocolMapperEntityByName(String protocol, String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         for (ProtocolMapperEntity entity : entity.getProtocolMappers()) {
             if (entity.getProtocol().equals(protocol) && entity.getName().equals(name)) {
                 return entity;
@@ -482,7 +482,7 @@ getEntity.invalidate();
 
     @Override
     public void removeProtocolMapper(ProtocolMapperModel mapping) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         ProtocolMapperEntity toDelete = getProtocolMapperEntity(mapping.getId());
         if (toDelete != null) {
             session.users().preRemove(mapping);
@@ -495,7 +495,7 @@ getEntity.invalidate();
 
     @Override
     public void updateProtocolMapper(ProtocolMapperModel mapping) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         ProtocolMapperEntity entity = getProtocolMapperEntity(mapping.getId());
         entity.setProtocolMapper(mapping.getProtocolMapper());
         if (entity.getConfig() == null) {
@@ -558,7 +558,7 @@ getEntity.invalidate();
 
     @Override
     public void setClientId(String clientId) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setClientId(clientId);
     }
 
@@ -569,7 +569,7 @@ getEntity.invalidate();
 
     @Override
     public void setSurrogateAuthRequired(boolean surrogateAuthRequired) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setSurrogateAuthRequired(surrogateAuthRequired);
     }
 
@@ -580,7 +580,7 @@ getEntity.invalidate();
 
     @Override
     public void setManagementUrl(String url) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setManagementUrl(url);
     }
 
@@ -591,7 +591,7 @@ getEntity.invalidate();
 
     @Override
     public void setRootUrl(String url) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setRootUrl(url);
     }
 
@@ -602,7 +602,7 @@ getEntity.invalidate();
 
     @Override
     public void setBaseUrl(String url) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setBaseUrl(url);
     }
 
@@ -613,7 +613,7 @@ getEntity.invalidate();
 
     @Override
     public void setBearerOnly(boolean only) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setBearerOnly(only);
     }
 
@@ -624,7 +624,7 @@ getEntity.invalidate();
 
     @Override
     public void setConsentRequired(boolean consentRequired) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setConsentRequired(consentRequired);
     }
 
@@ -635,7 +635,7 @@ getEntity.invalidate();
 
     @Override
     public void setStandardFlowEnabled(boolean standardFlowEnabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setStandardFlowEnabled(standardFlowEnabled);
     }
 
@@ -646,7 +646,7 @@ getEntity.invalidate();
 
     @Override
     public void setImplicitFlowEnabled(boolean implicitFlowEnabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setImplicitFlowEnabled(implicitFlowEnabled);
     }
 
@@ -657,7 +657,7 @@ getEntity.invalidate();
 
     @Override
     public void setDirectAccessGrantsEnabled(boolean directAccessGrantsEnabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setDirectAccessGrantsEnabled(directAccessGrantsEnabled);
     }
 
@@ -668,7 +668,7 @@ getEntity.invalidate();
 
     @Override
     public void setServiceAccountsEnabled(boolean serviceAccountsEnabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setServiceAccountsEnabled(serviceAccountsEnabled);
     }
 
@@ -744,7 +744,7 @@ getEntity.invalidate();
 
     @Override
     public void updateDefaultRoles(String... defaultRoles) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Collection<RoleEntity> entities = entity.getDefaultRoles();
         Set<String> already = new HashSet<String>();
         List<RoleEntity> remove = new ArrayList<>();
@@ -792,7 +792,7 @@ getEntity.invalidate();
 
     @Override
     public void setNodeReRegistrationTimeout(int timeout) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         entity.setNodeReRegistrationTimeout(timeout);
     }
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientScopeAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientScopeAdapter.java
index 8c1f259..c32a98a 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientScopeAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientScopeAdapter.java
@@ -60,7 +60,7 @@ public class ClientScopeAdapter implements ClientScopeModel, JpaModel<ClientScop
         this.entity = entity;
     }
 
-public static GetterCache<ClientScopeEntity> getEntity = new GetterCache<>("static-getter:ClientScopeAdapter.getEntity");
+public static CaffeineGetterCache<ClientScopeEntity> getEntity = new CaffeineGetterCache<>("static-getter:ClientScopeAdapter.getEntity", 120000);
 
     public ClientScopeEntity getEntity() {
 return getEntity.computeIfAbsent(() -> {
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/GroupAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/GroupAdapter.java
index 0d8df39..2add821 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/GroupAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/GroupAdapter.java
@@ -56,7 +56,7 @@ public class GroupAdapter implements GroupModel , JpaModel<GroupEntity> {
         this.realm = realm;
     }
 
-public static GetterCache<GroupEntity> getEntity = new GetterCache<>("static-getter:GroupAdapter.getEntity");
+public static CaffeineGetterCache<GroupEntity> getEntity = new CaffeineGetterCache<>("static-getter:GroupAdapter.getEntity", 120000);
 
     public GroupEntity getEntity() {
 return getEntity.computeIfAbsent(() -> {
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index b91ec6d..f4e9f31 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -56,7 +56,7 @@ public class RealmAdapter implements RealmModel, JpaModel<RealmEntity> {
         this.realm = realm;
     }
 
-public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-getter:RealmAdapter.getEntity");
+public static CaffeineGetterCache<RealmEntity> getEntity = new CaffeineGetterCache<>("static-getter:RealmAdapter.getEntity", 120000);
 
     public RealmEntity getEntity() {
 // return getEntity.computeIfAbsent(() -> {
@@ -76,7 +76,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setName(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setName(name);
         em.flush();
     }
@@ -88,7 +88,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setDisplayName(String displayName) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         setAttribute(RealmAttributes.DISPLAY_NAME, displayName);
     }
 
@@ -99,7 +99,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setDisplayNameHtml(String displayNameHtml) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         setAttribute(RealmAttributes.DISPLAY_NAME_HTML, displayNameHtml);
     }
 
@@ -110,7 +110,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEnabled(boolean enabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEnabled(enabled);
         em.flush();
     }
@@ -122,7 +122,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSslRequired(SslRequired sslRequired) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSslRequired(sslRequired.name());
         em.flush();
     }
@@ -134,7 +134,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setUserManagedAccessAllowed(boolean userManagedAccessAllowed) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAllowUserManagedAccess(userManagedAccessAllowed);
         em.flush();
     }
@@ -146,7 +146,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setRegistrationAllowed(boolean registrationAllowed) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setRegistrationAllowed(registrationAllowed);
         em.flush();
     }
@@ -158,7 +158,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setRegistrationEmailAsUsername(boolean registrationEmailAsUsername) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setRegistrationEmailAsUsername(registrationEmailAsUsername);
         if (registrationEmailAsUsername) realm.setDuplicateEmailsAllowed(false);
         em.flush();
@@ -171,14 +171,14 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setRememberMe(boolean rememberMe) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setRememberMe(rememberMe);
         em.flush();
     }
 
     @Override
     public void setAttribute(String name, String value) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         for (RealmAttributeEntity attr : realm.getAttributes()) {
             if (attr.getName().equals(name)) {
                 attr.setValue(value);
@@ -210,7 +210,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void removeAttribute(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Iterator<RealmAttributeEntity> it = realm.getAttributes().iterator();
         while (it.hasNext()) {
             RealmAttributeEntity attr = it.next();
@@ -359,7 +359,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setVerifyEmail(boolean verifyEmail) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setVerifyEmail(verifyEmail);
         em.flush();
     }
@@ -371,7 +371,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setLoginWithEmailAllowed(boolean loginWithEmailAllowed) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setLoginWithEmailAllowed(loginWithEmailAllowed);
         if (loginWithEmailAllowed) realm.setDuplicateEmailsAllowed(false);
         em.flush();
@@ -384,7 +384,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setDuplicateEmailsAllowed(boolean duplicateEmailsAllowed) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setDuplicateEmailsAllowed(duplicateEmailsAllowed);
         if (duplicateEmailsAllowed) {
             realm.setLoginWithEmailAllowed(false);
@@ -400,7 +400,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setResetPasswordAllowed(boolean resetPasswordAllowed) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setResetPasswordAllowed(resetPasswordAllowed);
         em.flush();
     }
@@ -412,7 +412,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEditUsernameAllowed(boolean editUsernameAllowed) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEditUsernameAllowed(editUsernameAllowed);
         em.flush();
     }
@@ -424,7 +424,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setNotBefore(int notBefore) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setNotBefore(notBefore);
     }
 
@@ -435,7 +435,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setRevokeRefreshToken(boolean revokeRefreshToken) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setRevokeRefreshToken(revokeRefreshToken);
     }
 
@@ -446,7 +446,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setRefreshTokenMaxReuse(int revokeRefreshTokenReuseCount) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setRefreshTokenMaxReuse(revokeRefreshTokenReuseCount);
     }
 
@@ -457,7 +457,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAccessTokenLifespan(int tokenLifespan) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAccessTokenLifespan(tokenLifespan);
         em.flush();
     }
@@ -469,7 +469,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAccessTokenLifespanForImplicitFlow(int seconds) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAccessTokenLifespanForImplicitFlow(seconds);
     }
 
@@ -480,7 +480,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSsoSessionIdleTimeout(int seconds) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSsoSessionIdleTimeout(seconds);
     }
 
@@ -491,7 +491,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSsoSessionMaxLifespan(int seconds) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSsoSessionMaxLifespan(seconds);
     }
 
@@ -502,7 +502,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSsoSessionIdleTimeoutRememberMe(int seconds){
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSsoSessionIdleTimeoutRememberMe(seconds);
     }
 
@@ -513,7 +513,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSsoSessionMaxLifespanRememberMe(int seconds) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSsoSessionMaxLifespanRememberMe(seconds);
     }
 
@@ -524,7 +524,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setOfflineSessionIdleTimeout(int seconds) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setOfflineSessionIdleTimeout(seconds);
     }
 
@@ -556,7 +556,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAccessCodeLifespan(int accessCodeLifespan) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAccessCodeLifespan(accessCodeLifespan);
         em.flush();
     }
@@ -568,7 +568,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAccessCodeLifespanUserAction(int accessCodeLifespanUserAction) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAccessCodeLifespanUserAction(accessCodeLifespanUserAction);
         em.flush();
     }
@@ -594,7 +594,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAccessCodeLifespanLogin(int accessCodeLifespanLogin) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAccessCodeLifespanLogin(accessCodeLifespanLogin);
         em.flush();
     }
@@ -640,14 +640,14 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void addRequiredCredential(String type) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         RequiredCredentialModel model = initRequiredCredentialModel(type);
         addRequiredCredential(model);
         em.flush();
     }
 
     public void addRequiredCredential(RequiredCredentialModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         RequiredCredentialEntity entity = new RequiredCredentialEntity();
         entity.setRealm(realm);
         entity.setInput(model.isInput());
@@ -661,7 +661,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void updateRequiredCredentials(Set<String> creds) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Collection<RequiredCredentialEntity> relationships = realm.getRequiredCredentials();
         if (relationships == null) relationships = new ArrayList<RequiredCredentialEntity>();
 
@@ -717,7 +717,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void addDefaultRole(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         RoleModel role = getRole(name);
         if (role == null) {
             role = addRole(name);
@@ -742,7 +742,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void updateDefaultRoles(String[] defaultRoles) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Collection<RoleEntity> entities = realm.getDefaultRoles();
         Set<String> already = new HashSet<String>();
         List<RoleEntity> remove = new ArrayList<RoleEntity>();
@@ -767,7 +767,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void removeDefaultRoles(String... defaultRoles) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Collection<RoleEntity> entities = realm.getDefaultRoles();
         List<RoleEntity> remove = new ArrayList<RoleEntity>();
         for (RoleEntity rel : entities) {
@@ -794,7 +794,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void addDefaultGroup(GroupModel group) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         Collection<GroupEntity> entities = realm.getDefaultGroups();
         for (GroupEntity entity : entities) {
             if (entity.getId().equals(group.getId())) return;
@@ -807,7 +807,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void removeDefaultGroup(GroupModel group) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         GroupEntity found = null;
         for (GroupEntity defaultGroup : realm.getDefaultGroups()) {
             if (defaultGroup.getId().equals(group.getId())) {
@@ -886,7 +886,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSmtpConfig(Map<String, String> smtpConfig) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSmtpConfig(smtpConfig);
         em.flush();
     }
@@ -932,7 +932,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setPasswordPolicy(PasswordPolicy policy) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         this.passwordPolicy = policy;
         realm.setPasswordPolicy(policy.toString());
         em.flush();
@@ -940,7 +940,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public OTPPolicy getOTPPolicy() {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         if (otpPolicy == null) {
             otpPolicy = new OTPPolicy();
             otpPolicy.setDigits(realm.getOtpPolicyDigits());
@@ -955,7 +955,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setOTPPolicy(OTPPolicy policy) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setOtpPolicyAlgorithm(policy.getAlgorithm());
         realm.setOtpPolicyDigits(policy.getDigits());
         realm.setOtpPolicyInitialCounter(policy.getInitialCounter());
@@ -987,7 +987,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setLoginTheme(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setLoginTheme(name);
         em.flush();
     }
@@ -999,7 +999,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAccountTheme(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAccountTheme(name);
         em.flush();
     }
@@ -1011,7 +1011,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAdminTheme(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAdminTheme(name);
         em.flush();
     }
@@ -1023,7 +1023,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEmailTheme(String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEmailTheme(name);
         em.flush();
     }
@@ -1035,7 +1035,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEventsEnabled(boolean enabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEventsEnabled(enabled);
         em.flush();
     }
@@ -1047,7 +1047,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEventsExpiration(long expiration) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEventsExpiration(expiration);
         em.flush();
     }
@@ -1063,7 +1063,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEventsListeners(Set<String> listeners) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEventsListeners(listeners);
         em.flush();
     }
@@ -1079,7 +1079,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setEnabledEventTypes(Set<String> enabledEventTypes) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setEnabledEventTypes(enabledEventTypes);
         em.flush();
     }
@@ -1091,7 +1091,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAdminEventsEnabled(boolean enabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAdminEventsEnabled(enabled);
         em.flush();
     }
@@ -1103,14 +1103,14 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setAdminEventsDetailsEnabled(boolean enabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setAdminEventsDetailsEnabled(enabled);
         em.flush();
     }
 
     @Override
     public ClientModel getMasterAdminClient() {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         ClientEntity masterAdminClient = realm.getMasterAdminClient();
         if (masterAdminClient == null) {
             return null;
@@ -1127,7 +1127,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setMasterAdminClient(ClientModel client) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         ClientEntity appEntity = client !=null ? em.getReference(ClientEntity.class, client.getId()) : null;
         realm.setMasterAdminClient(appEntity);
         em.flush();
@@ -1183,7 +1183,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void addIdentityProvider(IdentityProviderModel identityProvider) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         IdentityProviderEntity entity = new IdentityProviderEntity();
 
         if (identityProvider.getInternalId() == null) {
@@ -1214,7 +1214,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void removeIdentityProviderByAlias(String alias) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         for (IdentityProviderEntity entity : realm.getIdentityProviders()) {
             if (entity.getAlias().equals(alias)) {
 
@@ -1246,7 +1246,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void updateIdentityProvider(IdentityProviderModel identityProvider) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         for (IdentityProviderEntity entity : this.realm.getIdentityProviders()) {
             if (entity.getInternalId().equals(identityProvider.getInternalId())) {
                 entity.setAlias(identityProvider.getAlias());
@@ -1296,7 +1296,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setInternationalizationEnabled(boolean enabled) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setInternationalizationEnabled(enabled);
         em.flush();
     }
@@ -1312,7 +1312,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setSupportedLocales(Set<String> locales) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setSupportedLocales(locales);
         em.flush();
     }
@@ -1324,7 +1324,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setDefaultLocale(String locale) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setDefaultLocale(locale);
         em.flush();
     }
@@ -1356,7 +1356,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public IdentityProviderMapperModel addIdentityProviderMapper(IdentityProviderMapperModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         if (getIdentityProviderMapperByName(model.getIdentityProviderAlias(), model.getName()) != null) {
             throw new RuntimeException("identity provider mapper name must be unique per identity provider");
         }
@@ -1396,7 +1396,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void removeIdentityProviderMapper(IdentityProviderMapperModel mapping) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         IdentityProviderMapperEntity toDelete = getIdentityProviderMapperEntity(mapping.getId());
         if (toDelete != null) {
             this.realm.getIdentityProviderMappers().remove(toDelete);
@@ -1455,7 +1455,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setBrowserFlow(AuthenticationFlowModel flow) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setBrowserFlow(flow.getId());
 
     }
@@ -1469,7 +1469,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setRegistrationFlow(AuthenticationFlowModel flow) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setRegistrationFlow(flow.getId());
 
     }
@@ -1483,7 +1483,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setDirectGrantFlow(AuthenticationFlowModel flow) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setDirectGrantFlow(flow.getId());
 
     }
@@ -1497,7 +1497,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setResetCredentialsFlow(AuthenticationFlowModel flow) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setResetCredentialsFlow(flow.getId());
     }
 
@@ -1508,7 +1508,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
     }
 
     public void setClientAuthenticationFlow(AuthenticationFlowModel flow) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setClientAuthenticationFlow(flow.getId());
     }
 
@@ -1521,7 +1521,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public void setDockerAuthenticationFlow(AuthenticationFlowModel flow) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         realm.setDockerAuthenticationFlow(flow.getId());
     }
 
@@ -1596,7 +1596,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public AuthenticationFlowModel addAuthenticationFlow(AuthenticationFlowModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         AuthenticationFlowEntity entity = new AuthenticationFlowEntity();
         String id = (model.getId() == null) ? KeycloakModelUtils.generateId(): model.getId();
         entity.setId(id);
@@ -1646,7 +1646,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public AuthenticationExecutionModel addAuthenticatorExecution(AuthenticationExecutionModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         AuthenticationExecutionEntity entity = new AuthenticationExecutionEntity();
         String id = (model.getId() == null) ? KeycloakModelUtils.generateId(): model.getId();
         entity.setId(id);
@@ -1690,7 +1690,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public AuthenticatorConfigModel addAuthenticatorConfig(AuthenticatorConfigModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         AuthenticatorConfigEntity auth = new AuthenticatorConfigEntity();
         String id = (model.getId() == null) ? KeycloakModelUtils.generateId(): model.getId();
         auth.setId(id);
@@ -1757,7 +1757,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public RequiredActionProviderModel addRequiredActionProvider(RequiredActionProviderModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         RequiredActionProviderEntity auth = new RequiredActionProviderEntity();
         String id = (model.getId() == null) ? KeycloakModelUtils.generateId(): model.getId();
         auth.setId(id);
@@ -1920,7 +1920,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public ClientScopeModel addClientScope(String id, String name) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         ClientScopeEntity entity = new ClientScopeEntity();
         entity.setId(id);
         name = KeycloakModelUtils.convertClientScopeName(name);
@@ -1936,7 +1936,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public boolean removeClientScope(String id) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         if (id == null) return false;
         ClientScopeModel clientScope = getClientScopeById(id);
         if (clientScope == null) return false;
@@ -2026,7 +2026,7 @@ public static GetterCache<RealmEntity> getEntity = new GetterCache<>("static-get
 
     @Override
     public ComponentModel importComponentModel(ComponentModel model) {
-        getEntity.invalidate();
+        // getEntity.invalidate();
         ComponentFactory componentFactory = null;
         try {
             componentFactory = ComponentUtil.getComponentFactory(session, model);
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
index 4edd4ae..9d922e2 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
@@ -55,7 +55,7 @@ public class RoleAdapter implements RoleModel, JpaModel<RoleEntity> {
         this.session = session;
     }
 
-public static GetterCache<RoleEntity> getEntity = new GetterCache<>("static-getter:RoleAdapter.getEntity");
+public static CaffeineGetterCache<RoleEntity> getEntity = new CaffeineGetterCache<>("static-getter:RoleAdapter.getEntity", 120000);
 
     public RoleEntity getEntity() {
 return getEntity.computeIfAbsent(() -> {
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/UserAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/UserAdapter.java
index 64e704b..bb19aab 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/UserAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/UserAdapter.java
@@ -72,7 +72,7 @@ public class UserAdapter implements UserModel, JpaModel<UserEntity> {
         this.session = session;
     }
 
-public static GetterCache<UserEntity> getEntity = new GetterCache<>("static-getter:UserAdapter.getEntity");
+public static CaffeineGetterCache<UserEntity> getEntity = new CaffeineGetterCache<>("static-getter:UserAdapter.getEntity", 120000);
 
     public UserEntity getEntity() {
 return getEntity.computeIfAbsent(() -> {
diff --git a/services/src/main/java/org/keycloak/credential/OTPCredentialProvider.java b/services/src/main/java/org/keycloak/credential/OTPCredentialProvider.java
index 4956e94..33e1c7b 100644
--- a/services/src/main/java/org/keycloak/credential/OTPCredentialProvider.java
+++ b/services/src/main/java/org/keycloak/credential/OTPCredentialProvider.java
@@ -197,7 +197,7 @@ public class OTPCredentialProvider implements CredentialProvider, CredentialInpu
         return !getCredentialStore().getStoredCredentialsByType(realm, user, CredentialModel.HOTP).isEmpty();
     }
 
-public static MultiCache<Parameters, List<CredentialModel>> getCachedCredentials = new MultiCache<>("static-multi:OTPCredentialProvider.getCachedCredentials");
+public static Caffeine<Parameters, List<CredentialModel>> getCachedCredentials = new Caffeine<>("static-multi:OTPCredentialProvider.getCachedCredentials", 120000);
 
     protected boolean configuredForTOTP(RealmModel realm, UserModel user) {
         List<CredentialModel> cachedCredentials = getCachedCredentials.computeIfAbsent(new Parameters(realm, user), () -> {
diff --git a/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java b/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java
index 7a2a982..47a7e88 100644
--- a/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java
+++ b/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java
@@ -84,7 +84,7 @@ public class UserCredentialStoreManager implements UserCredentialManager{//, OnU
         return getStoreForUser(user).getStoredCredentials(realm, user);
     }
 
-public static MultiCache<Parameters, List<CredentialModel>> getStoredCredentialsByType = new MultiCache<>("static-multi:UserCredentialStoreManager.getStoredCredentialsByType");
+public static Caffeine<Parameters, List<CredentialModel>> getStoredCredentialsByType = new Caffeine<>("static-multi:UserCredentialStoreManager.getStoredCredentialsByType", 120000);
 
     @Override
     public List<CredentialModel> getStoredCredentialsByType(RealmModel realm, UserModel user, String type) {