keycloak-uncached

Changes

export-import/export-import-impl/pom.xml 236(+0 -236)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/ExportImportPropertiesManager.java 152(+0 -152)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/ExportImportProviderImpl.java 82(+0 -82)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/directory/TmpDirExportImportIOProvider.java 36(+0 -36)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/directory/TmpDirExportWriter.java 82(+0 -82)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/directory/TmpDirImportReader.java 67(+0 -67)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/ExportImportIOProvider.java 14(+0 -14)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/ExportWriter.java 13(+0 -13)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/ImportReader.java 13(+0 -13)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/zip/EncryptedZIPExportWriter.java 66(+0 -66)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/zip/EncryptedZIPImportReader.java 70(+0 -70)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/io/zip/EncryptedZIPIOProvider.java 48(+0 -48)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/ModelExporter.java 335(+0 -335)

export-import/export-import-impl/src/main/java/org/keycloak/exportimport/ModelImporter.java 327(+0 -327)

export-import/export-import-impl/src/main/resources/META-INF/services/org.keycloak.exportimport.ExportImportProvider 1(+0 -1)

export-import/export-import-impl/src/main/resources/META-INF/services/org.keycloak.exportimport.io.ExportImportIOProvider 2(+0 -2)

export-import/export-import-impl/src/test/java/org/keycloak/exportimport/JPAToMongoExportImportTest.java 14(+0 -14)

export-import/export-import-impl/src/test/java/org/keycloak/exportimport/MongoToJPAExportImportTest.java 17(+0 -17)

server/pom.xml 12(+11 -1)

Details

diff --git a/export-import/pom.xml b/export-import/pom.xml
index 15d39f6..72468fa 100755
--- a/export-import/pom.xml
+++ b/export-import/pom.xml
@@ -16,7 +16,6 @@
 
     <modules>
         <module>export-import-api</module>
