keycloak-uncached
Changes
model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSessionFactory.java 27(+6 -21)
model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProvider.java 21(+21 -0)
model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProviderHolder.java 20(+20 -0)
Details
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSessionFactory.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSessionFactory.java
index 563dba4..f1d1913 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSessionFactory.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSessionFactory.java
@@ -1,13 +1,12 @@
package org.keycloak.models.mongo.keycloak.adapters;
-import com.mongodb.DB;
-import com.mongodb.MongoClient;
import org.jboss.logging.Logger;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.mongo.api.MongoEntity;
import org.keycloak.models.mongo.api.MongoStore;
import org.keycloak.models.mongo.impl.MongoStoreImpl;
+import org.keycloak.models.mongo.keycloak.config.MongoClientProvider;
import org.keycloak.models.mongo.keycloak.entities.ApplicationEntity;
import org.keycloak.models.mongo.keycloak.entities.CredentialEntity;
import org.keycloak.models.mongo.keycloak.entities.OAuthClientEntity;
@@ -16,9 +15,6 @@ import org.keycloak.models.mongo.keycloak.entities.RequiredCredentialEntity;
import org.keycloak.models.mongo.keycloak.entities.RoleEntity;
import org.keycloak.models.mongo.keycloak.entities.SocialLinkEntity;
import org.keycloak.models.mongo.keycloak.entities.UserEntity;
-import org.keycloak.models.mongo.utils.MongoConfiguration;
-
-import java.net.UnknownHostException;
/**
* KeycloakSessionFactory implementation based on MongoDB
@@ -39,22 +35,12 @@ public class MongoKeycloakSessionFactory implements KeycloakSessionFactory {
OAuthClientEntity.class
};
- private final MongoClient mongoClient;
+ private final MongoClientProvider mongoClientProvider;
private final MongoStore mongoStore;
- public MongoKeycloakSessionFactory(MongoConfiguration config) {
- logger.info(String.format("Configuring MongoStore with: " + config));
-
- try {
- // TODO: authentication support
- mongoClient = new MongoClient(config.getHost(), config.getPort());
-
- DB db = mongoClient.getDB(config.getDbName());
- mongoStore = new MongoStoreImpl(db, config.isClearCollectionsOnStartup(), MANAGED_ENTITY_TYPES);
-
- } catch (UnknownHostException e) {
- throw new RuntimeException(e);
- }
+ public MongoKeycloakSessionFactory(MongoClientProvider provider) {
+ this.mongoClientProvider = provider;
+ this.mongoStore = new MongoStoreImpl(provider.getDB(), provider.clearCollectionsOnStartup(), MANAGED_ENTITY_TYPES);
}
@Override
@@ -64,7 +50,6 @@ public class MongoKeycloakSessionFactory implements KeycloakSessionFactory {
@Override
public void close() {
- logger.info("Closing MongoDB client");
- mongoClient.close();
+ this.mongoClientProvider.close();
}
}
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProvider.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProvider.java
new file mode 100644
index 0000000..180f37d
--- /dev/null
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProvider.java
@@ -0,0 +1,21 @@
+package org.keycloak.models.mongo.keycloak.config;
+
+import com.mongodb.DB;
+import com.mongodb.MongoClient;
+
+/**
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public interface MongoClientProvider {
+
+ MongoClient getMongoClient();
+
+ DB getDB();
+
+ /**
+ * @return true if collections should be cleared on startup
+ */
+ boolean clearCollectionsOnStartup();
+
+ void close();
+}
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProviderHolder.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProviderHolder.java
new file mode 100644
index 0000000..4c3eeae
--- /dev/null
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/config/MongoClientProviderHolder.java
@@ -0,0 +1,20 @@
+package org.keycloak.models.mongo.keycloak.config;
+
+/**
+ * Provides {@link MongoClientProvider} instance
+ *
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class MongoClientProviderHolder {
+
+ // Just use static object for now. Default impl is SystemPropsMongoClientProvider
+ private static MongoClientProvider instance = new SystemPropertiesMongoClientProvider();
+
+ public static MongoClientProvider getInstance() {
+ return instance;
+ }
+
+ public static void setInstance(MongoClientProvider instance) {
+ MongoClientProviderHolder.instance = instance;
+ }
+}
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/MongoModelProvider.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/MongoModelProvider.java
index 910adde..45197c7 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/MongoModelProvider.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/MongoModelProvider.java
@@ -3,8 +3,8 @@ package org.keycloak.models.mongo.keycloak;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.ModelProvider;
import org.keycloak.models.mongo.keycloak.adapters.MongoKeycloakSessionFactory;
-import org.keycloak.models.mongo.utils.MongoConfiguration;
-import org.keycloak.models.mongo.utils.SystemPropertiesConfigurationProvider;
+import org.keycloak.models.mongo.keycloak.config.MongoClientProvider;
+import org.keycloak.models.mongo.keycloak.config.MongoClientProviderHolder;
import java.lang.Override;
@@ -21,7 +21,7 @@ public class MongoModelProvider implements ModelProvider {
@Override
public KeycloakSessionFactory createFactory() {
- MongoConfiguration config = SystemPropertiesConfigurationProvider.createConfiguration();
- return new MongoKeycloakSessionFactory(config);
+ MongoClientProvider mongoClientProvider = MongoClientProviderHolder.getInstance();
+ return new MongoKeycloakSessionFactory(mongoClientProvider);
}
}
diff --git a/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java b/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java
index 8128dde..7200806 100755
--- a/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java
+++ b/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java
@@ -1,8 +1,6 @@
package org.keycloak.models.mongo.test;
-import com.mongodb.DB;
import com.mongodb.DBObject;
-import com.mongodb.MongoClient;
import com.mongodb.QueryBuilder;
import org.junit.After;
import org.junit.Assert;
@@ -13,9 +11,8 @@ import org.keycloak.models.mongo.api.MongoStore;
import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
import org.keycloak.models.mongo.impl.MongoStoreImpl;
import org.keycloak.models.mongo.impl.context.TransactionMongoStoreInvocationContext;
-import org.keycloak.models.mongo.utils.SystemPropertiesConfigurationProvider;
-
-import java.net.UnknownHostException;
+import org.keycloak.models.mongo.keycloak.config.MongoClientProvider;
+import org.keycloak.models.mongo.keycloak.config.MongoClientProviderHolder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -31,26 +28,18 @@ public class MongoStoreTest {
AddressWithFlats.class
};
- private MongoClient mongoClient;
+ private MongoClientProvider mongoClientProvider;
private MongoStore mongoStore;
@Before
public void before() throws Exception {
- try {
- // TODO: authentication support
- mongoClient = new MongoClient("localhost", SystemPropertiesConfigurationProvider.getMongoPort());
-
- DB db = mongoClient.getDB("keycloakTest");
- mongoStore = new MongoStoreImpl(db, true, MANAGED_DATA_TYPES);
-
- } catch (UnknownHostException e) {
- throw new RuntimeException(e);
- }
+ mongoClientProvider = MongoClientProviderHolder.getInstance();
+ mongoStore = new MongoStoreImpl(mongoClientProvider.getDB(), true, MANAGED_DATA_TYPES);
}
@After
public void after() throws Exception {
- mongoClient.close();
+ mongoClientProvider.close();
}
@Test