This is an automated email from the git hooks/post-receive script. New change to branch feature/hikari in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git at 1cdec1b7 Allow using Hikari CP, make it the default choice This branch includes the following new commits: new 1cdec1b7 Allow using Hikari CP, make it the default choice The 1 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 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 -- 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/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>.
participants (1)
-
nuiton.org scm