keycloak-uncached

Changes

Details

diff --git a/authentication/authentication-picketlink/pom.xml b/authentication/authentication-picketlink/pom.xml
index 37ae937..3ca1a10 100755
--- a/authentication/authentication-picketlink/pom.xml
+++ b/authentication/authentication-picketlink/pom.xml
@@ -4,7 +4,7 @@
         <artifactId>keycloak-authentication-parent</artifactId>
         <groupId>org.keycloak</groupId>
         <version>1.0-beta-4-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/federation/ldap/pom.xml b/federation/ldap/pom.xml
index 5f8f887..0ce4c2e 100755
--- a/federation/ldap/pom.xml
+++ b/federation/ldap/pom.xml
@@ -1,7 +1,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>keycloak-authentication-parent</artifactId>
+        <artifactId>keycloak-parent</artifactId>
         <groupId>org.keycloak</groupId>
         <version>1.0-beta-4-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProvider.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProvider.java
index 4215948..f99af82 100755
--- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProvider.java
+++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProvider.java
@@ -1,8 +1,8 @@
 package org.keycloak.federation.ldap;
 
 import org.jboss.logging.Logger;
-import org.keycloak.models.FederationProvider;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProvider;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.ModelException;
 import org.keycloak.models.RealmModel;
@@ -15,7 +15,6 @@ import org.picketlink.idm.IdentityManager;
 import org.picketlink.idm.PartitionManager;
 import org.picketlink.idm.credential.Credentials;
 import org.picketlink.idm.credential.Password;
-import org.picketlink.idm.credential.TOTPCredential;
 import org.picketlink.idm.credential.UsernamePasswordCredentials;
 import org.picketlink.idm.model.basic.BasicModel;
 import org.picketlink.idm.model.basic.User;
@@ -25,18 +24,15 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import static org.picketlink.common.util.StringUtil.isNullOrEmpty;
-import static org.picketlink.idm.IDMMessages.MESSAGES;
-
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
  */