-        <module>export-import-impl</module>
         <module>export-import-dir</module>
         <module>export-import-single-file</module>
         <module>export-import-zip</module>
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheModelProvider.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheModelProvider.java
index d116744..edc79e2 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheModelProvider.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheModelProvider.java
@@ -266,9 +266,23 @@ public class DefaultCacheModelProvider implements CacheModelProvider {
     @Override
     public boolean removeRealm(String id) {
         cache.invalidateCachedRealmById(id);
+
+        RealmModel realm = getDelegate().getRealm(id);
+        Set<RoleModel> realmRoles = null;
+        if (realm != null) {
+            realmRoles = realm.getRoles();
+        }
+
         boolean didIt = getDelegate().removeRealm(id);
         realmInvalidations.add(id);
 
+        // TODO: Temporary workaround to invalidate cached realm roles
+        if (didIt && realmRoles != null) {
+            for (RoleModel role : realmRoles) {
+                roleInvalidations.add(role.getId());
+            }
+        }
+
         return didIt;
     }
 
diff --git a/project-integrations/aerogear-ups/auth-server/pom.xml b/project-integrations/aerogear-ups/auth-server/pom.xml
index 2ea0015..a689697 100755
--- a/project-integrations/aerogear-ups/auth-server/pom.xml
+++ b/project-integrations/aerogear-ups/auth-server/pom.xml
@@ -167,7 +167,12 @@
         </dependency>
         <dependency>
             <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-export-import-impl</artifactId>
+            <artifactId>keycloak-export-import-dir</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-export-import-single-file</artifactId>
             <version>${project.version}</version>
         </dependency>
 

server/pom.xml 12(+11 -1)

diff --git a/server/pom.xml b/server/pom.xml
index a086cee..7ab2cbb 100755
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -284,7 +284,17 @@
         </dependency>
         <dependency>
             <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-export-import-impl</artifactId>
+            <artifactId>keycloak-export-import-dir</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-export-import-zip</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-export-import-single-file</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
index 20b5f09..a3e9df9 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
@@ -5,8 +5,6 @@ import java.util.Properties;
 
 import org.junit.Assert;
 import org.junit.ClassRule;
-import org.junit.FixMethodOrder;
-import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExternalResource;
 import org.junit.rules.RuleChain;
@@ -25,7 +23,6 @@ import org.keycloak.models.UserModel;
 import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.services.managers.RealmManager;
 import org.keycloak.testsuite.rule.KeycloakRule;
-import org.keycloak.testutils.KeycloakServer;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -39,7 +36,7 @@ public class ExportImportTest {
 
         @Override
         protected void before() throws Throwable {
-                if (System.getProperty("hibernate.connection.url") == null) {
+            if (System.getProperty("hibernate.connection.url") == null) {
                 String baseExportImportDir = getExportImportTestDirectory();
 
                 File oldDBFile = new File(baseExportImportDir, "keycloakDB.h2.db");
@@ -64,6 +61,29 @@ public class ExportImportTest {
         }
     };
 
+    // We want data to be persisted among server restarts
+    private static ExternalResource mongoRule = new ExternalResource() {
+
+        private static final String MONGO_CLEAR_ON_STARTUP_PROP_NAME = "keycloak.model.mongo.clearOnStartup";
+        private String previousMongoClearOnStartup;
+
+        @Override
+        protected void before() throws Throwable {
+            previousMongoClearOnStartup = System.getProperty(MONGO_CLEAR_ON_STARTUP_PROP_NAME);
+            System.setProperty(MONGO_CLEAR_ON_STARTUP_PROP_NAME, "false");
+        }
+
+        @Override
+        protected void after() {
+            if (previousMongoClearOnStartup != null) {
+                System.setProperty(MONGO_CLEAR_ON_STARTUP_PROP_NAME, "false");
+            } else {
+                System.getProperties().remove(MONGO_CLEAR_ON_STARTUP_PROP_NAME);
+            }
+        }
+
+    };
+
     private static KeycloakRule keycloakRule = new KeycloakRule( new KeycloakRule.KeycloakSetup() {
 
         @Override
@@ -79,9 +99,10 @@ public class ExportImportTest {
     @ClassRule
     public static TestRule chain = RuleChain
             .outerRule(hibernateSetupRule)
+            .around(mongoRule)
             .around(keycloakRule);
 
-    //@Test
+    @Test
     public void testDirFullExportImport() throws Throwable {
         ExportImportConfig.setProvider(DirExportProviderFactory.PROVIDER_ID);
         String targetDirPath = getExportImportTestDirectory() + File.separator + "dirExport";
@@ -95,7 +116,7 @@ public class ExportImportTest {
         Assert.assertEquals(4, new File(targetDirPath).listFiles().length);
     }
 
-    //@Test
+    @Test
     public void testDirRealmExportImport() throws Throwable {
         ExportImportConfig.setProvider(DirExportProviderFactory.PROVIDER_ID);
         String targetDirPath = getExportImportTestDirectory() + File.separator + "dirRealmExport";
@@ -118,7 +139,7 @@ public class ExportImportTest {
         testFullExportImport();
     }
 
-    //@Test
+    @Test
     public void testSingleFileRealmExportImport() throws Throwable {
         ExportImportConfig.setProvider(SingleFileExportProviderFactory.PROVIDER_ID);
         String targetFilePath = getExportImportTestDirectory() + File.separator + "singleFile-realm.json";
@@ -127,7 +148,7 @@ public class ExportImportTest {
         testRealmExportImport();
     }
 
-    //@Test
+    @Test
     public void testZipFullExportImport() throws Throwable {
         ExportImportConfig.setProvider(ZipExportProviderFactory.PROVIDER_ID);
         String zipFilePath = getExportImportTestDirectory() + File.separator + "export-full.zip";
@@ -139,7 +160,7 @@ public class ExportImportTest {
         testFullExportImport();
     }
 
-    //@Test
+    @Test
     public void testZipRealmExportImport() throws Throwable {
         ExportImportConfig.setProvider(ZipExportProviderFactory.PROVIDER_ID);
         String zipFilePath = getExportImportTestDirectory() + File.separator + "export-realm.zip";
diff --git a/testsuite/performance/src/test/java/org/keycloak/testsuite/performance/CreateRealmsWorker.java b/testsuite/performance/src/test/java/org/keycloak/testsuite/performance/CreateRealmsWorker.java
index 8deadb7..14a106c 100755
--- a/testsuite/performance/src/test/java/org/keycloak/testsuite/performance/CreateRealmsWorker.java
+++ b/testsuite/performance/src/test/java/org/keycloak/testsuite/performance/CreateRealmsWorker.java
@@ -6,6 +6,7 @@ import org.apache.log.Logger;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.RealmModel;
+import org.keycloak.models.utils.RepresentationToModel;
 import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.services.managers.RealmManager;
 
@@ -77,9 +78,9 @@ public class CreateRealmsWorker implements Worker {
 
         // Add required credentials
         if (createRequiredCredentials) {
-            realmManager.addRequiredCredential(realm, CredentialRepresentation.PASSWORD);
-            realmManager.addRequiredCredential(realm, CredentialRepresentation.TOTP);
-            realmManager.addRequiredCredential(realm, CredentialRepresentation.CLIENT_CERT);
+            RepresentationToModel.addRequiredCredential(realm, CredentialRepresentation.PASSWORD);
+            RepresentationToModel.addRequiredCredential(realm, CredentialRepresentation.TOTP);
+            RepresentationToModel.addRequiredCredential(realm, CredentialRepresentation.CLIENT_CERT);
         }
 
         log.info("Finished creation of realm " + realmName);
diff --git a/testsuite/tools/pom.xml b/testsuite/tools/pom.xml
index c630624..d3b9867 100755
--- a/testsuite/tools/pom.xml
+++ b/testsuite/tools/pom.xml
@@ -283,7 +283,17 @@
         </dependency>
         <dependency>
             <groupId>org.keycloak</groupId>
-            <artifactId>keycloak-export-import-impl</artifactId>
+            <artifactId>keycloak-export-import-dir</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-export-import-zip</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-export-import-single-file</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
diff --git a/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java b/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java
index 4077f6b..793c8c3 100644
--- a/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java
+++ b/testsuite/tools/src/main/java/org/keycloak/test/tools/PerfTools.java
@@ -1,6 +1,7 @@
 package org.keycloak.test.tools;
 
 import org.keycloak.exportimport.ExportImportConfig;
+import org.keycloak.exportimport.ExportImportManager;
 import org.keycloak.exportimport.ExportProvider;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.KeycloakSessionFactory;
@@ -231,14 +232,7 @@ public class PerfTools {
         ExportImportConfig.setProvider("dir");
         ExportImportConfig.setDir(dir);
 
-        Iterator<ExportProvider> providers = ProviderLoader.load(ExportProvider.class).iterator();
-
-        if (providers.hasNext()) {
-            ExportProvider exportImport = providers.next();
-            exportImport.checkExportImport(sessionFactory);
-        } else {
-            throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
-        }
+        new ExportImportManager().checkExportImport(sessionFactory);
     }
 
     public static class JobRepresentation {