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 098f5b76bb99b3a1b28ecb156d2e0fc500d369c5 Author: Brendan Le Ny <bleny@codelutin.com> Date: Mon Jan 26 16:14:31 2015 +0100 Enable connection pooling by default --- pom.xml | 7 ++ topia-persistence/pom.xml | 5 ++ .../topia/persistence/BeanTopiaConfiguration.java | 35 +--------- .../persistence/HibernateAvailableSettings.java | 6 ++ .../topia/persistence/TopiaConfiguration.java | 6 -- .../persistence/TopiaConfigurationBuilder.java | 81 ++++------------------ .../persistence/internal/HibernateProvider.java | 16 +++-- .../persistence/TopiaConfigurationBuilderTest.java | 4 -- 8 files changed, 44 insertions(+), 116 deletions(-) diff --git a/pom.xml b/pom.xml index fc60c8e..015d55b 100644 --- a/pom.xml +++ b/pom.xml @@ -324,6 +324,13 @@ </dependency> <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-c3p0</artifactId> + <version>${hibernateVersion}</version> + <scope>runtime</scope> + </dependency> + + <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>${javassistVersion}</version> diff --git a/topia-persistence/pom.xml b/topia-persistence/pom.xml index dd52c6e..e546f93 100644 --- a/topia-persistence/pom.xml +++ b/topia-persistence/pom.xml @@ -97,6 +97,11 @@ <artifactId>slf4j-log4j12</artifactId> </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-c3p0</artifactId> + </dependency> + <!-- BD H2 for testing --> <dependency> <groupId>com.h2database</groupId> 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 2c5a446..d81ed72 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 @@ -14,10 +14,6 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top protected Map<String, String> hibernateExtraConfiguration = new LinkedHashMap<String, String>(); - protected boolean connectionPoolingEnabled; - - protected Integer connectionPoolMinSize; - protected boolean initSchema = true; protected Map<String, Class<? extends TopiaService>> declaredServices = @@ -26,8 +22,6 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top protected Map<String, Map<String, String>> declaredServicesConfiguration = new LinkedHashMap<String, Map<String, String>>(); - protected Integer connectionPoolMaxSize; - protected TopiaIdFactory topiaIdFactory = new FullyQualifiedNamePlusUuidTopiaIdFactory(); public BeanTopiaConfiguration() { @@ -52,7 +46,7 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top public void setTopiaIdFactoryClassName(String topiaIdFactoryClassName) { try { Class<?> topiaIdFactoryClass = Class.forName(topiaIdFactoryClassName); - if (TopiaIdFactory.class.isAssignableFrom(jdbcDriverClass)) { + if (TopiaIdFactory.class.isAssignableFrom(topiaIdFactoryClass)) { setTopiaIdFactoryClass((Class<? extends TopiaIdFactory>) topiaIdFactoryClass); } else { throw new IllegalArgumentException(topiaIdFactoryClassName + " seems not to be a TopiaIdFactory: it does not implement " + TopiaIdFactory.class.getName()); @@ -91,24 +85,6 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top } @Override - public boolean isConnectionPoolingEnabled() { - return connectionPoolingEnabled; - } - - public void setConnectionPoolingEnabled(boolean connectionPoolingEnabled) { - this.connectionPoolingEnabled = connectionPoolingEnabled; - } - - @Override - public Integer getConnectionPoolMinSize() { - return connectionPoolMinSize; - } - - public void setConnectionPoolMinSize(Integer connectionPoolMinSize) { - this.connectionPoolMinSize = connectionPoolMinSize; - } - - @Override public boolean isInitSchema() { return initSchema; } @@ -135,15 +111,6 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top this.declaredServicesConfiguration = declaredServicesConfiguration; } - @Override - public Integer getConnectionPoolMaxSize() { - return connectionPoolMaxSize; - } - - public void setConnectionPoolMaxSize(Integer connectionPoolMaxSize) { - this.connectionPoolMaxSize = connectionPoolMaxSize; - } - public void addDeclaredService(String serviceName, String serviceClassName, Map<String, String> serviceConfiguration) { try { Class<?> aClass = Class.forName(serviceClassName); diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java index 9be6d96..2390a47 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java @@ -11,4 +11,10 @@ import org.hibernate.cfg.AvailableSettings; */ public interface HibernateAvailableSettings extends AvailableSettings { + /** + * {@link org.hibernate.cfg.AvailableSettings} seems to lack a constant for this configuration + * directive. + */ + public String NAMING_STRATEGY = "hibernate.ejb.naming_strategy"; + } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java index a61f2f5..bbcc693 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java @@ -45,12 +45,6 @@ public interface TopiaConfiguration extends JdbcConfiguration { */ Map<String, String> getHibernateExtraConfiguration(); - boolean isConnectionPoolingEnabled(); - - Integer getConnectionPoolMinSize(); - - Integer getConnectionPoolMaxSize(); - Map<String, Class<? extends TopiaService>> getDeclaredServices(); Map<String, Map<String,String>> getDeclaredServicesConfiguration(); 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 674b63f..a7b01d8 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 @@ -53,14 +53,8 @@ public class TopiaConfigurationBuilder { /** * Configuration that must not be in {@link TopiaConfiguration#getHibernateExtraConfiguration()}. */ - protected static final ImmutableSet<String> MAIN_CONFIGURATION = ImmutableSet.of( - CONFIG_DRIVER, - CONFIG_URL, - CONFIG_USER, - CONFIG_PASS, - AvailableSettings.C3P0_MIN_SIZE, - AvailableSettings.C3P0_MAX_SIZE - ); + protected static final ImmutableSet<String> MAIN_CONFIGURATION = + ImmutableSet.of(CONFIG_DRIVER, CONFIG_URL, CONFIG_USER, CONFIG_PASS); /** * Do nothing but throws {@link TopiaMisconfigurationException} if there is a problem in @@ -79,11 +73,6 @@ public class TopiaConfigurationBuilder { if (topiaConfiguration.getJdbcDriverClass() == null) { throw new TopiaMisconfigurationException("you must provide JDBC connection driver", 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); - } - } Map<String, String> hibernateExtraConfiguration = topiaConfiguration.getHibernateExtraConfiguration(); if (hibernateExtraConfiguration.containsKey(AvailableSettings.HBM2DDL_AUTO)) { throw new TopiaMisconfigurationException("you must not use " + AvailableSettings.HBM2DDL_AUTO @@ -136,18 +125,6 @@ public class TopiaConfigurationBuilder { 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(CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME)); result.setSchemaName(configuration.get(CONFIG_DEFAULT_SCHEMA)); @@ -217,12 +194,6 @@ public class TopiaConfigurationBuilder { map.put(CONFIG_PERSISTENCE_INIT_SCHEMA, String.valueOf(topiaConfiguration.isInitSchema())); } - // connection pooling - if (topiaConfiguration.isConnectionPoolingEnabled()) { - map.put(HibernateAvailableSettings.C3P0_MIN_SIZE, String.valueOf(topiaConfiguration.getConnectionPoolMinSize())); - map.put(HibernateAvailableSettings.C3P0_MAX_SIZE, String.valueOf(topiaConfiguration.getConnectionPoolMaxSize())); - } - // others map.put(CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME, topiaConfiguration.getTopiaIdFactory().getClass().getName()); if (topiaConfiguration.getSchemaName() != null) { @@ -256,14 +227,14 @@ public class TopiaConfigurationBuilder { return properties; } - public static ConfigureConnectionPoolingStep forDatabase(JdbcConfiguration jdbcConfiguration) { + public static ConfigureInitSchemaStep forDatabase(JdbcConfiguration jdbcConfiguration) { BeanTopiaConfiguration beanTopiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); - return new ConfigureConnectionPoolingStep(beanTopiaConfiguration); + return new ConfigureInitSchemaStep(beanTopiaConfiguration); } public static BeanTopiaConfiguration forTest(Class<?> testClass, String methodName) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(testClass, methodName); - BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).doNotUseConnectionPooling().onlyCreateSchemaIfDatabaseIsEmpty().build(); + BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).onlyCreateSchemaIfDatabaseIsEmpty().build(); return configuration; } @@ -274,28 +245,6 @@ public class TopiaConfigurationBuilder { return copy; } - public static class ConfigureConnectionPoolingStep { - - protected BeanTopiaConfiguration beanTopiaConfiguration; - - public ConfigureConnectionPoolingStep(BeanTopiaConfiguration beanTopiaConfiguration) { - this.beanTopiaConfiguration = beanTopiaConfiguration; - } - - public ConfigureInitSchemaStep doNotUseConnectionPooling() { - beanTopiaConfiguration.setConnectionPoolingEnabled(false); - return new ConfigureInitSchemaStep(beanTopiaConfiguration); - } - - public ConfigureInitSchemaStep useConnectionPooling(int connectionPoolMinSize, int connectionPoolMaxSize) { - beanTopiaConfiguration.setConnectionPoolingEnabled(true); - beanTopiaConfiguration.setConnectionPoolMinSize(connectionPoolMinSize); - beanTopiaConfiguration.setConnectionPoolMaxSize(connectionPoolMaxSize); - return new ConfigureInitSchemaStep(beanTopiaConfiguration); - } - - } - public static class ConfigureInitSchemaStep { protected BeanTopiaConfiguration beanTopiaConfiguration; @@ -363,52 +312,52 @@ public class TopiaConfigurationBuilder { * A few methods thah delegates to JdbcConfigurationBuilder */ - public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, String jdbcDriverClassName) { + public static ConfigureInitSchemaStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, String jdbcDriverClassName) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, jdbcDriverClassName); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, Class<? extends Driver> jdbcDriverClass) { + public static ConfigureInitSchemaStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, Class<? extends Driver> jdbcDriverClass) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, jdbcDriverClass); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + public static ConfigureInitSchemaStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forPostgresqlDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + public static ConfigureInitSchemaStep forPostgresqlDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forPostgresqlDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forH2Database(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + public static ConfigureInitSchemaStep forH2Database(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2Database(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forH2Database(String jdbcConnectionUrl) { + public static ConfigureInitSchemaStep forH2Database(String jdbcConnectionUrl) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2Database(jdbcConnectionUrl); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forH2Database(File file) { + public static ConfigureInitSchemaStep forH2Database(File file) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2Database(file); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forH2DatabaseInTempDirectory() { + public static ConfigureInitSchemaStep forH2DatabaseInTempDirectory() { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2DatabaseInTempDirectory(); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forInMemoryH2Database() { + public static ConfigureInitSchemaStep forInMemoryH2Database() { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forInMemoryH2Database(); return forDatabase(jdbcConfiguration); } - public static ConfigureConnectionPoolingStep forTestDatabase(Class<?> testClass, String methodName) { + public static ConfigureInitSchemaStep forTestDatabase(Class<?> testClass, String methodName) { JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(testClass, methodName); return forDatabase(jdbcConfiguration); } 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 6a8d4b2..4b4c46c 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 @@ -47,6 +47,7 @@ import org.hibernate.service.Service; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.spi.SessionFactoryServiceRegistry; import org.hibernate.service.spi.Stoppable; +import org.nuiton.topia.persistence.HibernateAvailableSettings; import org.nuiton.topia.persistence.TopiaConfiguration; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.internal.support.TopiaHibernateEventListener; @@ -129,15 +130,18 @@ public class HibernateProvider { // dialect properties.put(AvailableSettings.DIALECT, getHibernateDialect(topiaConfiguration)); - // Connection pool - if (topiaConfiguration.isConnectionPoolingEnabled()) { - properties.put(AvailableSettings.C3P0_MIN_SIZE, topiaConfiguration.getConnectionPoolMinSize()); - properties.put(AvailableSettings.C3P0_MAX_SIZE, topiaConfiguration.getConnectionPoolMaxSize()); - } + // using c3p0 with default configuration + properties.put(AvailableSettings.C3P0_MIN_SIZE, 5); + properties.put(AvailableSettings.C3P0_MAX_SIZE, 20); + properties.put(AvailableSettings.C3P0_TIMEOUT, 1800); + properties.put(AvailableSettings.C3P0_MAX_STATEMENTS, 50); + // always validate schema properties.put(AvailableSettings.HBM2DDL_AUTO, "validate"); - // TODO brendan 27/11/14 check if C3P0 in classpath ? + properties.put(HibernateAvailableSettings.NAMING_STRATEGY, org.hibernate.cfg.ImprovedNamingStrategy.class.getName()); + properties.put(AvailableSettings.FORMAT_SQL, true); + properties.put(AvailableSettings.USE_SQL_COMMENTS, true); // user specific configuration properties.putAll(topiaConfiguration.getHibernateExtraConfiguration()); 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 dcae9bc..62fefdd 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 @@ -7,8 +7,6 @@ import org.junit.Before; 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.Map; import java.util.Properties; @@ -47,7 +45,6 @@ public class TopiaConfigurationBuilderTest { TopiaConfiguration topiaConfiguration = TopiaConfigurationBuilder.forTestDatabase(getClass(), "build") - .doNotUseConnectionPooling() .useHibernateUpdate() .build(); @@ -68,7 +65,6 @@ public class TopiaConfigurationBuilderTest { BeanTopiaConfiguration topiaConfiguration = TopiaConfigurationBuilder.readProperties(properties); Assert.assertTrue(topiaConfiguration.getHibernateExtraConfiguration().containsValue(org.hibernate.cfg.ImprovedNamingStrategy.class.getName())); - Assert.assertTrue(topiaConfiguration.isConnectionPoolingEnabled()); } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.