keycloak-uncached

Details

diff --git a/services/src/main/java/org/keycloak/storage/UserStorageManager.java b/services/src/main/java/org/keycloak/storage/UserStorageManager.java
index e0b2ffd..226a083 100755
--- a/services/src/main/java/org/keycloak/storage/UserStorageManager.java
+++ b/services/src/main/java/org/keycloak/storage/UserStorageManager.java
@@ -137,7 +137,7 @@ public class UserStorageManager implements UserProvider, OnUserCache {
 
     @Override
     public boolean removeUser(RealmModel realm, UserModel user) {
-        getFederatedStorage().preRemove(realm, user);
+        if (getFederatedStorage() != null) getFederatedStorage().preRemove(realm, user);
         StorageId storageId = new StorageId(user.getId());
         if (storageId.getProviderId() == null) {
             return localStorage().removeUser(realm, user);
@@ -272,6 +272,7 @@ public class UserStorageManager implements UserProvider, OnUserCache {
         if (user != null) {
             return user;
         }
+        if (getFederatedStorage() == null) return null;
         String id = getFederatedStorage().getUserByFederatedIdentity(socialLink, realm);
         if (id != null) return getUserById(id, realm);
         return null;
@@ -315,8 +316,6 @@ public class UserStorageManager implements UserProvider, OnUserCache {
     protected List<UserModel> query(PaginatedQuery pagedQuery, RealmModel realm, int firstResult, int maxResults) {
         if (maxResults == 0) return Collections.EMPTY_LIST;
 
-
-
         List<UserQueryProvider> storageProviders = getStorageProviders(session, realm, UserQueryProvider.class);
         // we can skip rest of method if there are no storage providers
         if (storageProviders.isEmpty()) {
@@ -326,7 +325,7 @@ public class UserStorageManager implements UserProvider, OnUserCache {
         List<UserModel> results = new LinkedList<UserModel>();
         providers.add(localStorage());
         providers.addAll(storageProviders);
-        providers.add(getFederatedStorage());
+        if (getFederatedStorage() != null) providers.add(getFederatedStorage());
 
         int leftToRead = maxResults;
         int leftToFirstResult = firstResult;
@@ -432,7 +431,7 @@ public class UserStorageManager implements UserProvider, OnUserCache {
         if (StorageId.isLocalStorage(user)) {
             set.addAll(localStorage().getFederatedIdentities(user, realm));
         }
-        set.addAll(getFederatedStorage().getFederatedIdentities(user, realm));
+        if (getFederatedStorage() != null) set.addAll(getFederatedStorage().getFederatedIdentities(user, realm));
         return set;
     }
 
@@ -443,7 +442,8 @@ public class UserStorageManager implements UserProvider, OnUserCache {
             FederatedIdentityModel model = localStorage().getFederatedIdentity(user, socialProvider, realm);
             if (model != null) return model;
         }
-        return getFederatedStorage().getFederatedIdentity(user, socialProvider, realm);
+        if (getFederatedStorage() != null) return getFederatedStorage().getFederatedIdentity(user, socialProvider, realm);
+        else return null;
     }
 
     @Override
@@ -483,47 +483,53 @@ public class UserStorageManager implements UserProvider, OnUserCache {
     @Override
     public void preRemove(RealmModel realm) {
         localStorage().preRemove(realm);
-        getFederatedStorage().preRemove(realm);
-        for (UserStorageProvider provider : getStorageProviders(session, realm, UserStorageProvider.class)) {
-            provider.preRemove(realm);
+        if (getFederatedStorage() != null) {
+            getFederatedStorage().preRemove(realm);
+            for (UserStorageProvider provider : getStorageProviders(session, realm, UserStorageProvider.class)) {
+                provider.preRemove(realm);
+            }
         }
     }
 
     @Override
     public void preRemove(RealmModel realm, UserFederationProviderModel model) {
-        getFederatedStorage().preRemove(realm, model);
+        if (getFederatedStorage() != null) getFederatedStorage().preRemove(realm, model);
         localStorage().preRemove(realm, model);
     }
 
     @Override
     public void preRemove(RealmModel realm, GroupModel group) {
         localStorage().preRemove(realm, group);
-        getFederatedStorage().preRemove(realm, group);
-        for (UserStorageProvider provider : getStorageProviders(session, realm, UserStorageProvider.class)) {
-            provider.preRemove(realm, group);
+        if (getFederatedStorage() != null) {
+            getFederatedStorage().preRemove(realm, group);
+            for (UserStorageProvider provider : getStorageProviders(session, realm, UserStorageProvider.class)) {
+                provider.preRemove(realm, group);
+            }
         }
     }
 
     @Override
     public void preRemove(RealmModel realm, RoleModel role) {
         localStorage().preRemove(realm, role);
-        getFederatedStorage().preRemove(realm, role);
-        for (UserStorageProvider provider : getStorageProviders(session, realm, UserStorageProvider.class)) {
-            provider.preRemove(realm, role);
+        if (getFederatedStorage() != null) {
+            getFederatedStorage().preRemove(realm, role);
+            for (UserStorageProvider provider : getStorageProviders(session, realm, UserStorageProvider.class)) {
+                provider.preRemove(realm, role);
+            }
         }
     }
 
     @Override
     public void preRemove(RealmModel realm, ClientModel client) {
         localStorage().preRemove(realm, client);
-        getFederatedStorage().preRemove(realm, client);
+        if (getFederatedStorage() != null) getFederatedStorage().preRemove(realm, client);
 
     }
 
     @Override
     public void preRemove(ProtocolMapperModel protocolMapper) {
         localStorage().preRemove(protocolMapper);
-        getFederatedStorage().preRemove(protocolMapper);
+        if (getFederatedStorage() != null) getFederatedStorage().preRemove(protocolMapper);
     }
 
     @Override
diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml
index 92187bc..1e92f9b 100755
--- a/testsuite/integration/pom.xml
+++ b/testsuite/integration/pom.xml
@@ -511,6 +511,51 @@
         </profile>
 
         <profile>
+            <id>mongodb-server</id>
+
+            <properties>
+                <keycloak.connectionsMongo.host>localhost</keycloak.connectionsMongo.host>
+                <keycloak.connectionsMongo.port>27018</keycloak.connectionsMongo.port>
+                <keycloak.connectionsMongo.db>keycloak</keycloak.connectionsMongo.db>
+                <keycloak.connectionsMongo.bindIp>127.0.0.1</keycloak.connectionsMongo.bindIp>
+            </properties>
+
+            <build>
+                <plugins>
+
+                    <!-- Embedded mongo -->
+                    <plugin>
+                        <groupId>com.github.joelittlejohn.embedmongo</groupId>
+                        <artifactId>embedmongo-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>start-mongodb</id>
+                                <phase>pre-integration-test</phase>
+                                <goals>
+                                    <goal>start</goal>
+                                </goals>
+                                <configuration>
+                                    <port>${keycloak.connectionsMongo.port}</port>
+                                    <logging>file</logging>
+                                    <logFile>${project.build.directory}/mongodb.log</logFile>
+                                    <bindIp>${keycloak.connectionsMongo.bindIp}</bindIp>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>stop-mongodb</id>
+                                <phase>post-integration-test</phase>
+                                <goals>
+                                    <goal>stop</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+
+        </profile>
+
+        <profile>
             <id>clean-jpa</id>
             <build>
                 <plugins>
diff --git a/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties b/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties
index 2355ab0..e29d1bd 100644
--- a/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties
+++ b/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties
@@ -30,6 +30,9 @@ keycloak.server.subsys.default.config=\
     <spi name="user">\
         <default-provider>jpa</default-provider>\
     </spi>\
+    <spi name="userFederatedStorage">\
+        <default-provider>jpa</default-provider>\
+    </spi>\
     <spi name="userCache">\
         <provider name="default" enabled="true"/>\
     </spi>\