branch feature/2892 updated (fc608df -> cd45d60)
This is an automated email from the git hooks/post-receive script. New change to branch feature/2892 in repository topia. See http://git.nuiton.org/topia.git from fc608df Remove TopiaSchemaHelper class which content has been moved into TopiaItMappingTopiaApplicationContext#createSchema() new a261bc0 Review some builder method names new cd45d60 Move configuration in properties reading in builder, refactor BeanTopiaConfiguration to extends BeanJdbcConfiguration The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit cd45d603cb25c3556e4d8ed262dd42282f35b82e Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Dec 17 18:53:19 2014 +0100 Move configuration in properties reading in builder, refactor BeanTopiaConfiguration to extends BeanJdbcConfiguration commit a261bc03c9d350d3c085e168685bd64833721dd0 Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Dec 17 17:32:10 2014 +0100 Review some builder method names Summary of changes: .../topia/persistence/BeanTopiaConfiguration.java | 59 ++------ .../persistence/PropertiesTopiaConfiguration.java | 151 ------------------- .../persistence/TopiaConfigurationBuilder.java | 162 +++++++++++++++++++-- .../internal/AbstractTopiaApplicationContext.java | 7 +- .../persistence/internal/HibernateProvider.java | 4 +- .../persistence/jdbc/BeanJdbcConfiguration.java | 51 +++++++ .../topia/persistence/jdbc/JdbcConfiguration.java | 4 +- .../persistence/jdbc/JdbcConfigurationBuilder.java | 40 +++-- .../nuiton/topia/persistence/jdbc/JdbcHelper.java | 15 +- .../persistence/TopiaConfigurationBuilderTest.java | 33 +++++ .../topia/migration/TopiaMigrationEngine.java | 2 +- 11 files changed, 273 insertions(+), 255 deletions(-) delete mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/PropertiesTopiaConfiguration.java create mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/BeanJdbcConfiguration.java -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/2892 in repository topia. See http://git.nuiton.org/topia.git commit a261bc03c9d350d3c085e168685bd64833721dd0 Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Dec 17 17:32:10 2014 +0100 Review some builder method names --- .../nuiton/topia/persistence/TopiaConfigurationBuilder.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java index 1c063c9..1fc1dfc 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java @@ -71,7 +71,7 @@ public class TopiaConfigurationBuilder { public static BeanTopiaConfiguration forTest(Class<?> testClass, String methodName) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(testClass, methodName); - BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).doNotUseConnectionPooling().dontTouchTheSchema().build(); + BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).doNotUseConnectionPooling().onlyCreateSchemaIfDatabaseIsEmpty().build(); return copyOf(configuration); } @@ -112,21 +112,30 @@ public class TopiaConfigurationBuilder { this.beanTopiaConfiguration = beanTopiaConfiguration; } - public BuildStep dontTouchTheSchema() { + public BuildStep onlyCreateSchemaIfDatabaseIsEmpty() { + beanTopiaConfiguration.setInitSchema(true); + return new BuildStep(beanTopiaConfiguration); + } + + public BuildStep useAlreadyExistingDatabaseAsIs() { + beanTopiaConfiguration.setInitSchema(false); return new BuildStep(beanTopiaConfiguration); } public BuildStep useHibernateUpdate() { + beanTopiaConfiguration.setInitSchema(true); beanTopiaConfiguration.addDeclaredService("migration", org.nuiton.topia.persistence.HibernateTopiaMigrationService.class, Collections.<String, String>emptyMap()); return new BuildStep(beanTopiaConfiguration); } public BuildStep useFlyway() { + beanTopiaConfiguration.setInitSchema(true); beanTopiaConfiguration.addDeclaredService("migration", "org.nuiton.topia.flyway.TopiaFlywayServiceImpl", Collections.<String, String>emptyMap()); return new BuildStep(beanTopiaConfiguration); } public BuildStep useLiquibase() { + beanTopiaConfiguration.setInitSchema(true); beanTopiaConfiguration.addDeclaredService("migration", "org.nuiton.topia.flyway.TopiaLiquibaseServiceImpl", Collections.<String, String>emptyMap()); return new BuildStep(beanTopiaConfiguration); } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/2892 in repository topia. See http://git.nuiton.org/topia.git commit cd45d603cb25c3556e4d8ed262dd42282f35b82e Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Dec 17 18:53:19 2014 +0100 Move configuration in properties reading in builder, refactor BeanTopiaConfiguration to extends BeanJdbcConfiguration --- .../topia/persistence/BeanTopiaConfiguration.java | 59 ++------ .../persistence/PropertiesTopiaConfiguration.java | 151 --------------------- .../persistence/TopiaConfigurationBuilder.java | 149 ++++++++++++++++++-- .../internal/AbstractTopiaApplicationContext.java | 7 +- .../persistence/internal/HibernateProvider.java | 4 +- .../persistence/jdbc/BeanJdbcConfiguration.java | 51 +++++++ .../topia/persistence/jdbc/JdbcConfiguration.java | 4 +- .../persistence/jdbc/JdbcConfigurationBuilder.java | 40 +++--- .../nuiton/topia/persistence/jdbc/JdbcHelper.java | 15 +- .../persistence/TopiaConfigurationBuilderTest.java | 33 +++++ .../topia/migration/TopiaMigrationEngine.java | 2 +- 11 files changed, 262 insertions(+), 253 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java index c9a0af4..dd5050e 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java @@ -1,22 +1,17 @@ package org.nuiton.topia.persistence; +import org.nuiton.topia.persistence.jdbc.BeanJdbcConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; + import java.util.LinkedHashMap; import java.util.Map; -public class BeanTopiaConfiguration implements TopiaConfiguration { +public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements TopiaConfiguration { protected String topiaIdFactoryClassName; protected String schemaName; - protected String jdbcDriverClassName; - - protected String jdbcConnectionUrl; - - protected String jdbcConnectionUser; - - protected String jdbcConnectionPassword; - protected Map<String, String> hibernateExtraConfiguration = new LinkedHashMap<String, String>(); @@ -34,6 +29,16 @@ public class BeanTopiaConfiguration implements TopiaConfiguration { protected Integer connectionPoolMaxSize; + public BeanTopiaConfiguration() { + } + + public BeanTopiaConfiguration(JdbcConfiguration jdbcConfiguration) { + setJdbcConnectionUrl(jdbcConfiguration.getJdbcConnectionUrl()); + setJdbcConnectionUser(jdbcConfiguration.getJdbcConnectionUser()); + setJdbcConnectionPassword(jdbcConfiguration.getJdbcConnectionPassword()); + setJdbcDriverClass(jdbcConfiguration.getJdbcDriverClass()); + } + @Override public String getTopiaIdFactoryClassName() { return topiaIdFactoryClassName; @@ -53,42 +58,6 @@ public class BeanTopiaConfiguration implements TopiaConfiguration { } @Override - public String getJdbcDriverClassName() { - return jdbcDriverClassName; - } - - public void setJdbcDriverClassName(String jdbcDriverClassName) { - this.jdbcDriverClassName = jdbcDriverClassName; - } - - @Override - public String getJdbcConnectionUrl() { - return jdbcConnectionUrl; - } - - public void setJdbcConnectionUrl(String jdbcConnectionUrl) { - this.jdbcConnectionUrl = jdbcConnectionUrl; - } - - @Override - public String getJdbcConnectionUser() { - return jdbcConnectionUser; - } - - public void setJdbcConnectionUser(String jdbcConnectionUser) { - this.jdbcConnectionUser = jdbcConnectionUser; - } - - @Override - public String getJdbcConnectionPassword() { - return jdbcConnectionPassword; - } - - public void setJdbcConnectionPassword(String jdbcConnectionPassword) { - this.jdbcConnectionPassword = jdbcConnectionPassword; - } - - @Override public Map<String, String> getHibernateExtraConfiguration() { return hibernateExtraConfiguration; } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/PropertiesTopiaConfiguration.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/PropertiesTopiaConfiguration.java deleted file mode 100644 index 3e3fb08..0000000 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/PropertiesTopiaConfiguration.java +++ /dev/null @@ -1,151 +0,0 @@ -package org.nuiton.topia.persistence; - -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; -import org.apache.commons.lang3.StringUtils; -import org.hibernate.cfg.AvailableSettings; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Properties; - -public class PropertiesTopiaConfiguration implements TopiaConfiguration { - - protected static final String TOPIA_SERVICE_CONFIGURATION_PREFIX = "topia.service."; - - protected ImmutableMap<String, String> configuration; - - protected Map<String, Class<? extends TopiaService>> declaredServices; - - protected Map<String, Map<String, String>> declaredServicesConfiguration; - - public PropertiesTopiaConfiguration(Map<String, String> configuration) { - Preconditions.checkNotNull(configuration); - this.configuration = ImmutableMap.copyOf(configuration); - } - - public PropertiesTopiaConfiguration(Properties properties) { - this((Map) ImmutableMap.copyOf(properties)); - } - - @Override - public boolean isInitSchema() { - String initSchemaConfigValue = configuration.get(TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA); - boolean initSchema = StringUtils.isBlank(initSchemaConfigValue) || Boolean.parseBoolean(initSchemaConfigValue); - return initSchema; - } - - @Override - public String getTopiaIdFactoryClassName() { - return configuration.get(TopiaConfigurationConstants.CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME); - } - - @Override - public String getSchemaName() { - return configuration.get(TopiaConfigurationConstants.CONFIG_DEFAULT_SCHEMA); - } - - @Override - public String getJdbcDriverClassName() { - return configuration.get(TopiaConfigurationConstants.CONFIG_DRIVER); - } - - @Override - public String getJdbcConnectionUrl() { - return configuration.get(TopiaConfigurationConstants.CONFIG_URL); - } - - @Override - public String getJdbcConnectionUser() { - return configuration.get(TopiaConfigurationConstants.CONFIG_USER); - } - - @Override - public String getJdbcConnectionPassword() { - return configuration.get(TopiaConfigurationConstants.CONFIG_PASS); - } - - @Override - public Integer getConnectionPoolMinSize() { - return Integer.valueOf(configuration.get(AvailableSettings.C3P0_MIN_SIZE)); - } - - @Override - public Integer getConnectionPoolMaxSize() { - return Integer.valueOf(configuration.get(AvailableSettings.C3P0_MAX_SIZE)); - } - - @Override - public ImmutableMap<String, String> getHibernateExtraConfiguration() { - Map<String, String> extraHibernateConfiguration = new LinkedHashMap<String, String>(); - for (Map.Entry<String, String> entry : configuration.entrySet()) { - String key = entry.getKey(); - boolean keyMustBeIncludedInHibernateExtraConfiguration = - ! TopiaConfigurationConstants.MAIN_CONFIGURATION.contains(key) - && key.startsWith("hibernate."); - if (keyMustBeIncludedInHibernateExtraConfiguration) { - extraHibernateConfiguration.put(key, entry.getValue()); - } - } - return ImmutableMap.copyOf(extraHibernateConfiguration); - } - - protected void readServices() { - declaredServices = new LinkedHashMap<String, Class<? extends TopiaService>>(); - declaredServicesConfiguration = new LinkedHashMap<String, Map<String, String>>(); - for (Map.Entry<String, String> entry : configuration.entrySet()) { - String prefixedConfigurationKey = entry.getKey(); - String configurationValue = entry.getValue(); - if (prefixedConfigurationKey.startsWith(TOPIA_SERVICE_CONFIGURATION_PREFIX)) { - String configurationKey = StringUtils.removeStart(prefixedConfigurationKey, TOPIA_SERVICE_CONFIGURATION_PREFIX); - String[] split = StringUtils.split(configurationKey, '.'); - Preconditions.checkState(split.length > 0, "'" + prefixedConfigurationKey + "' is not a valid configuration key"); - String serviceName = split[0]; - if (split.length == 1) { - // service declaration instantiate it - try { - Class<?> loadedClass = Class.forName(configurationValue); - // TODO brendan 26/11/14 check cast - Class<? extends TopiaService> serviceClass = (Class<? extends TopiaService>) loadedClass; - declaredServices.put(serviceName, serviceClass); - } catch (ClassNotFoundException e) { - throw new TopiaMisconfigurationException("unable to find class " + configurationValue + " in classpath", this); - } - } else { - // service configuration, save it to push it back later - Map<String, String> serviceConfiguration = declaredServicesConfiguration.get(serviceName); - if (serviceConfiguration == null) { - serviceConfiguration = new LinkedHashMap<String, String>(); - declaredServicesConfiguration.put(serviceName, serviceConfiguration); - } - String serviceConfigurationKey = StringUtils.removeStart(configurationKey, serviceName + "."); - serviceConfiguration.put(serviceConfigurationKey, configurationValue); - } - } - } - declaredServices = ImmutableMap.copyOf(declaredServices); - declaredServicesConfiguration = ImmutableMap.copyOf(declaredServicesConfiguration); - } - - @Override - public Map<String, Class<? extends TopiaService>> getDeclaredServices() { - if (declaredServices == null) { - readServices(); - } - return declaredServices; - } - - @Override - public Map<String, Map<String, String>> getDeclaredServicesConfiguration() { - if (declaredServicesConfiguration == null) { - readServices(); - } - return declaredServicesConfiguration; - } - - @Override - public boolean isConnectionPoolingEnabled() { - return configuration.containsKey(AvailableSettings.C3P0_MIN_SIZE); - } - -} diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java index 1fc1dfc..dbb9e1c 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java @@ -1,20 +1,31 @@ package org.nuiton.topia.persistence; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.cfg.AvailableSettings; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.Map; +import java.util.Properties; public class TopiaConfigurationBuilder { private static final Log log = LogFactory.getLog(TopiaConfigurationBuilder.class); + protected static final String TOPIA_SERVICE_CONFIGURATION_PREFIX = "topia.service."; + /** * Do nothing but throws {@link TopiaMisconfigurationException} if there is a problem in * given configuration. @@ -29,14 +40,9 @@ public class TopiaConfigurationBuilder { if (topiaConfiguration.getJdbcConnectionPassword() == null) { throw new TopiaMisconfigurationException("you must provide JDBC connection password", topiaConfiguration); } - if (StringUtils.isBlank(topiaConfiguration.getJdbcDriverClassName())) { + if (topiaConfiguration.getJdbcDriverClass() == null) { throw new TopiaMisconfigurationException("you must provide JDBC connection driver", topiaConfiguration); } - try { - Class.forName(topiaConfiguration.getJdbcDriverClassName()); - } catch (ClassNotFoundException e) { - throw new TopiaMisconfigurationException("unable to find JDBC driver class " + topiaConfiguration.getJdbcDriverClassName() + " in classpath", e, topiaConfiguration); - } if (topiaConfiguration.isConnectionPoolingEnabled()) { if (topiaConfiguration.getConnectionPoolMinSize() == null || topiaConfiguration.getConnectionPoolMaxSize() == null) { throw new TopiaMisconfigurationException("You must configure pool size if you want it to be enabled", topiaConfiguration); @@ -60,19 +66,129 @@ public class TopiaConfigurationBuilder { } } + public static BeanTopiaConfiguration readProperties(File propertiesFile) { + FileInputStream fileInputStream = null; + try { + Properties properties = new Properties(); + fileInputStream = new FileInputStream(propertiesFile); + properties.load(fileInputStream); + return readProperties(properties); + } catch (IOException e) { + throw new RuntimeException("unable to read file " + propertiesFile, e); + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + + public static BeanTopiaConfiguration readProperties(Properties properties) { + return readMap((Map) ImmutableMap.copyOf(properties)); + } + + public static BeanTopiaConfiguration readMap(Map<String, String> configuration) { + + // JDBC connection + String url = configuration.get(TopiaConfigurationConstants.CONFIG_URL); + String user = configuration.get(TopiaConfigurationConstants.CONFIG_USER); + String password = configuration.get(TopiaConfigurationConstants.CONFIG_PASS); + String driverName = configuration.get(TopiaConfigurationConstants.CONFIG_DRIVER); + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(url, user, password, driverName); + + BeanTopiaConfiguration result = new BeanTopiaConfiguration(jdbcConfiguration); + + // Schema initialization + String initSchemaConfigValue = configuration.get(TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA); + boolean initSchema = StringUtils.isBlank(initSchemaConfigValue) || Boolean.parseBoolean(initSchemaConfigValue); + result.setInitSchema(initSchema); + + // connection pooling + String connectionPoolMinSize = configuration.get(AvailableSettings.C3P0_MIN_SIZE); + String connectionPoolMaxSize = configuration.get(AvailableSettings.C3P0_MAX_SIZE); + + boolean connectionPoolingEnabled = StringUtils.isNotBlank(connectionPoolMinSize) + && StringUtils.isNotBlank(connectionPoolMaxSize); + result.setConnectionPoolingEnabled(connectionPoolingEnabled); + if (connectionPoolingEnabled) { + result.setConnectionPoolMinSize(Integer.valueOf(connectionPoolMinSize)); + result.setConnectionPoolMaxSize(Integer.valueOf(connectionPoolMaxSize)); + } + + // others + result.setTopiaIdFactoryClassName(configuration.get(TopiaConfigurationConstants.CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME)); + result.setSchemaName(configuration.get(TopiaConfigurationConstants.CONFIG_DEFAULT_SCHEMA)); + + // Hibernate + for (Map.Entry<String, String> entry : configuration.entrySet()) { + String key = entry.getKey(); + boolean keyMustBeIncludedInHibernateExtraConfiguration = + !TopiaConfigurationConstants.MAIN_CONFIGURATION.contains(key) + && key.startsWith("hibernate."); + if (keyMustBeIncludedInHibernateExtraConfiguration) { + result.getHibernateExtraConfiguration().put(key, entry.getValue()); + } + } + + // services + for (Map.Entry<String, String> entry : configuration.entrySet()) { + String prefixedConfigurationKey = entry.getKey(); + String configurationValue = entry.getValue(); + if (prefixedConfigurationKey.startsWith(TOPIA_SERVICE_CONFIGURATION_PREFIX)) { + String configurationKey = StringUtils.removeStart(prefixedConfigurationKey, TOPIA_SERVICE_CONFIGURATION_PREFIX); + String[] split = StringUtils.split(configurationKey, '.'); + Preconditions.checkState(split.length > 0, "'" + prefixedConfigurationKey + "' is not a valid configuration key"); + String serviceName = split[0]; + if (split.length == 1) { + // service declaration instantiate it + try { + Class<?> loadedClass = Class.forName(configurationValue); + if (TopiaService.class.isAssignableFrom(loadedClass)) { + Class<? extends TopiaService> serviceClass = (Class<? extends TopiaService>) loadedClass; + result.getDeclaredServices().put(serviceName, serviceClass); + } else { + throw new TopiaMisconfigurationException("class " + configurationValue + " is not a topia service, it does not implement " + TopiaService.class.getName(), null); + } + } catch (ClassNotFoundException e) { + throw new TopiaMisconfigurationException("unable to find class " + configurationValue + " in classpath", null); + } + } else { + // service configuration, save it to push it back later + Map<String, String> serviceConfiguration = result.getDeclaredServicesConfiguration().get(serviceName); + if (serviceConfiguration == null) { + serviceConfiguration = new LinkedHashMap<String, String>(); + result.getDeclaredServicesConfiguration().put(serviceName, serviceConfiguration); + } + String serviceConfigurationKey = StringUtils.removeStart(configurationKey, serviceName + "."); + serviceConfiguration.put(serviceConfigurationKey, configurationValue); + } + } + } + + check(result); + return result; + } + + public static Map<String, String> toMap(TopiaConfiguration topiaConfiguration) { + check(topiaConfiguration); + Map<String, String> map = new LinkedHashMap<String, String>(); + + throw new UnsupportedOperationException("yet"); + } + + public static Properties toProperties(TopiaConfiguration topiaConfiguration) { + Map<String, String> map = toMap(topiaConfiguration); + Properties properties = new Properties(); + properties.putAll(map); + return properties; + } + public static ConfigureConnectionPoolingStep forDatabase(JdbcConfiguration jdbcConfiguration) { - BeanTopiaConfiguration beanTopiaConfiguration = new BeanTopiaConfiguration(); - beanTopiaConfiguration.setJdbcConnectionUrl(jdbcConfiguration.getJdbcConnectionUrl()); - beanTopiaConfiguration.setJdbcConnectionUser(jdbcConfiguration.getJdbcConnectionUser()); - beanTopiaConfiguration.setJdbcConnectionPassword(jdbcConfiguration.getJdbcConnectionPassword()); - beanTopiaConfiguration.setJdbcDriverClassName(jdbcConfiguration.getJdbcDriverClassName()); + BeanTopiaConfiguration beanTopiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); return new ConfigureConnectionPoolingStep(beanTopiaConfiguration); } public static BeanTopiaConfiguration forTest(Class<?> testClass, String methodName) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(testClass, methodName); BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).doNotUseConnectionPooling().onlyCreateSchemaIfDatabaseIsEmpty().build(); - return copyOf(configuration); + return configuration; } public static BeanTopiaConfiguration copyOf(TopiaConfiguration topiaConfiguration) { @@ -151,8 +267,13 @@ public class TopiaConfigurationBuilder { } public BeanTopiaConfiguration build() { - check(beanTopiaConfiguration); - return beanTopiaConfiguration; + BeanTopiaConfiguration built = copyOf(beanTopiaConfiguration); + check(built); + return built; + } + + public Properties toProperties() { + return TopiaConfigurationBuilder.toProperties(beanTopiaConfiguration); } } } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java index 87da8ce..78d199d 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java @@ -33,7 +33,6 @@ import org.hibernate.HibernateException; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.hbm2ddl.SchemaUpdate; -import org.nuiton.topia.persistence.PropertiesTopiaConfiguration; import org.nuiton.topia.persistence.TopiaApplicationContext; import org.nuiton.topia.persistence.TopiaApplicationContextCache; import org.nuiton.topia.persistence.TopiaConfiguration; @@ -103,15 +102,15 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence */ @Deprecated public AbstractTopiaApplicationContext(Properties properties) { - this(new PropertiesTopiaConfiguration(properties)); + this(TopiaConfigurationBuilder.readProperties(properties)); } /** * @deprecated use {@link #AbstractTopiaApplicationContext(org.nuiton.topia.persistence.TopiaConfiguration)} */ @Deprecated - public AbstractTopiaApplicationContext(Map<String, String> configuration) { - this(new PropertiesTopiaConfiguration(configuration)); + public AbstractTopiaApplicationContext(Map<String, String> map) { + this(TopiaConfigurationBuilder.readMap(map)); } public AbstractTopiaApplicationContext(TopiaConfiguration configuration) { diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java index 5579545..95c021f 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java @@ -119,7 +119,7 @@ public class HibernateProvider { // JDBC properties.put(Environment.URL, topiaConfiguration.getJdbcConnectionUrl()); - properties.put(Environment.DRIVER, topiaConfiguration.getJdbcDriverClassName()); + properties.put(Environment.DRIVER, topiaConfiguration.getJdbcDriverClass().getName()); properties.put(Environment.USER, topiaConfiguration.getJdbcConnectionUser()); properties.put(Environment.PASS, topiaConfiguration.getJdbcConnectionPassword()); @@ -148,7 +148,7 @@ public class HibernateProvider { public static String getHibernateDialect(TopiaConfiguration topiaConfiguration) { String hibernateDialect = topiaConfiguration.getHibernateExtraConfiguration().get(TopiaConfigurationConstants.CONFIG_DIALECT); if (hibernateDialect == null) { - hibernateDialect = guessHibernateDialect(topiaConfiguration.getJdbcConnectionUrl(), topiaConfiguration.getJdbcDriverClassName()); + hibernateDialect = guessHibernateDialect(topiaConfiguration.getJdbcConnectionUrl(), topiaConfiguration.getJdbcDriverClass().getName()); } return hibernateDialect; } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/BeanJdbcConfiguration.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/BeanJdbcConfiguration.java new file mode 100644 index 0000000..fa008a6 --- /dev/null +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/BeanJdbcConfiguration.java @@ -0,0 +1,51 @@ +package org.nuiton.topia.persistence.jdbc; + +import java.sql.Driver; + +public class BeanJdbcConfiguration implements JdbcConfiguration { + + protected Class<? extends Driver> jdbcDriverClass; + + protected String jdbcConnectionUrl; + + protected String jdbcConnectionUser; + + protected String jdbcConnectionPassword; + + @Override + public Class<? extends Driver> getJdbcDriverClass() { + return jdbcDriverClass; + } + + @Override + public String getJdbcConnectionUrl() { + return jdbcConnectionUrl; + } + + @Override + public String getJdbcConnectionUser() { + return jdbcConnectionUser; + } + + @Override + public String getJdbcConnectionPassword() { + return jdbcConnectionPassword; + } + + public void setJdbcDriverClass(Class<? extends Driver> jdbcDriverClass) { + this.jdbcDriverClass = jdbcDriverClass; + } + + public void setJdbcConnectionUrl(String jdbcConnectionUrl) { + this.jdbcConnectionUrl = jdbcConnectionUrl; + } + + public void setJdbcConnectionUser(String jdbcConnectionUser) { + this.jdbcConnectionUser = jdbcConnectionUser; + } + + public void setJdbcConnectionPassword(String jdbcConnectionPassword) { + this.jdbcConnectionPassword = jdbcConnectionPassword; + } + +} diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfiguration.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfiguration.java index 4566cd4..4e84feb 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfiguration.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfiguration.java @@ -1,5 +1,7 @@ package org.nuiton.topia.persistence.jdbc; +import java.sql.Driver; + /** * @since 3.0 */ @@ -11,6 +13,6 @@ public interface JdbcConfiguration { String getJdbcConnectionPassword(); - String getJdbcDriverClassName(); + Class<? extends Driver> getJdbcDriverClass(); } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java index d9320d8..6cde698 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java @@ -12,6 +12,7 @@ import org.nuiton.util.FileUtil; import java.io.File; import java.io.IOException; +import java.sql.Driver; /** * @@ -24,29 +25,26 @@ public class JdbcConfigurationBuilder { protected static final String TIMESTAMP = String.valueOf(System.nanoTime()); - public static JdbcConfiguration forDatabase(final String jdbcConnectionUrl, final String jdbcConnectionUser, final String jdbcConnectionPassword, final String jdbcDriverClassName) { - return new JdbcConfiguration() { - - @Override - public String getJdbcConnectionUrl() { - return jdbcConnectionUrl; - } - - @Override - public String getJdbcConnectionUser() { - return jdbcConnectionUser; - } - - @Override - public String getJdbcConnectionPassword() { - return jdbcConnectionPassword; + public static JdbcConfiguration forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, String jdbcDriverClassName) { + try { + Class<?> jdbcDriverClass = Class.forName(jdbcDriverClassName); + if (Driver.class.isAssignableFrom(jdbcDriverClass)) { + return forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, (Class<? extends Driver>) jdbcDriverClass); + } else { + throw new IllegalArgumentException(jdbcDriverClassName + " seems not to be a JDBC driver: it does not implement " + Driver.class.getName()); } + } catch (ClassNotFoundException e) { + throw new IllegalArgumentException("unable to find JDBC driver class " + jdbcDriverClassName + " in classpath", e); + } + } - @Override - public String getJdbcDriverClassName() { - return jdbcDriverClassName; - } - }; + public static JdbcConfiguration forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, Class<? extends Driver> jdbcDriverClass) { + BeanJdbcConfiguration beanJdbcConfiguration = new BeanJdbcConfiguration(); + beanJdbcConfiguration.setJdbcConnectionUrl(jdbcConnectionUrl); + beanJdbcConfiguration.setJdbcConnectionUser(jdbcConnectionUser); + beanJdbcConfiguration.setJdbcConnectionPassword(jdbcConnectionPassword); + beanJdbcConfiguration.setJdbcDriverClass(jdbcDriverClass); + return beanJdbcConfiguration; } public static JdbcConfiguration forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelper.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelper.java index a1dfa41..56db3b3 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelper.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelper.java @@ -74,10 +74,6 @@ public class JdbcHelper { } } - protected String getJdbcDriverClassName() { - return jdbcConfiguration.getJdbcDriverClassName(); - } - protected Connection openConnection() throws SQLException { registerDriver(); Connection connection = DriverManager.getConnection( @@ -109,7 +105,7 @@ public class JdbcHelper { } protected Driver getJdbcDriver() { - Class<? extends Driver> jdbcDriverClass = getJdbcDriverClass(); + Class<? extends Driver> jdbcDriverClass = jdbcConfiguration.getJdbcDriverClass(); try { Driver driver = jdbcDriverClass.newInstance(); return driver; @@ -120,13 +116,4 @@ public class JdbcHelper { } } - protected Class<? extends Driver> getJdbcDriverClass() { - String jdbcDriverClassName = getJdbcDriverClassName(); - try { - Class<? extends Driver> jdbcDriverClass = (Class<? extends Driver>) Class.forName(jdbcDriverClassName); - return jdbcDriverClass; - } catch (ClassNotFoundException e) { - throw new IllegalArgumentException(jdbcDriverClassName + " is not available in classpath", e); - } - } } diff --git a/topia-persistence/src/test/java/org/nuiton/topia/persistence/TopiaConfigurationBuilderTest.java b/topia-persistence/src/test/java/org/nuiton/topia/persistence/TopiaConfigurationBuilderTest.java index bb4c5c9..875af33 100644 --- a/topia-persistence/src/test/java/org/nuiton/topia/persistence/TopiaConfigurationBuilderTest.java +++ b/topia-persistence/src/test/java/org/nuiton/topia/persistence/TopiaConfigurationBuilderTest.java @@ -2,9 +2,13 @@ package org.nuiton.topia.persistence; import org.junit.Assert; import org.junit.Test; +import org.nuiton.topia.persistence.internal.LegacyTopiaIdFactory; +import org.nuiton.topia.persistence.internal.TopiaConnectionProvider; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; +import java.util.Properties; + public class TopiaConfigurationBuilderTest { @Test @@ -28,4 +32,33 @@ public class TopiaConfigurationBuilderTest { TopiaConfigurationBuilder.forTest(getClass(), "forTest"); } + + @Test + public void testReadProperties() { + + Properties properties = new Properties(); + properties.put("hibernate.connection.driver_class", "org.h2.Driver"); + properties.put("hibernate.connection.url", "jdbc:h2:file:/tmp/my-super-directory/h2data"); + properties.put("hibernate.connection.username", "sa"); + properties.put("hibernate.connection.password", ""); + properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + properties.put("hibernate.show_sql", "false"); + properties.put("hibernate.format_sql", "true"); + properties.put("hibernate.use_sql_comments", "true"); + properties.put("hibernate.ejb.naming_strategy", org.hibernate.cfg.ImprovedNamingStrategy.class.getName()); + properties.put("hibernate.c3p0.min_size", "5"); + properties.put("hibernate.c3p0.max_size", "20"); + properties.put("hibernate.c3p0.timeout", "1800"); + properties.put("hibernate.c3p0.max_statements", "50"); + properties.put("hibernate.connection.provider_class", TopiaConnectionProvider.class.getName()); + properties.put("topia.persistence.topiaIdFactoryClassName", LegacyTopiaIdFactory.class.getName()); + properties.put("topia.service.migration", HibernateTopiaMigrationService.class.getName()); + + BeanTopiaConfiguration topiaConfiguration = TopiaConfigurationBuilder.readProperties(properties); + + Assert.assertTrue(topiaConfiguration.getHibernateExtraConfiguration().containsValue(org.hibernate.cfg.ImprovedNamingStrategy.class.getName())); + Assert.assertTrue(topiaConfiguration.isConnectionPoolingEnabled()); + + } + } \ No newline at end of file diff --git a/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java b/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java index cbde69f..d2e928d 100644 --- a/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java +++ b/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java @@ -636,7 +636,7 @@ public class TopiaMigrationEngine implements TopiaMigrationService { prop.put(Environment.URL, topiaConfiguration.getJdbcConnectionUrl()); prop.put(Environment.USER, topiaConfiguration.getJdbcConnectionUser()); prop.put(Environment.PASS, topiaConfiguration.getJdbcConnectionPassword()); - prop.put(Environment.DRIVER, topiaConfiguration.getJdbcDriverClassName()); + prop.put(Environment.DRIVER, topiaConfiguration.getJdbcDriverClass().getName()); prop.put(Environment.DIALECT, HibernateProvider.getHibernateDialect(topiaConfiguration)); Configuration result = new Configuration(); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm