keycloak-uncached

KEYCLOAK-566 Configure db in keycloak-server.json instead

7/18/2014 7:21:52 AM

Changes

audit/jpa/src/test/resources/META-INF/persistence.xml 22(+0 -22)

model/jpa/src/test/resources/META-INF/persistence.xml 35(+0 -35)

model/realms-jpa/src/test/resources/META-INF/persistence.xml 70(+0 -70)

model/users-jpa/src/test/resources/META-INF/persistence.xml 25(+0 -25)

server/src/main/resources/META-INF/persistence.xml 36(+0 -36)

testsuite/integration/src/main/resources/META-INF/persistence.xml 43(+0 -43)

testsuite/performance/src/test/resources/META-INF/persistence.xml 72(+0 -72)

testsuite/tools/src/main/resources/META-INF/persistence.xml 43(+0 -43)

Details

diff --git a/connections/jpa/src/main/java/org/keycloak/connections/jpa/DefaultJpaConnectionProviderFactory.java b/connections/jpa/src/main/java/org/keycloak/connections/jpa/DefaultJpaConnectionProviderFactory.java
index 8f790c9..3ce1667 100644
--- a/connections/jpa/src/main/java/org/keycloak/connections/jpa/DefaultJpaConnectionProviderFactory.java
+++ b/connections/jpa/src/main/java/org/keycloak/connections/jpa/DefaultJpaConnectionProviderFactory.java
@@ -1,11 +1,14 @@
 package org.keycloak.connections.jpa;
 