-public class LDAPFederationProvider implements FederationProvider {
+public class LDAPFederationProvider implements UserFederationProvider {
     private static final Logger logger = Logger.getLogger(LDAPFederationProvider.class);
 
     protected KeycloakSession session;
-    protected FederationProviderModel model;
+    protected UserFederationProviderModel model;
     protected PartitionManager partitionManager;
 
     protected static final Set<String> supportedCredentialTypes = new HashSet<String>();
@@ -46,7 +42,7 @@ public class LDAPFederationProvider implements FederationProvider {
         supportedCredentialTypes.add(UserCredentialModel.PASSWORD);
     }
 
-    public LDAPFederationProvider(KeycloakSession session, FederationProviderModel model, PartitionManager partitionManager) {
+    public LDAPFederationProvider(KeycloakSession session, UserFederationProviderModel model, PartitionManager partitionManager) {
         this.session = session;
         this.model = model;
         this.partitionManager = partitionManager;
@@ -66,7 +62,7 @@ public class LDAPFederationProvider implements FederationProvider {
         return session;
     }
 
-    public FederationProviderModel getModel() {
+    public UserFederationProviderModel getModel() {
         return model;
     }
 
diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProviderFactory.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProviderFactory.java
index 6a0c57d..b656d7a 100755
--- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProviderFactory.java
+++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPFederationProviderFactory.java
@@ -1,31 +1,27 @@
 package org.keycloak.federation.ldap;
 
 import org.keycloak.Config;
-import org.keycloak.models.FederationProvider;
-import org.keycloak.models.FederationProviderFactory;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProvider;
+import org.keycloak.models.UserFederationProviderFactory;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.KeycloakSession;
-import org.keycloak.models.RealmModel;
-import org.picketlink.idm.IdentityManager;
 import org.picketlink.idm.PartitionManager;
 
-import java.util.concurrent.ConcurrentHashMap;
-
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
  */
-public class LDAPFederationProviderFactory implements FederationProviderFactory {
+public class LDAPFederationProviderFactory implements UserFederationProviderFactory {
     public static final String PROVIDER_NAME = "ldap";
     PartitionManagerRegistry registry;
 
     @Override
-    public FederationProvider create(KeycloakSession session) {
+    public UserFederationProvider create(KeycloakSession session) {
         throw new IllegalAccessError("Illegal to call this method");
     }
 
     @Override
-    public FederationProvider getInstance(KeycloakSession session, FederationProviderModel model) {
+    public UserFederationProvider getInstance(KeycloakSession session, UserFederationProviderModel model) {
         PartitionManager partition = registry.getPartitionManager(model);
         return new LDAPFederationProvider(session, model, partition);
     }
diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPUserModelDelegate.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPUserModelDelegate.java
index a2936d5..2a7fad5 100755
--- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPUserModelDelegate.java
+++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/LDAPUserModelDelegate.java
@@ -3,7 +3,6 @@ package org.keycloak.federation.ldap;
 import org.jboss.logging.Logger;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationLinkModel;
-import org.keycloak.models.FederationProviderModel;
 import org.keycloak.models.ModelException;
 import org.keycloak.models.RoleModel;
 import org.keycloak.models.UserCredentialModel;
diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/PartitionManagerRegistry.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/PartitionManagerRegistry.java
index 860fb2e..5c83bda 100755
--- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/PartitionManagerRegistry.java
+++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/PartitionManagerRegistry.java
@@ -1,10 +1,8 @@
 package org.keycloak.federation.ldap;
 
 import org.jboss.logging.Logger;
-import org.keycloak.models.FederationProviderModel;
-import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.LDAPConstants;
-import org.keycloak.models.RealmModel;
 import org.picketlink.idm.PartitionManager;
 import org.picketlink.idm.config.AbstractIdentityStoreConfiguration;
 import org.picketlink.idm.config.IdentityConfiguration;
@@ -30,7 +28,7 @@ public class PartitionManagerRegistry {
 
     private Map<String, PartitionManagerContext> partitionManagers = new ConcurrentHashMap<String, PartitionManagerContext>();
 
-    public PartitionManager getPartitionManager(FederationProviderModel model) {
+    public PartitionManager getPartitionManager(UserFederationProviderModel model) {
         PartitionManagerContext context = partitionManagers.get(model.getId());
 
         // Ldap config might have changed for the realm. In this case, we must re-initialize
diff --git a/model/api/src/main/java/org/keycloak/models/KeycloakSession.java b/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
index 908093e..506d211 100755
--- a/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
+++ b/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
@@ -20,6 +20,8 @@ public interface KeycloakSession {
 
     <T extends Provider> Set<T> getAllProviders(Class<T> clazz);
 
+    void enlistForClose(Provider provider);
+
     KeycloakSessionFactory getKeycloakSessionFactory();
 
     /**
diff --git a/model/api/src/main/java/org/keycloak/models/RealmModel.java b/model/api/src/main/java/org/keycloak/models/RealmModel.java
index 3117584..c1afcf5 100755
--- a/model/api/src/main/java/org/keycloak/models/RealmModel.java
+++ b/model/api/src/main/java/org/keycloak/models/RealmModel.java
@@ -165,9 +165,9 @@ public interface RealmModel extends RoleContainerModel {
 
     void setAuthenticationProviders(List<AuthenticationProviderModel> authenticationProviders);
 
-    List<FederationProviderModel> getFederationProviders();
+    List<UserFederationProviderModel> getFederationProviders();
 
-    void setFederationProviders(List<FederationProviderModel> providers);
+    void setFederationProviders(List<UserFederationProviderModel> providers);
 
     String getLoginTheme();
 
diff --git a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
index 2272183..2fc5893 100755
--- a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
+++ b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
@@ -5,7 +5,7 @@ import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.ClaimMask;
 import org.keycloak.models.ClientModel;
 import org.keycloak.models.Constants;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RequiredCredentialModel;
@@ -143,10 +143,10 @@ public class ModelToRepresentation {
             }
             rep.setAuthenticationProviders(authProviderReps);
         }
-        List<FederationProviderModel> fedProviderModels = realm.getFederationProviders();
+        List<UserFederationProviderModel> fedProviderModels = realm.getFederationProviders();
         if (fedProviderModels.size() > 0) {
             List<FederationProviderRepresentation> fedProviderReps = new ArrayList<FederationProviderRepresentation>();
-            for (FederationProviderModel model : fedProviderModels) {
+            for (UserFederationProviderModel model : fedProviderModels) {
                 FederationProviderRepresentation fedProvRep = new FederationProviderRepresentation();
                 fedProvRep.setId(model.getId());
                 fedProvRep.setProviderName(model.getProviderName());
diff --git a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
index 5aa8888..51a5ce7 100755
--- a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
+++ b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
@@ -7,7 +7,7 @@ import org.keycloak.models.AuthenticationLinkModel;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.ClaimMask;
 import org.keycloak.models.ClientModel;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.PasswordPolicy;
@@ -216,7 +216,7 @@ public class RepresentationToModel {
         }
 
         if (rep.getFederationProviders() != null) {
-            List<FederationProviderModel> providerModels = convertFederationProviders(rep.getFederationProviders());
+            List<UserFederationProviderModel> providerModels = convertFederationProviders(rep.getFederationProviders());
             newRealm.setFederationProviders(providerModels);
         }
 
@@ -288,7 +288,7 @@ public class RepresentationToModel {
         }
 
         if (rep.getFederationProviders() != null) {
-            List<FederationProviderModel> providerModels = convertFederationProviders(rep.getFederationProviders());
+            List<UserFederationProviderModel> providerModels = convertFederationProviders(rep.getFederationProviders());
             realm.setFederationProviders(providerModels);
         }
 
@@ -315,11 +315,11 @@ public class RepresentationToModel {
         return result;
     }
 
-    private static List<FederationProviderModel> convertFederationProviders(List<FederationProviderRepresentation> providers) {
-        List<FederationProviderModel> result = new ArrayList<FederationProviderModel>();
+    private static List<UserFederationProviderModel> convertFederationProviders(List<FederationProviderRepresentation> providers) {
+        List<UserFederationProviderModel> result = new ArrayList<UserFederationProviderModel>();
 
         for (FederationProviderRepresentation representation : providers) {
-            FederationProviderModel model = new FederationProviderModel(representation.getId(), representation.getProviderName(),
+            UserFederationProviderModel model = new UserFederationProviderModel(representation.getId(), representation.getProviderName(),
                     representation.getConfig());
             result.add(model);
         }
diff --git a/model/api/src/main/resources/META-INF/services/org.keycloak.provider.Spi b/model/api/src/main/resources/META-INF/services/org.keycloak.provider.Spi
index 58ccc7b..e071894 100755
--- a/model/api/src/main/resources/META-INF/services/org.keycloak.provider.Spi
+++ b/model/api/src/main/resources/META-INF/services/org.keycloak.provider.Spi
@@ -1,4 +1,4 @@
-org.keycloak.models.FederationSpi
+org.keycloak.models.UserFederationSpi
 org.keycloak.models.RealmSpi
 org.keycloak.models.UserSessionSpi
 org.keycloak.models.UserSpi
\ No newline at end of file
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
index cfd6018..292b174 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
@@ -2,7 +2,7 @@ package org.keycloak.models.cache.entities;
 
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationProviderModel;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.RealmProvider;
 import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.PasswordPolicy;
@@ -65,7 +65,7 @@ public class CachedRealm {
 
     private List<RequiredCredentialModel> requiredCredentials = new ArrayList<RequiredCredentialModel>();
     private List<AuthenticationProviderModel> authenticationProviders = new ArrayList<AuthenticationProviderModel>();
-    private List<FederationProviderModel> federationProviders = new ArrayList<FederationProviderModel>();
+    private List<UserFederationProviderModel> federationProviders = new ArrayList<UserFederationProviderModel>();
 
     private Map<String, String> smtpConfig = new HashMap<String, String>();
     private Map<String, String> socialConfig = new HashMap<String, String>();
@@ -331,7 +331,7 @@ public class CachedRealm {
         return auditListeners;
     }
 
-    public List<FederationProviderModel> getFederationProviders() {
+    public List<UserFederationProviderModel> getFederationProviders() {
         return federationProviders;
     }
 }
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedUser.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedUser.java
index 83f432d..a376012 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedUser.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedUser.java
@@ -1,7 +1,6 @@
 package org.keycloak.models.cache.entities;
 
 import org.keycloak.models.AuthenticationLinkModel;
-import org.keycloak.models.FederationProviderModel;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleModel;
 import org.keycloak.models.UserCredentialValueModel;
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
index deed00b..d280a20 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
@@ -4,19 +4,14 @@ import org.keycloak.Config;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.ClientModel;
-import org.keycloak.models.FederationProviderModel;
-import org.keycloak.models.utils.CredentialValidation;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.PasswordPolicy;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RequiredCredentialModel;
 import org.keycloak.models.RoleModel;
-import org.keycloak.models.UserCredentialModel;
-import org.keycloak.models.UserCredentialValueModel;
-import org.keycloak.models.UserModel;
 import org.keycloak.models.cache.entities.CachedRealm;
 import org.keycloak.models.utils.KeycloakModelUtils;
-import org.keycloak.models.utils.TimeBasedOTP;
 
 import java.security.PrivateKey;
 import java.security.PublicKey;
@@ -611,13 +606,13 @@ public class RealmAdapter implements RealmModel {
     }
 
     @Override
-    public List<FederationProviderModel> getFederationProviders() {
+    public List<UserFederationProviderModel> getFederationProviders() {
         if (updated != null) return updated.getFederationProviders();
         return cached.getFederationProviders();
     }
 
     @Override
-    public void setFederationProviders(List<FederationProviderModel> providers) {
+    public void setFederationProviders(List<UserFederationProviderModel> providers) {
         getDelegateForUpdate();
         updated.setFederationProviders(providers);
     }
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/UserAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/UserAdapter.java
index a431ff9..9f4ffe3 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/UserAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/UserAdapter.java
@@ -2,7 +2,6 @@ package org.keycloak.models.cache;
 
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationLinkModel;
-import org.keycloak.models.FederationProviderModel;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleContainerModel;
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 9c988d1..4312ce7 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
@@ -3,27 +3,21 @@ package org.keycloak.models.jpa;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.ClientModel;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.jpa.entities.FederationProviderEntity;
-import org.keycloak.models.utils.CredentialValidation;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.PasswordPolicy;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RequiredCredentialModel;
 import org.keycloak.models.RoleModel;
-import org.keycloak.models.UserCredentialModel;
-import org.keycloak.models.UserCredentialValueModel;
-import org.keycloak.models.UserModel;
 import org.keycloak.models.jpa.entities.ApplicationEntity;
 import org.keycloak.models.jpa.entities.AuthenticationProviderEntity;
 import org.keycloak.models.jpa.entities.OAuthClientEntity;
 import org.keycloak.models.jpa.entities.RealmEntity;
 import org.keycloak.models.jpa.entities.RequiredCredentialEntity;
 import org.keycloak.models.jpa.entities.RoleEntity;
-import org.keycloak.models.jpa.entities.ScopeMappingEntity;
 import org.keycloak.models.utils.KeycloakModelUtils;
-import org.keycloak.models.utils.TimeBasedOTP;
 
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
@@ -733,7 +727,7 @@ public class RealmAdapter implements RealmModel {
     }
 
     @Override
-    public List<FederationProviderModel> getFederationProviders() {
+    public List<UserFederationProviderModel> getFederationProviders() {
         List<FederationProviderEntity> entities = realm.getFederationProviders();
         List<FederationProviderEntity> copy = new ArrayList<FederationProviderEntity>();
         for (FederationProviderEntity entity : entities) {
@@ -748,19 +742,19 @@ public class RealmAdapter implements RealmModel {
             }
 
         });
-        List<FederationProviderModel> result = new ArrayList<FederationProviderModel>();
+        List<UserFederationProviderModel> result = new ArrayList<UserFederationProviderModel>();
         for (FederationProviderEntity entity : copy) {
-            result.add(new FederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig()));
+            result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig()));
         }
 
         return result;
     }
 
     @Override
-    public void setFederationProviders(List<FederationProviderModel> providers) {
+    public void setFederationProviders(List<UserFederationProviderModel> providers) {
         List<FederationProviderEntity> newEntities = new ArrayList<FederationProviderEntity>();
         int counter = 1;
-        for (FederationProviderModel model : providers) {
+        for (UserFederationProviderModel model : providers) {
             FederationProviderEntity entity = new FederationProviderEntity();
             entity.setId(KeycloakModelUtils.generateId());
             entity.setRealm(realm);
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 4687908..949efba 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
@@ -2,7 +2,6 @@ package org.keycloak.models.jpa;
 
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationLinkModel;
-import org.keycloak.models.FederationProviderModel;
 import org.keycloak.models.PasswordPolicy;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleContainerModel;
@@ -12,7 +11,6 @@ import org.keycloak.models.UserCredentialValueModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.models.jpa.entities.AuthenticationLinkEntity;
 import org.keycloak.models.jpa.entities.CredentialEntity;
-import org.keycloak.models.jpa.entities.FederationProviderEntity;
 import org.keycloak.models.jpa.entities.UserAttributeEntity;
 import org.keycloak.models.jpa.entities.UserEntity;
 import org.keycloak.models.jpa.entities.UserRequiredActionEntity;
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
index 713d08c..0035235 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
@@ -7,9 +7,8 @@ import org.keycloak.connections.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.AuthenticationProviderModel;
 import org.keycloak.models.ClientModel;
-import org.keycloak.models.FederationProviderModel;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.models.entities.FederationProviderEntity;
-import org.keycloak.models.utils.CredentialValidation;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.RealmProvider;
 import org.keycloak.models.OAuthClientModel;
@@ -17,9 +16,6 @@ import org.keycloak.models.PasswordPolicy;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RequiredCredentialModel;
 import org.keycloak.models.RoleModel;
-import org.keycloak.models.UserCredentialModel;
-import org.keycloak.models.UserCredentialValueModel;
-import org.keycloak.models.UserModel;
 import org.keycloak.models.entities.AuthenticationProviderEntity;
 import org.keycloak.models.entities.RequiredCredentialEntity;
 import org.keycloak.models.mongo.keycloak.entities.MongoApplicationEntity;
@@ -27,7 +23,6 @@ import org.keycloak.models.mongo.keycloak.entities.MongoOAuthClientEntity;
 import org.keycloak.models.mongo.keycloak.entities.MongoRealmEntity;
 import org.keycloak.models.mongo.keycloak.entities.MongoRoleEntity;
 import org.keycloak.models.utils.KeycloakModelUtils;
-import org.keycloak.models.utils.TimeBasedOTP;
 
 import java.security.PrivateKey;
 import java.security.PublicKey;
@@ -796,20 +791,20 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
         updateRealm();
     }
     @Override
-    public List<FederationProviderModel> getFederationProviders() {
+    public List<UserFederationProviderModel> getFederationProviders() {
         List<FederationProviderEntity> entities = realm.getFederationProviders();
-        List<FederationProviderModel> result = new ArrayList<FederationProviderModel>();
+        List<UserFederationProviderModel> result = new ArrayList<UserFederationProviderModel>();
         for (FederationProviderEntity entity : entities) {
-            result.add(new FederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig()));
+            result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig()));
         }
 
         return result;
     }
 
     @Override
-    public void setFederationProviders(List<FederationProviderModel> providers) {
+    public void setFederationProviders(List<UserFederationProviderModel> providers) {
         List<FederationProviderEntity> entities = new ArrayList<FederationProviderEntity>();
-        for (FederationProviderModel model : providers) {
+        for (UserFederationProviderModel model : providers) {
             FederationProviderEntity entity = new FederationProviderEntity();
             entity.setId(KeycloakModelUtils.generateId());
             entity.setProviderName(model.getProviderName());
diff --git a/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java b/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java
index 73299bf..b6b55c8 100755
--- a/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java
+++ b/services/src/main/java/org/keycloak/services/DefaultKeycloakSession.java
@@ -1,6 +1,6 @@
 package org.keycloak.services;
 
-import org.keycloak.models.FederationManager;
+import org.keycloak.models.UserFederationManager;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.KeycloakSessionFactory;
 import org.keycloak.models.KeycloakTransactionManager;
@@ -14,6 +14,8 @@ import org.keycloak.provider.ProviderFactory;
 
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -24,16 +26,17 @@ public class DefaultKeycloakSession implements KeycloakSession {
 
     private final DefaultKeycloakSessionFactory factory;
     private final Map<Integer, Provider> providers = new HashMap<Integer, Provider>();
+    private final List<Provider> closable = new LinkedList<Provider>();
     private final DefaultKeycloakTransactionManager transactionManager;
     private RealmProvider model;
     private UserProvider userModel;
     private UserSessionProvider sessionProvider;
-    private FederationManager federationManager;
+    private UserFederationManager federationManager;
 
     public DefaultKeycloakSession(DefaultKeycloakSessionFactory factory) {
         this.factory = factory;
         this.transactionManager = new DefaultKeycloakTransactionManager();
-        federationManager = new FederationManager(this);
+        federationManager = new UserFederationManager(this);
     }
 
     private RealmProvider getRealmProvider() {
@@ -53,6 +56,11 @@ public class DefaultKeycloakSession implements KeycloakSession {
     }
 
     @Override
+    public void enlistForClose(Provider provider) {
+        closable.add(provider);
+    }
+
+    @Override
     public KeycloakTransactionManager getTransaction() {
         return transactionManager;
     }
@@ -133,7 +141,16 @@ public class DefaultKeycloakSession implements KeycloakSession {
 
     public void close() {
         for (Provider p : providers.values()) {
-            p.close();
+            try {
+                p.close();
+            } catch (Exception e) {
+            }
+        }
+        for (Provider p : closable) {
+            try {
+                p.close();
+            } catch (Exception e) {
+            }
         }
     }
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
index 56221f8..b1c3fd1 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
@@ -9,15 +9,12 @@ import org.junit.rules.RuleChain;
 import org.junit.rules.TestRule;
 import org.junit.runners.MethodSorters;
 import org.keycloak.OAuth2Constants;
-import org.keycloak.authentication.AuthProviderConstants;
 import org.keycloak.federation.ldap.LDAPFederationProviderFactory;
+import org.keycloak.models.UserFederationProviderModel;
 import org.keycloak.testsuite.LDAPEmbeddedServer;
 import org.keycloak.testsuite.LDAPTestUtils;
-import org.keycloak.models.AuthenticationProviderModel;
-import org.keycloak.models.FederationProviderModel;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.LDAPConstants;
-import org.keycloak.models.PasswordPolicy;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.UserCredentialModel;
 import org.keycloak.models.UserModel;
@@ -64,7 +61,7 @@ public class FederationProvidersIntegrationTest {
             ldapConfig.put(LDAPConstants.VENDOR, ldapServer.getVendor());
 
 
-            FederationProviderModel ldapProvider = new FederationProviderModel(null, LDAPFederationProviderFactory.PROVIDER_NAME, ldapConfig);
+            UserFederationProviderModel ldapProvider = new UserFederationProviderModel(null, LDAPFederationProviderFactory.PROVIDER_NAME, ldapConfig);
             appRealm.setFederationProviders(Arrays.asList(ldapProvider));
 
             // Configure LDAP