This is an automated email from the git hooks/post-receive script. New commit to branch feature/hikari in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git commit 1cdec1b7c086cb6f08e05cc3d6092057f797b248 Author: Brendan Le Ny <bleny@codelutin.com> Date: Mon Jan 8 17:12:55 2018 +0100 Allow using Hikari CP, make it the default choice https://gitlab.nuiton.org/nuiton/topia/issues/659 --- pom.xml | 7 +++- topia-persistence/pom.xml | 5 +++ .../topia/persistence/BeanTopiaConfiguration.java | 11 +++++ .../topia/persistence/TopiaConfiguration.java | 5 +++ .../persistence/TopiaConfigurationBuilder.java | 49 ++++++++++++++++++++-- .../persistence/internal/HibernateProvider.java | 13 ++++-- .../persistence/TopiaConfigurationBuilderTest.java | 1 + 7 files changed, 82 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index daae8355..66c9d0c6 100644 --- a/pom.xml +++ b/pom.xml @@ -330,7 +330,12 @@ <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernateVersion}</version> - <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-hikaricp</artifactId> + <version>${hibernateVersion}</version> </dependency> <dependency> diff --git a/topia-persistence/pom.xml b/topia-persistence/pom.xml index 74d4e50a..039c2de7 100644 --- a/topia-persistence/pom.xml +++ b/topia-persistence/pom.xml @@ -102,6 +102,11 @@ <artifactId>hibernate-c3p0</artifactId> </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-hikaricp</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 2067dbb3..7ee092e0 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 @@ -50,6 +50,8 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top protected TopiaIdFactory topiaIdFactory = new FullyQualifiedNamePlusUuidTopiaIdFactory(); + protected boolean useHikariForJdbcConnectionPooling; + public BeanTopiaConfiguration() { } @@ -129,6 +131,15 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top } @Override + public boolean isUseHikariForJdbcConnectionPooling() { + return useHikariForJdbcConnectionPooling; + } + + public void setUseHikariForJdbcConnectionPooling(boolean useHikariForJdbcConnectionPooling) { + this.useHikariForJdbcConnectionPooling = useHikariForJdbcConnectionPooling; + } + + @Override public Map<String, Class<? extends TopiaService>> getDeclaredServices() { return declaredServices; } 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 82408f62..de256fe6 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 @@ -87,4 +87,9 @@ public interface TopiaConfiguration extends JdbcConfiguration { Map<String, Map<String, String>> getDeclaredServicesConfiguration(); + /** + * If you want to favor using HikariCP as a connection pool. + */ + boolean isUseHikariForJdbcConnectionPooling(); + } 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 e6cce6e4..ab9cf9d3 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 @@ -73,6 +73,9 @@ public class TopiaConfigurationBuilder { protected static final String CONFIG_PERSISTENCE_VALIDATE_SCHEMA = "topia.persistence.validateSchema"; + protected static final String CONFIG_PERSISTENCE_USE_HIKARI_FOR_JDBC_CONNECTION_POOLING = + "topia.persistence.useHikariForJdbcConnectionPooling"; + /** * Configuration that must not be in {@link TopiaConfiguration#getHibernateExtraConfiguration()}. */ @@ -161,6 +164,11 @@ public class TopiaConfigurationBuilder { boolean validateSchema = StringUtils.isBlank(validateSchemaConfigValue) || Boolean.parseBoolean(validateSchemaConfigValue); result.setValidateSchema(validateSchema); + // Using Hikari CP + String useHikariForJdbcConnectionPoolingConfigValue = configuration.get(CONFIG_PERSISTENCE_USE_HIKARI_FOR_JDBC_CONNECTION_POOLING); + boolean useHikariForJdbcConnectionPooling = StringUtils.isBlank(useHikariForJdbcConnectionPoolingConfigValue) || Boolean.parseBoolean(useHikariForJdbcConnectionPoolingConfigValue); + result.setUseHikariForJdbcConnectionPooling(useHikariForJdbcConnectionPooling); + // others String topiaIdFactoryClassName = configuration.get(CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME); if (!Strings.isNullOrEmpty(topiaIdFactoryClassName)) { @@ -238,6 +246,11 @@ public class TopiaConfigurationBuilder { map.put(CONFIG_PERSISTENCE_VALIDATE_SCHEMA, String.valueOf(topiaConfiguration.isValidateSchema())); } + // Using Hikari CP + if ( ! topiaConfiguration.isUseHikariForJdbcConnectionPooling()) { + map.put(CONFIG_PERSISTENCE_USE_HIKARI_FOR_JDBC_CONNECTION_POOLING, String.valueOf(topiaConfiguration.isUseHikariForJdbcConnectionPooling())); + } + // others map.put(CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME, topiaConfiguration.getTopiaIdFactory().getClass().getName()); if (topiaConfiguration.getSchemaName() != null) { @@ -278,7 +291,11 @@ public class TopiaConfigurationBuilder { public BeanTopiaConfiguration forTest(Class<?> testClass, String methodName) { JdbcConfiguration jdbcConfiguration = jdbcConfigurationBuilder.forTestDatabase(testClass, methodName); - BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).onlyCreateSchemaIfDatabaseIsEmpty().validateSchemaOnStartup().build(); + BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration) + .onlyCreateSchemaIfDatabaseIsEmpty() + .validateSchemaOnStartup() + .useDefaultConnectionPool() + .build(); return configuration; } @@ -339,13 +356,37 @@ public class TopiaConfigurationBuilder { this.beanTopiaConfiguration = beanTopiaConfiguration; } - public BuildStep validateSchemaOnStartup() { + public ConfigureJdbcConnectionPoolingStep validateSchemaOnStartup() { beanTopiaConfiguration.setValidateSchema(true); - return new BuildStep(beanTopiaConfiguration); + return new ConfigureJdbcConnectionPoolingStep(beanTopiaConfiguration); } - public BuildStep doNotValidateSchemaOnStartup() { + public ConfigureJdbcConnectionPoolingStep doNotValidateSchemaOnStartup() { beanTopiaConfiguration.setValidateSchema(false); + return new ConfigureJdbcConnectionPoolingStep(beanTopiaConfiguration); + } + + } + + public class ConfigureJdbcConnectionPoolingStep { + + protected BeanTopiaConfiguration beanTopiaConfiguration; + + public ConfigureJdbcConnectionPoolingStep(BeanTopiaConfiguration beanTopiaConfiguration) { + this.beanTopiaConfiguration = beanTopiaConfiguration; + } + + public BuildStep useDefaultConnectionPool() { + return useHikariConnectionPool(); + } + + public BuildStep useHikariConnectionPool() { + beanTopiaConfiguration.setUseHikariForJdbcConnectionPooling(true); + return new BuildStep(beanTopiaConfiguration); + } + + public BuildStep useC3p0ConnectionPool() { + beanTopiaConfiguration.setUseHikariForJdbcConnectionPooling(false); return new BuildStep(beanTopiaConfiguration); } 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 c0d5ed94..aa02e5fd 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 @@ -138,10 +138,15 @@ public class HibernateProvider { properties.put(AvailableSettings.DIALECT, getHibernateDialect(topiaConfiguration)); // 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); + if (topiaConfiguration.isUseHikariForJdbcConnectionPooling()) { + properties.put(AvailableSettings.CONNECTION_PROVIDER, org.hibernate.hikaricp.internal.HikariCPConnectionProvider.class.getName()); + } else { + properties.put(AvailableSettings.CONNECTION_PROVIDER, org.hibernate.c3p0.internal.C3P0ConnectionProvider.class.getName()); + 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); + } // schema validation if (topiaConfiguration.isValidateSchema()) { 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 781bdb1a..52bf81bd 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 @@ -69,6 +69,7 @@ public class TopiaConfigurationBuilderTest { new TopiaConfigurationBuilder().forTestDatabase(getClass(), "build") .useHibernateUpdate() .validateSchemaOnStartup() + .useDefaultConnectionPool() .build(); Assert.assertTrue("any generated topia configuration must have initSchema to true", topiaConfiguration.isInitSchema()); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.