+import org.hibernate.ejb.AvailableSettings;
 import org.keycloak.Config;
 import org.keycloak.models.KeycloakSession;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Properties;
 
 /**
@@ -14,7 +17,8 @@ import java.util.Properties;
 public class DefaultJpaConnectionProviderFactory implements JpaConnectionProviderFactory {
 
     private volatile EntityManagerFactory emf;
-    private String unitName;
+
+    private Config.Scope config;
 
     @Override
     public JpaConnectionProvider create(KeycloakSession session) {
@@ -40,29 +44,54 @@ public class DefaultJpaConnectionProviderFactory implements JpaConnectionProvide
 
     @Override
     public void init(Config.Scope config) {
-        unitName = config.get("unitName", "jpa-keycloak-identity-store");
+        this.config = config;
     }
 
     private void lazyInit() {
         if (emf == null) {
             synchronized (this) {
                 if (emf == null) {
-                    emf = Persistence.createEntityManagerFactory(unitName, getHibernateProperties());
-                }
-            }
-        }
-    }
+                    String unitName = config.get("unitName");
+                    Map<String, Object> properties = new HashMap<String, Object>();
 
-    private Properties getHibernateProperties() {
-        Properties result = new Properties();
+                    // Only load config from keycloak-server.json if unitName is not specified
+                    if (unitName == null) {
+                        unitName = "keycloak-default";
 
-        for (Object property : System.getProperties().keySet()) {
-            if (property.toString().startsWith("hibernate.")) {
-                String propValue = System.getProperty(property.toString());
-                result.put(property, propValue);
+                        String dataSource = config.get("dataSource");
+                        if (dataSource != null) {
+                            if (config.getBoolean("jta", false)) {
+                                properties.put(AvailableSettings.JTA_DATASOURCE, dataSource);
+                            } else {
+                                properties.put(AvailableSettings.NON_JTA_DATASOURCE, dataSource);
+                            }
+                        } else {
+                            properties.put(AvailableSettings.JDBC_URL, config.get("url"));
+                            properties.put(AvailableSettings.JDBC_DRIVER, config.get("driver"));
+
+                            String user = config.get("user");
+                            if (user != null) {
+                                properties.put(AvailableSettings.JDBC_USER, user);
+                            }
+                            String password = config.get("password");
+                            if (password != null) {
+                                properties.put(AvailableSettings.JDBC_PASSWORD, password);
+                            }
+                        }
+
+                        String databaseSchema = config.get("databaseSchema", "validate");
+                        if (databaseSchema != null) {
+                            properties.put("hibernate.hbm2ddl.auto", databaseSchema);
+                        }
+
+                        properties.put("hibernate.show_sql", config.getBoolean("showSql", false));
+                        properties.put("hibernate.format_sql", config.getBoolean("formatSql", true));
+                    }
+
+                    emf = Persistence.createEntityManagerFactory(unitName, properties);
+                }
             }
         }
-        return result;
     }
 
 }
diff --git a/distribution/war-zip/pom.xml b/distribution/war-zip/pom.xml
index d0ddb28..86f55c6 100755
--- a/distribution/war-zip/pom.xml
+++ b/distribution/war-zip/pom.xml
@@ -62,7 +62,7 @@
                     </execution>
                 </executions>
                 <configuration>
-                    <file>${project.build.directory}/unpacked/deployments/auth-server.war/WEB-INF/classes/META-INF/persistence.xml</file>
+                    <file>${project.build.directory}/unpacked/deployments/auth-server.war/WEB-INF/classes/META-INF/keycloak-server.json</file>
                     <replacements>
                         <replacement>
                             <token>java:jboss/datasources/ExampleDS</token>
diff --git a/project-integrations/aerogear-ups/auth-server/src/main/webapp/WEB-INF/classes/META-INF/keycloak-server.json b/project-integrations/aerogear-ups/auth-server/src/main/webapp/WEB-INF/classes/META-INF/keycloak-server.json
index fd02151..a1e472e 100755
--- a/project-integrations/aerogear-ups/auth-server/src/main/webapp/WEB-INF/classes/META-INF/keycloak-server.json
+++ b/project-integrations/aerogear-ups/auth-server/src/main/webapp/WEB-INF/classes/META-INF/keycloak-server.json
@@ -10,16 +10,24 @@
         }
     },
 
-    "model": {
+    "realm": {
         "provider": "jpa"
     },
 
+    "user": {
+        "provider": "${keycloak.user.provider:jpa}"
+    },
+
     "userSessions": {
-        "provider" : "mem"
+        "provider" : "${keycloak.userSessions.provider:mem}"
+    },
+
+    "realmCache": {
+        "provider": "${keycloak.realm.cache.provider:mem}"
     },
 
-    "modelCache": {
-        "provider": "${keycloak.model.cache.provider:}"
+    "userCache": {
+        "provider": "${keycloak.user.cache.provider:mem}"
     },
 
     "timer": {
@@ -49,5 +57,12 @@
 
     "scheduled": {
         "interval": 900
+    },
+
+    "connectionsJpa": {
+        "default": {
+            "dataSource": "java:jboss/datasources/ExampleDS",
+            "databaseSchema": "update"
+        }
     }
 }
\ No newline at end of file
diff --git a/server/src/main/resources/META-INF/keycloak-server.json b/server/src/main/resources/META-INF/keycloak-server.json
index 7c6d9f8..e775710 100755
--- a/server/src/main/resources/META-INF/keycloak-server.json
+++ b/server/src/main/resources/META-INF/keycloak-server.json
@@ -57,5 +57,12 @@
 
     "scheduled": {
         "interval": 900
+    },
+
+    "connectionsJpa": {
+        "default": {
+            "dataSource": "java:jboss/datasources/ExampleDS",
+            "databaseSchema": "update"
+        }
     }
 }
\ No newline at end of file
diff --git a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
index c5f9677..1547746 100755
--- a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
+++ b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
@@ -56,6 +56,16 @@
         "interval": 900
     },
 
+    "connectionsJpa": {
+        "default": {
+            "url": "${keycloak.connectionsJpa.url:jdbc:h2:mem:test}",
+            "driver": "${keycloak.connectionsJpa.driver:org.h2.Driver}",
+            "user": "${keycloak.connectionsJpa.user:sa}",
+            "password": "${keycloak.connectionsJpa.password:}",
+            "databaseSchema": "${keycloak.connectionsJpa.databaseSchema:create-drop}"
+        }
+    },
+
     "connectionsMongo": {
         "default": {
             "host": "${keycloak.connectionsMongo.host:127.0.0.1}",
@@ -64,5 +74,4 @@
             "clearOnStartup": "${keycloak.connectionsMongo.clearOnStartup:false}"
         }
     }
-
 }
\ No newline at end of file
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 746a87a..e0aa2be 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
@@ -41,7 +41,7 @@ public class ExportImportTest {
 
         @Override
         protected void before() throws Throwable {
-            if (System.getProperty("hibernate.connection.url") == null) {
+            if (System.getProperty("keycloak.connectionsJpa.url") == null) {
                 String baseExportImportDir = getExportImportTestDirectory();
 
                 File oldDBFile = new File(baseExportImportDir, "keycloakDB.h2.db");
@@ -50,8 +50,8 @@ public class ExportImportTest {
                 }
 
                 String dbDir = baseExportImportDir + "/keycloakDB";
-                System.setProperty("hibernate.connection.url", "jdbc:h2:file:" + dbDir + ";DB_CLOSE_DELAY=-1");
-                System.setProperty("hibernate.hbm2ddl.auto", "update");
+                System.setProperty("keycloak.connectionsJpa.url", "jdbc:h2:file:" + dbDir + ";DB_CLOSE_DELAY=-1");
+                System.setProperty("keycloak.connectionsJpa.databaseSchema", "update");
                 setupDone = true;
             }
         }
@@ -60,8 +60,8 @@ public class ExportImportTest {
         protected void after() {
             if (setupDone) {
                 Properties sysProps = System.getProperties();
-                sysProps.remove("hibernate.connection.url");
-                sysProps.remove("hibernate.hbm2ddl.auto");
+                sysProps.remove("keycloak.connectionsJpa.url");
+                sysProps.remove("keycloak.connectionsJpa.databaseSchema");
             }
         }
     };