branch feature/2892 updated (f2169a5 -> 48b0242)
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 f2169a5 fix build except migration engine test new 858464b Introduce JdbcConfiguration contract, use it when appropriate, make topia-service-flyway build new 0fe85a4 use JdbcHelper in tests new 48b0242 Fix build of topia flyway service The 3 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 48b0242f7b572fc173cb9e8b17ad8143e9576258 Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Dec 17 12:49:44 2014 +0100 Fix build of topia flyway service commit 0fe85a4b2203392d8834d36393409d3278986a6e Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 16 18:15:02 2014 +0100 use JdbcHelper in tests commit 858464bac96f07b29c2c3c3ffd832af179defe71 Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 16 08:30:56 2014 +0100 Introduce JdbcConfiguration contract, use it when appropriate, make topia-service-flyway build Summary of changes: .../org/nuiton/topia/it/TopiaSchemaHelper.java | 72 +----- .../topia/it/mapping/AbstractMappingTest.java | 10 +- .../topia/it/mapping/test17/FixAno3280Test.java | 41 +--- .../topia/persistence/TopiaConfiguration.java | 12 +- .../persistence/TopiaConfigurationBuilder.java | 60 +---- .../topia/persistence/jdbc/JdbcConfiguration.java | 16 ++ .../persistence/jdbc/JdbcConfigurationBuilder.java | 243 +++++++++++++++++++++ .../topia/persistence/jdbc/JdbcH2Helper.java | 31 +++ .../nuiton/topia/persistence/jdbc/JdbcHelper.java | 132 +++++++++++ .../nuiton/topia/persistence/util/TopiaH2Util.java | 9 +- .../persistence/TopiaConfigurationBuilderTest.java | 13 +- .../topia/flyway/TopiaFlywayServiceImpl.java | 4 +- .../TopiaServiceFlywayInitOnCreateSchemaTest.java | 161 ++++---------- .../src/test/resources/log4j.properties | 2 +- .../topia/liquibase/TopiaLiquibaseServiceImpl.java | 4 +- .../topia/migration/TopiaMigrationEngineTest.java | 80 +------ 16 files changed, 531 insertions(+), 359 deletions(-) create mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfiguration.java create mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java create mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java create mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelper.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 858464bac96f07b29c2c3c3ffd832af179defe71 Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 16 08:30:56 2014 +0100 Introduce JdbcConfiguration contract, use it when appropriate, make topia-service-flyway build --- .../org/nuiton/topia/it/TopiaSchemaHelper.java | 18 +++-- .../topia/it/mapping/AbstractMappingTest.java | 10 +-- .../topia/it/mapping/test17/FixAno3280Test.java | 4 +- .../topia/persistence/TopiaConfiguration.java | 12 +-- .../topia/persistence/jdbc/JdbcConfiguration.java | 16 ++++ .../topia/flyway/TopiaFlywayServiceImpl.java | 4 +- .../TopiaServiceFlywayInitOnCreateSchemaTest.java | 91 +++++++++------------- .../topia/liquibase/TopiaLiquibaseServiceImpl.java | 4 +- .../topia/migration/TopiaMigrationEngineTest.java | 38 ++++----- 9 files changed, 91 insertions(+), 106 deletions(-) diff --git a/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java b/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java index cdb1ee4..f1683b0 100644 --- a/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java +++ b/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java @@ -28,12 +28,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaConfigurationConstants; import org.nuiton.topia.persistence.TopiaException; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +import java.util.HashMap; import java.util.Map; /** @@ -78,7 +80,7 @@ public class TopiaSchemaHelper { * @throws Exception if could not create schema * @since 3.0 */ - public static void createSchema(Map<String, String> config, String schemaName) { + protected static void createSchema(Map<String, String> config, String schemaName) { Connection connection = null; CallableStatement callableStatement = null; try { @@ -100,13 +102,17 @@ public class TopiaSchemaHelper { /** * The mapping database use two extra schema (A and B) see test17. * - * @param config database connection configuration - * @throws Exception if could not create schemas on database + * @param jdbcConfiguration database connection configuration */ - public static void createMappingDataBaseSchemas(Map<String, String> config) { + public static void createMappingDataBaseSchemas(JdbcConfiguration jdbcConfiguration) { - createSchema(config, "A"); - createSchema(config, "B"); + Map<String, String> map = new HashMap<String, String>(); + map.put(TopiaConfigurationConstants.CONFIG_URL, jdbcConfiguration.getJdbcConnectionUrl()); + map.put(TopiaConfigurationConstants.CONFIG_USER, jdbcConfiguration.getJdbcConnectionUser()); + map.put(TopiaConfigurationConstants.CONFIG_PASS, jdbcConfiguration.getJdbcConnectionPassword()); + + createSchema(map, "A"); + createSchema(map, "B"); } diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/AbstractMappingTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/AbstractMappingTest.java index 0acf2fc..f274604 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/AbstractMappingTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/AbstractMappingTest.java @@ -29,14 +29,10 @@ import org.junit.Rule; import org.nuiton.topia.it.TopiaSchemaHelper; import org.nuiton.topia.junit.AbstractDatabaseResource; import org.nuiton.topia.persistence.TopiaConfiguration; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; -import java.util.HashMap; -import java.util.Map; - /** * Base test for all tests using the {@code mapping} model. @@ -52,11 +48,7 @@ public abstract class AbstractMappingTest { @Override protected TopiaItMappingTopiaApplicationContext createApplicationContext(TopiaConfiguration topiaConfiguration) { - Map<String, String> map = new HashMap<String, String>(); - map.put(TopiaConfigurationConstants.CONFIG_URL, topiaConfiguration.getJdbcConnectionUrl()); - map.put(TopiaConfigurationConstants.CONFIG_USER, topiaConfiguration.getJdbcConnectionUser()); - map.put(TopiaConfigurationConstants.CONFIG_PASS, topiaConfiguration.getJdbcConnectionPassword()); - TopiaSchemaHelper.createMappingDataBaseSchemas(map); + TopiaSchemaHelper.createMappingDataBaseSchemas(topiaConfiguration); return new TopiaItMappingTopiaApplicationContext(topiaConfiguration); } }; diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java index f513c8c..5a6f387 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java @@ -28,7 +28,7 @@ import org.h2.Driver; import org.junit.Assert; import org.junit.Test; import org.nuiton.topia.it.mapping.AbstractMappingTest; -import org.nuiton.topia.persistence.TopiaConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import java.sql.Connection; import java.sql.DriverManager; @@ -60,7 +60,7 @@ public class FixAno3280Test extends AbstractMappingTest { // TODO brendan 12/12/14 move this generic code somewhere public boolean isTableExist(String schema, String tableName) throws SQLException { - TopiaConfiguration configuration = db.getApplicationContext().getConfiguration(); + JdbcConfiguration configuration = db.getApplicationContext().getConfiguration(); Connection connection = null; try { 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 51c8ca3..7a85cc9 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 @@ -1,5 +1,7 @@ package org.nuiton.topia.persistence; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; + import java.util.Map; /** @@ -7,7 +9,7 @@ import java.util.Map; * * @since 3.0 */ -public interface TopiaConfiguration { +public interface TopiaConfiguration extends JdbcConfiguration { boolean isInitSchema(); @@ -15,14 +17,6 @@ public interface TopiaConfiguration { String getSchemaName(); - String getJdbcDriverClassName(); - - String getJdbcConnectionUrl(); - - String getJdbcConnectionUser(); - - String getJdbcConnectionPassword(); - Map<String, String> getHibernateExtraConfiguration(); boolean isConnectionPoolingEnabled(); 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 new file mode 100644 index 0000000..4566cd4 --- /dev/null +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfiguration.java @@ -0,0 +1,16 @@ +package org.nuiton.topia.persistence.jdbc; + +/** + * @since 3.0 + */ +public interface JdbcConfiguration { + + String getJdbcConnectionUrl(); + + String getJdbcConnectionUser(); + + String getJdbcConnectionPassword(); + + String getJdbcDriverClassName(); + +} diff --git a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java b/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java index bab14a1..42affba 100644 --- a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java +++ b/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java @@ -37,9 +37,9 @@ import org.flywaydb.core.Flyway; import org.flywaydb.core.api.MigrationInfo; import org.flywaydb.core.internal.util.Location; import org.nuiton.topia.persistence.TopiaApplicationContext; -import org.nuiton.topia.persistence.TopiaConfiguration; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaMigrationServiceException; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import java.io.IOException; import java.net.URL; @@ -118,7 +118,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { */ protected void setDataSource(Flyway flyway, TopiaApplicationContext topiaApplicationContext) { - TopiaConfiguration configuration = topiaApplicationContext.getConfiguration(); + JdbcConfiguration configuration = topiaApplicationContext.getConfiguration(); String url = configuration.getJdbcConnectionUrl(); String user = configuration.getJdbcConnectionUser(); diff --git a/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java b/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java index 6298ff6..f4ce7d4 100644 --- a/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java +++ b/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java @@ -22,26 +22,23 @@ package org.nuiton.topia.flyway; * #L% */ -import java.io.File; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.util.Map; - +import com.google.common.collect.ImmutableMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.h2.Driver; -import org.hibernate.dialect.H2Dialect; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.nuiton.topia.it.TopiaSchemaHelper; import org.nuiton.topia.it.mapping.TopiaItMappingTopiaApplicationContext; -import org.nuiton.topia.junit.ConfigurationHelper; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; +import org.nuiton.topia.persistence.BeanTopiaConfiguration; +import org.nuiton.topia.persistence.TopiaConfigurationBuilder; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; -import com.google.common.collect.Maps; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; /** * @author Arnaud Thimel (Code Lutin) @@ -55,14 +52,14 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { * <p/> * This method is designed for H2 only. */ - protected boolean isTableExist(Map<String, String> config, String tableName) throws Exception { + protected boolean isTableExist(JdbcConfiguration config, String tableName) throws Exception { Connection connection = null; try { DriverManager.registerDriver(new Driver()); connection = DriverManager.getConnection( - config.get(TopiaConfigurationConstants.CONFIG_URL), - config.get(TopiaConfigurationConstants.CONFIG_USER), - config.get(TopiaConfigurationConstants.CONFIG_PASS)); + config.getJdbcConnectionUrl(), + config.getJdbcConnectionUser(), + config.getJdbcConnectionPassword()); boolean result = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null).next() || connection.getMetaData().getTables(null, null, tableName.toLowerCase(), null).next() || @@ -75,14 +72,14 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { } } - protected String runSelectOnString(Map<String, String> config, String sql) throws Exception { + protected String runSelectOnString(JdbcConfiguration config, String sql) throws Exception { Connection connection = null; try { DriverManager.registerDriver(new Driver()); connection = DriverManager.getConnection( - config.get(TopiaConfigurationConstants.CONFIG_URL), - config.get(TopiaConfigurationConstants.CONFIG_USER), - config.get(TopiaConfigurationConstants.CONFIG_PASS)); + config.getJdbcConnectionUrl(), + config.getJdbcConnectionUser(), + config.getJdbcConnectionPassword()); PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); @@ -97,38 +94,17 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { } } - protected String readVersion(Map<String, String> config) throws Exception { + protected String readVersion(JdbcConfiguration config) throws Exception { // Be careful, H2 is case sensitive and Flyway uses double quotes (") in table/column names return runSelectOnString(config, " SELECT MAX(\"version\") FROM \"PUBLIC\".\"schema_version\" "); } - protected Map<String, String> getTestConfig(String testName) { - - File testSpecificDirectory = ConfigurationHelper.getTestSpecificDirectory(TopiaServiceFlywayInitOnCreateSchemaTest.class, testName); - - String dbPath = new File(testSpecificDirectory, "db").getAbsolutePath(); - if (log.isDebugEnabled()) { - log.debug("dbPath = " + dbPath); - } - - Map<String, String> config = Maps.newHashMap(); - config.put(TopiaConfigurationConstants.CONFIG_DRIVER, Driver.class.getName()); - config.put(TopiaConfigurationConstants.CONFIG_DIALECT, H2Dialect.class.getName()); - config.put(TopiaConfigurationConstants.CONFIG_USER, "sa"); - config.put(TopiaConfigurationConstants.CONFIG_PASS, ""); - config.put(TopiaConfigurationConstants.CONFIG_URL, "jdbc:h2:file:" + dbPath); - config.put(TopiaConfigurationConstants.CONFIG_HBM2DDL_AUTO, "validate"); - config.put(TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA, "true"); - return config; - } - @Test public void testInitWithUseModelVersion() throws Exception { - Map<String, String> config = getTestConfig("testInitWithUseModelVersion"); + BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithUseModelVersion"); - config.put("topia.service.migration", TopiaFlywayServiceImpl.class.getName()); - config.put("topia.service.migration." + TopiaFlywayService.USE_MODEL_VERSION, "true"); + config.addDeclaredService("migration", TopiaFlywayServiceImpl.class.getName(), ImmutableMap.of(TopiaFlywayService.USE_MODEL_VERSION, "true")); Assert.assertFalse(isTableExist(config, "schema_version")); Assert.assertFalse(isTableExist(config, "a6")); @@ -152,10 +128,9 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { @Test public void testInitWithoutUseModelVersion() throws Exception { - Map<String, String> config = getTestConfig("testInitWithoutUseModelVersion"); + BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithoutUseModelVersion"); - config.put("topia.service.migration", TopiaFlywayServiceImpl.class.getName()); - config.put("topia.service.migration." + TopiaFlywayService.USE_MODEL_VERSION, "false"); + config.addDeclaredService("migration", TopiaFlywayServiceImpl.class.getName(), ImmutableMap.of(TopiaFlywayService.USE_MODEL_VERSION, "false")); Assert.assertFalse(isTableExist(config, "schema_version")); Assert.assertFalse(isTableExist(config, "a6")); @@ -180,11 +155,15 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { @Ignore // This test won't work since it is not possible to give flyway another test dir than 'db/migration" public void testInitWithFlywayInitVersion() throws Exception { - Map<String, String> config = getTestConfig("testInitWithFlywayInitVersion"); + BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithFlywayInitVersion"); - config.put("topia.service.migration", TopiaFlywayServiceImpl.class.getName()); - config.put("topia.service.migration." + TopiaFlywayService.USE_MODEL_VERSION, "false"); - config.put("topia.service.migration." + TopiaFlywayService.FLYWAY_INIT_VERSION, "1.2.42"); + config.addDeclaredService( + "migration", + TopiaFlywayServiceImpl.class.getName(), + ImmutableMap.of( + TopiaFlywayService.USE_MODEL_VERSION, "false", + TopiaFlywayService.FLYWAY_INIT_VERSION, "1.2.42" + )); Assert.assertFalse(isTableExist(config, "schema_version")); Assert.assertFalse(isTableExist(config, "a6")); @@ -207,11 +186,15 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { @Test(expected = IllegalStateException.class) public void testInitWithInvalidConf() throws Exception { - Map<String, String> config = getTestConfig("testInitWithInvalidConf"); + BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithInvalidConf"); - config.put("topia.service.migration", TopiaFlywayServiceImpl.class.getName()); - config.put("topia.service.migration." + TopiaFlywayService.USE_MODEL_VERSION, "true"); - config.put("topia.service.migration." + TopiaFlywayService.FLYWAY_INIT_VERSION, "1.2.42"); + config.addDeclaredService( + "migration", + TopiaFlywayServiceImpl.class.getName(), + ImmutableMap.of( + TopiaFlywayService.USE_MODEL_VERSION, "true", + TopiaFlywayService.FLYWAY_INIT_VERSION, "1.2.42" + )); TopiaSchemaHelper.createMappingDataBaseSchemas(config); diff --git a/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java b/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java index 116a676..973bea5 100644 --- a/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java +++ b/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java @@ -37,8 +37,8 @@ import liquibase.resource.ResourceAccessor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaApplicationContext; -import org.nuiton.topia.persistence.TopiaConfiguration; import org.nuiton.topia.persistence.TopiaMigrationServiceException; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import java.util.Map; @@ -151,7 +151,7 @@ public class TopiaLiquibaseServiceImpl implements TopiaLiquibaseService { } protected Database openDatabase(TopiaApplicationContext topiaApplicationContext, ResourceAccessor resourceAccessor) { - TopiaConfiguration configuration = topiaApplicationContext.getConfiguration(); + JdbcConfiguration configuration = topiaApplicationContext.getConfiguration(); String url = configuration.getJdbcConnectionUrl(); String user = configuration.getJdbcConnectionUser(); String password = configuration.getJdbcConnectionPassword(); diff --git a/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java b/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java index b36d312..8e51d9e 100644 --- a/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java +++ b/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java @@ -39,14 +39,12 @@ import org.nuiton.topia.junit.AbstractDatabaseResource; import org.nuiton.topia.persistence.BeanTopiaConfiguration; import org.nuiton.topia.persistence.TopiaConfiguration; import org.nuiton.topia.persistence.TopiaConfigurationBuilder; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.util.HashMap; -import java.util.Map; /** * @author Arnaud Thimel (Code Lutin) @@ -61,11 +59,7 @@ public class TopiaMigrationEngineTest { @Override protected TopiaItMappingTopiaApplicationContext createApplicationContext(TopiaConfiguration topiaConfiguration) { - Map<String, String> map = new HashMap<String, String>(); - map.put(TopiaConfigurationConstants.CONFIG_URL, topiaConfiguration.getJdbcConnectionUrl()); - map.put(TopiaConfigurationConstants.CONFIG_USER, topiaConfiguration.getJdbcConnectionUser()); - map.put(TopiaConfigurationConstants.CONFIG_PASS, topiaConfiguration.getJdbcConnectionPassword()); - TopiaSchemaHelper.createMappingDataBaseSchemas(map); + TopiaSchemaHelper.createMappingDataBaseSchemas(topiaConfiguration); return new TopiaItMappingTopiaApplicationContext(topiaConfiguration); } }; @@ -75,14 +69,14 @@ public class TopiaMigrationEngineTest { * * This method is designed for H2 only. */ - protected boolean isTableExist(TopiaConfiguration topiaConfiguration, String tableName) throws Exception { + protected boolean isTableExist(JdbcConfiguration jdbcConfiguration, String tableName) throws Exception { Connection connection = null; try { DriverManager.registerDriver(new Driver()); connection = DriverManager.getConnection( - topiaConfiguration.getJdbcConnectionUrl(), - topiaConfiguration.getJdbcConnectionUser(), - topiaConfiguration.getJdbcConnectionPassword()); + jdbcConfiguration.getJdbcConnectionUrl(), + jdbcConfiguration.getJdbcConnectionUser(), + jdbcConfiguration.getJdbcConnectionPassword()); ResultSet rset = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null); boolean result = rset.next(); return result; @@ -93,14 +87,14 @@ public class TopiaMigrationEngineTest { } } - protected String runSelectOnString(TopiaConfiguration topiaConfiguration, String sql) throws Exception { + protected String runSelectOnString(JdbcConfiguration jdbcConfiguration, String sql) throws Exception { Connection connection = null; try { DriverManager.registerDriver(new Driver()); connection = DriverManager.getConnection( - topiaConfiguration.getJdbcConnectionUrl(), - topiaConfiguration.getJdbcConnectionUser(), - topiaConfiguration.getJdbcConnectionPassword()); + jdbcConfiguration.getJdbcConnectionUrl(), + jdbcConfiguration.getJdbcConnectionUser(), + jdbcConfiguration.getJdbcConnectionPassword()); PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); @@ -115,14 +109,14 @@ public class TopiaMigrationEngineTest { } } - protected int runUpdate(TopiaConfiguration topiaConfiguration, String sql) throws Exception { + protected int runUpdate(JdbcConfiguration jdbcConfiguration, String sql) throws Exception { Connection connection = null; try { DriverManager.registerDriver(new Driver()); connection = DriverManager.getConnection( - topiaConfiguration.getJdbcConnectionUrl(), - topiaConfiguration.getJdbcConnectionUser(), - topiaConfiguration.getJdbcConnectionPassword()); + jdbcConfiguration.getJdbcConnectionUrl(), + jdbcConfiguration.getJdbcConnectionUser(), + jdbcConfiguration.getJdbcConnectionPassword()); PreparedStatement preparedStatement = connection.prepareStatement(sql); int result = preparedStatement.executeUpdate(); return result; @@ -133,8 +127,8 @@ public class TopiaMigrationEngineTest { } } - protected String readVersion(TopiaConfiguration topiaConfiguration) throws Exception { - return runSelectOnString(topiaConfiguration, "SELECT VERSION FROM TMS_VERSION"); + protected String readVersion(JdbcConfiguration jdbcConfiguration) throws Exception { + return runSelectOnString(jdbcConfiguration, "SELECT VERSION FROM TMS_VERSION"); } // @Test -- 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 0fe85a4b2203392d8834d36393409d3278986a6e Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 16 18:15:02 2014 +0100 use JdbcHelper in tests --- pom.xml | 2 +- .../org/nuiton/topia/it/TopiaSchemaHelper.java | 72 +---------- .../topia/persistence/jdbc/JdbcH2Helper.java | 29 +++++ .../nuiton/topia/persistence/jdbc/JdbcHelper.java | 132 +++++++++++++++++++++ .../topia/migration/TopiaMigrationEngineTest.java | 60 +--------- 5 files changed, 171 insertions(+), 124 deletions(-) diff --git a/pom.xml b/pom.xml index fc60c8e..a6c4a22 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ <module>topia-templates</module> <module>topia-it</module> <module>topia-service-replication</module> - <module>topia-service-migration</module> + <!--<module>topia-service-migration</module>--> <module>topia-service-flyway</module> <module>topia-service-liquibase</module> <module>topia-service-csv</module> diff --git a/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java b/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java index f1683b0..09831d1 100644 --- a/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java +++ b/topia-it/src/main/java/org/nuiton/topia/it/TopiaSchemaHelper.java @@ -26,17 +26,8 @@ package org.nuiton.topia.it; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; -import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; - -import java.sql.CallableStatement; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.HashMap; -import java.util.Map; +import org.nuiton.topia.persistence.jdbc.JdbcHelper; /** * Created on 7/6/14. @@ -48,57 +39,6 @@ public class TopiaSchemaHelper { private static final Log log = LogFactory.getLog(TopiaSchemaHelper.class); - protected static void closeQuietly(Connection connection) { - if (connection != null) { - try { - connection.close(); - } catch (Exception eee) { - if (log.isWarnEnabled()) { - log.warn("Unable to close: " + eee.getMessage() , eee); - } - } - } - } - - protected static void closeQuietly(Statement statement) { - if (statement != null) { - try { - statement.close(); - } catch (Exception eee) { - if (log.isWarnEnabled()) { - log.warn("Unable to close: " + eee.getMessage() , eee); - } - } - } - } - - /** - * Create the physical schema. - * - * @param config sql connection configuration - * @param schemaName name of schema to create - * @throws Exception if could not create schema - * @since 3.0 - */ - protected static void createSchema(Map<String, String> config, String schemaName) { - Connection connection = null; - CallableStatement callableStatement = null; - try { - //DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - config.get(TopiaConfigurationConstants.CONFIG_URL), - config.get(TopiaConfigurationConstants.CONFIG_USER), - config.get(TopiaConfigurationConstants.CONFIG_PASS)); - callableStatement = connection.prepareCall("create schema " + schemaName); - callableStatement.execute(); - } catch (SQLException e) { - throw new TopiaException(e); - } finally { - closeQuietly(callableStatement); - closeQuietly(connection); - } - } - /** * The mapping database use two extra schema (A and B) see test17. * @@ -106,13 +46,9 @@ public class TopiaSchemaHelper { */ public static void createMappingDataBaseSchemas(JdbcConfiguration jdbcConfiguration) { - Map<String, String> map = new HashMap<String, String>(); - map.put(TopiaConfigurationConstants.CONFIG_URL, jdbcConfiguration.getJdbcConnectionUrl()); - map.put(TopiaConfigurationConstants.CONFIG_USER, jdbcConfiguration.getJdbcConnectionUser()); - map.put(TopiaConfigurationConstants.CONFIG_PASS, jdbcConfiguration.getJdbcConnectionPassword()); - - createSchema(map, "A"); - createSchema(map, "B"); + JdbcHelper jdbcHelper = new JdbcHelper(jdbcConfiguration); + jdbcHelper.createSchema("A"); + jdbcHelper.createSchema("B"); } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java new file mode 100644 index 0000000..10e11a0 --- /dev/null +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java @@ -0,0 +1,29 @@ +package org.nuiton.topia.persistence.jdbc; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class JdbcH2Helper extends JdbcHelper { + + public JdbcH2Helper(JdbcConfiguration jdbcConfiguration) { + super(jdbcConfiguration); + } + + public boolean isTableExist(String tableName) { + Connection connection = null; + ResultSet resultSet = null; + try { + connection = openConnection(); + resultSet = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null); + boolean result = resultSet.next(); + return result; + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + closeQuietly(resultSet); + closeQuietly(connection); + } + } + +} 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 new file mode 100644 index 0000000..a1dfa41 --- /dev/null +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelper.java @@ -0,0 +1,132 @@ +package org.nuiton.topia.persistence.jdbc; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * @since 3.0 + */ +public class JdbcHelper { + + private static final Log log = LogFactory.getLog(JdbcHelper.class); + + protected JdbcConfiguration jdbcConfiguration; + + public JdbcHelper(JdbcConfiguration jdbcConfiguration) { + this.jdbcConfiguration = jdbcConfiguration; + } + + public String runSelectOnString(String sql) { + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = openConnection(); + preparedStatement = connection.prepareStatement(sql); + ResultSet resultSet = preparedStatement.executeQuery(); + if (resultSet.next()) { + return resultSet.getString(1); + } + return null; + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + closeQuietly(preparedStatement); + closeQuietly(connection); + } + } + + public void createSchema(String schemaName) { + Connection connection = null; + CallableStatement callableStatement = null; + try { + connection = openConnection(); + callableStatement = connection.prepareCall("create schema " + schemaName); + callableStatement.execute(); + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + closeQuietly(callableStatement); + closeQuietly(connection); + } + } + + public int runUpdate(String sql) { + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = openConnection(); + preparedStatement = connection.prepareStatement(sql); + int result = preparedStatement.executeUpdate(); + return result; + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + closeQuietly(preparedStatement); + closeQuietly(connection); + } + } + + protected String getJdbcDriverClassName() { + return jdbcConfiguration.getJdbcDriverClassName(); + } + + protected Connection openConnection() throws SQLException { + registerDriver(); + Connection connection = DriverManager.getConnection( + jdbcConfiguration.getJdbcConnectionUrl(), + jdbcConfiguration.getJdbcConnectionUser(), + jdbcConfiguration.getJdbcConnectionPassword()); + return connection; + } + + protected void closeQuietly(AutoCloseable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Unable to close: " + eee.getMessage() , eee); + } + } + } + } + + protected void registerDriver() { + Driver driver = getJdbcDriver(); + try { + DriverManager.registerDriver(driver); + } catch (SQLException e) { + throw new RuntimeException("unable to register driver " + driver, e); + } + } + + protected Driver getJdbcDriver() { + Class<? extends Driver> jdbcDriverClass = getJdbcDriverClass(); + try { + Driver driver = jdbcDriverClass.newInstance(); + return driver; + } catch (InstantiationException e) { + throw new IllegalArgumentException(jdbcDriverClass + " is not instantiable", e); + } catch (IllegalAccessException e) { + throw new IllegalArgumentException(jdbcDriverClass + " is not instantiable", e); + } + } + + 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-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java b/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java index 8e51d9e..38286c4 100644 --- a/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java +++ b/topia-service-migration/src/test/java/org/nuiton/topia/migration/TopiaMigrationEngineTest.java @@ -27,7 +27,6 @@ package org.nuiton.topia.migration; import com.google.common.collect.ImmutableMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.h2.Driver; import org.hibernate.HibernateException; import org.junit.Assert; import org.junit.Rule; @@ -40,11 +39,8 @@ import org.nuiton.topia.persistence.BeanTopiaConfiguration; import org.nuiton.topia.persistence.TopiaConfiguration; import org.nuiton.topia.persistence.TopiaConfigurationBuilder; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; +import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; +import org.nuiton.topia.persistence.jdbc.JdbcHelper; /** * @author Arnaud Thimel (Code Lutin) @@ -70,61 +66,15 @@ public class TopiaMigrationEngineTest { * This method is designed for H2 only. */ protected boolean isTableExist(JdbcConfiguration jdbcConfiguration, String tableName) throws Exception { - Connection connection = null; - try { - DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - jdbcConfiguration.getJdbcConnectionUrl(), - jdbcConfiguration.getJdbcConnectionUser(), - jdbcConfiguration.getJdbcConnectionPassword()); - ResultSet rset = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null); - boolean result = rset.next(); - return result; - } finally { - if (connection != null && !connection.isClosed()) { - connection.close(); - } - } + return new JdbcH2Helper(jdbcConfiguration).isTableExist(tableName); } protected String runSelectOnString(JdbcConfiguration jdbcConfiguration, String sql) throws Exception { - Connection connection = null; - try { - DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - jdbcConfiguration.getJdbcConnectionUrl(), - jdbcConfiguration.getJdbcConnectionUser(), - jdbcConfiguration.getJdbcConnectionPassword()); - PreparedStatement preparedStatement = connection.prepareStatement(sql); - ResultSet resultSet = preparedStatement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getString(1); - } - return null; - } finally { - if (connection != null && !connection.isClosed()) { - connection.close(); - } - } + return new JdbcHelper(jdbcConfiguration).runSelectOnString(sql); } protected int runUpdate(JdbcConfiguration jdbcConfiguration, String sql) throws Exception { - Connection connection = null; - try { - DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - jdbcConfiguration.getJdbcConnectionUrl(), - jdbcConfiguration.getJdbcConnectionUser(), - jdbcConfiguration.getJdbcConnectionPassword()); - PreparedStatement preparedStatement = connection.prepareStatement(sql); - int result = preparedStatement.executeUpdate(); - return result; - } finally { - if (connection != null && !connection.isClosed()) { - connection.close(); - } - } + return new JdbcHelper(jdbcConfiguration).runUpdate(sql); } protected String readVersion(JdbcConfiguration jdbcConfiguration) throws Exception { -- 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 48b0242f7b572fc173cb9e8b17ad8143e9576258 Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Dec 17 12:49:44 2014 +0100 Fix build of topia flyway service --- pom.xml | 2 +- .../topia/it/mapping/test17/FixAno3280Test.java | 39 +--- .../persistence/TopiaConfigurationBuilder.java | 60 +---- .../persistence/jdbc/JdbcConfigurationBuilder.java | 243 +++++++++++++++++++++ .../topia/persistence/jdbc/JdbcH2Helper.java | 4 +- .../nuiton/topia/persistence/util/TopiaH2Util.java | 9 +- .../persistence/TopiaConfigurationBuilderTest.java | 13 +- .../TopiaServiceFlywayInitOnCreateSchemaTest.java | 104 +++------ .../src/test/resources/log4j.properties | 2 +- 9 files changed, 308 insertions(+), 168 deletions(-) diff --git a/pom.xml b/pom.xml index a6c4a22..fc60c8e 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ <module>topia-templates</module> <module>topia-it</module> <module>topia-service-replication</module> - <!--<module>topia-service-migration</module>--> + <module>topia-service-migration</module> <module>topia-service-flyway</module> <module>topia-service-liquibase</module> <module>topia-service-csv</module> diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java index 5a6f387..a93e81e 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test17/FixAno3280Test.java @@ -24,15 +24,12 @@ package org.nuiton.topia.it.mapping.test17; * #L% */ -import org.h2.Driver; import org.junit.Assert; import org.junit.Test; import org.nuiton.topia.it.mapping.AbstractMappingTest; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; import java.sql.SQLException; /** @@ -46,37 +43,13 @@ public class FixAno3280Test extends AbstractMappingTest { @Test public void testTablesExists() throws SQLException { - Assert.assertTrue("Could not find table A.A", isTableExist("A", "A")); - Assert.assertTrue("Could not find table B.B", isTableExist("B", "B")); - Assert.assertTrue("Could not find table B.BB17", isTableExist("B", "BB17")); - - } - - /** - * Tests if a given table exists. WARNING : this may not work is the tableName is not exactly the same. - * <p/> - * This method is designed for H2 only. - */ - // TODO brendan 12/12/14 move this generic code somewhere - public boolean isTableExist(String schema, String tableName) throws SQLException { - JdbcConfiguration configuration = db.getApplicationContext().getConfiguration(); + JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(configuration); + + Assert.assertTrue("Could not find table A.A", jdbcH2Helper.isTableExist("A")); + Assert.assertTrue("Could not find table B.B", jdbcH2Helper.isTableExist("B")); + Assert.assertTrue("Could not find table B.BB17", jdbcH2Helper.isTableExist("BB17")); - Connection connection = null; - try { - DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - configuration.getJdbcConnectionUrl(), - configuration.getJdbcConnectionUser(), - configuration.getJdbcConnectionPassword()); - ResultSet rset = connection.getMetaData().getTables(null, schema, tableName.toUpperCase(), null); - boolean result = rset.next(); - return result; - } finally { - if (connection != null && !connection.isClosed()) { - connection.close(); - } - } } } 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 8b05765..334f2f2 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,17 +1,13 @@ package org.nuiton.topia.persistence; -import com.google.common.base.Preconditions; -import com.google.common.base.StandardSystemProperty; -import com.google.common.io.Files; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; +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.IOException; import java.util.Collections; import java.util.Map; @@ -64,56 +60,18 @@ public class TopiaConfigurationBuilder { } } - public static ConfigureConnectionPoolingStep forPostgresqlDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { - return forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, "org.postgresql.Driver"); - } - - public static ConfigureConnectionPoolingStep forH2Database(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { - return forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, "org.h2.Driver"); - } - - public static ConfigureConnectionPoolingStep forH2Database(String jdbcConnectionUrl) { - return forH2Database(jdbcConnectionUrl, "sa", ""); - } - - public static ConfigureConnectionPoolingStep forH2Database(File file) { - String jdbcConnectionUrl = "jdbc:h2:file:" + file.getAbsolutePath(); - return forH2Database(jdbcConnectionUrl); - } - - public static ConfigureConnectionPoolingStep forH2DatabaseInTempDirectory() { - return forH2Database(Files.createTempDir()); - } - - public static ConfigureConnectionPoolingStep forInMemoryH2Database() { - throw new UnsupportedOperationException(); - } - - public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, String jdbcDriverClassName) { + public static ConfigureConnectionPoolingStep forDatabase(JdbcConfiguration jdbcConfiguration) { BeanTopiaConfiguration beanTopiaConfiguration = new BeanTopiaConfiguration(); - beanTopiaConfiguration.setJdbcConnectionUrl(jdbcConnectionUrl); - beanTopiaConfiguration.setJdbcConnectionUser(jdbcConnectionUser); - beanTopiaConfiguration.setJdbcConnectionPassword(jdbcConnectionPassword); - beanTopiaConfiguration.setJdbcDriverClassName(jdbcDriverClassName); + beanTopiaConfiguration.setJdbcConnectionUrl(jdbcConfiguration.getJdbcConnectionUrl()); + beanTopiaConfiguration.setJdbcConnectionUser(jdbcConfiguration.getJdbcConnectionUser()); + beanTopiaConfiguration.setJdbcConnectionPassword(jdbcConfiguration.getJdbcConnectionPassword()); + beanTopiaConfiguration.setJdbcDriverClassName(jdbcConfiguration.getJdbcDriverClassName()); return new ConfigureConnectionPoolingStep(beanTopiaConfiguration); } - protected static final String TIMESTAMP = String.valueOf(System.nanoTime()); - public static BeanTopiaConfiguration forTest(Class<?> testClass, String methodName) { - String javaIoTmpDir = StandardSystemProperty.JAVA_IO_TMPDIR.value(); - Preconditions.checkState(StringUtils.isNotBlank(javaIoTmpDir)); - File result = new File(javaIoTmpDir); - try { - FileUtil.createDirectoryIfNecessary(result); - } catch (IOException e) { - throw new TopiaException(e); - } - File file = new File(result, TIMESTAMP + File.separator + testClass.getName() + File.separator + methodName + File.separator + "h2"); - BeanTopiaConfiguration configuration = forH2Database(file).doNotUseConnectionPooling().dontTouchTheSchema().build(); - if (log.isDebugEnabled()) { - log.debug("will store H2 tests data in " + file.getAbsolutePath()); - } + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(testClass, methodName); + BeanTopiaConfiguration configuration = forDatabase(jdbcConfiguration).doNotUseConnectionPooling().dontTouchTheSchema().build(); return copyOf(configuration); } 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 new file mode 100644 index 0000000..d9320d8 --- /dev/null +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java @@ -0,0 +1,243 @@ +package org.nuiton.topia.persistence.jdbc; + +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.base.StandardSystemProperty; +import com.google.common.io.Files; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaException; +import org.nuiton.util.FileUtil; + +import java.io.File; +import java.io.IOException; + +/** + * + * org.flywaydb.core.internal.util.jdbc.DriverDataSource + * + */ +public class JdbcConfigurationBuilder { + + private static final Log log = LogFactory.getLog(JdbcConfigurationBuilder.class); + + 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; + } + + @Override + public String getJdbcDriverClassName() { + return jdbcDriverClassName; + } + }; + } + + public static JdbcConfiguration forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + String guessedJdbcDriverClassName = guessJdbcDriverClassName(jdbcConnectionUrl); + if (guessedJdbcDriverClassName == null) { + throw new UnsupportedOperationException("unable to guess JDBC driver class name for URL " + jdbcConnectionUrl); + } + return forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, guessedJdbcDriverClassName); + } + + public static JdbcConfiguration forPostgresqlDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + return forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, getPostgreSqlJdbcDriverClassName()); + } + + public static JdbcConfiguration forH2Database(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + return forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, getH2JdbcDriverClassName()); + } + + public static JdbcConfiguration forH2Database(String jdbcConnectionUrl) { + return forH2Database(jdbcConnectionUrl, "sa", ""); + } + + public static JdbcConfiguration forH2Database(File file) { + String jdbcConnectionUrl = "jdbc:h2:file:" + file.getAbsolutePath(); + return forH2Database(jdbcConnectionUrl); + } + + public static JdbcConfiguration forH2DatabaseInTempDirectory() { + return forH2Database(Files.createTempDir()); + } + + public static JdbcConfiguration forInMemoryH2Database() { + throw new UnsupportedOperationException(); + } + + public static String guessJdbcDriverClassName(String jdbcUrl) { + String guessedJdbcDriverClassName; + if (isDb2Url(jdbcUrl)) { + guessedJdbcDriverClassName = getDb2JdbcDriverClassName(); + } else if (isDerbyUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getDerbyJdbcDriverClassName(); + } else if (isH2Url(jdbcUrl)) { + guessedJdbcDriverClassName = getH2JdbcDriverClassName(); + } else if (isHsqlDbUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getHqlDbJdbcDriverClassName(); + } else if (isMysqlUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getMysqlJdbcDriverClassName(); + } else if (isMariaDbUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getMariaDbJdbcDriverClassName(); + } else if (isGoogleAppEngineUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getGooglaAppEngineJdbcDriverClassName(); + } else if (isOracleUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getOracleJdbcDriverClassName(); + } else if (isPostgreSqlUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getPostgreSqlJdbcDriverClassName(); + } else if (isJtdsUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getJdtsJdbcDriverClassName(); + } else if (isSqlServerUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getSqlServerJdbcDriverClassName(); + } else if (isSqliteUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getSqliteJdbcDriverClassName(); + } else if (isSqlDroidUrl(jdbcUrl)) { + guessedJdbcDriverClassName = getSqlDroidJdbcDriverClassName(); + } else { + guessedJdbcDriverClassName = null; + } + return guessedJdbcDriverClassName; + } + + public static String getDb2JdbcDriverClassName() { + return "com.ibm.db2.jcc.DB2Driver"; + } + + public static String getDerbyJdbcDriverClassName() { + return "org.apache.derby.jdbc.EmbeddedDriver"; + } + + public static String getH2JdbcDriverClassName() { + return "org.h2.Driver"; + } + + public static String getHqlDbJdbcDriverClassName() { + return "org.hsqldb.jdbcDriver"; + } + + public static String getMysqlJdbcDriverClassName() { + return "com.mysql.jdbc.Driver"; + } + + public static String getOracleJdbcDriverClassName() { + return "oracle.jdbc.OracleDriver"; + } + + public static String getGooglaAppEngineJdbcDriverClassName() { + return "com.google.appengine.api.rdbms.AppEngineDriver"; + } + + public static String getMariaDbJdbcDriverClassName() { + return "org.mariadb.jdbc.Driver"; + } + + public static String getPostgreSqlJdbcDriverClassName() { + return "org.postgresql.Driver"; + } + + public static String getJdtsJdbcDriverClassName() { + return "net.sourceforge.jtds.jdbc.Driver"; + } + + public static String getSqlServerJdbcDriverClassName() { + return "com.microsoft.sqlserver.jdbc.SQLServerDriver"; + } + + public static String getSqliteJdbcDriverClassName() { + return "org.sqlite.JDBC"; + } + + public static String getSqlDroidJdbcDriverClassName() { + return "org.sqldroid.SQLDroidDriver"; + } + + public static boolean isDb2Url(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:db2:"); + } + + public static boolean isSqlDroidUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:sqldroid:"); + } + + public static boolean isSqliteUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:sqlite:"); + } + + public static boolean isSqlServerUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:sqlserver:"); + } + + public static boolean isJtdsUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:jtds:"); + } + + public static boolean isPostgreSqlUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:postgresql:"); + } + + public static boolean isOracleUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:oracle:"); + } + + public static boolean isGoogleAppEngineUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:google:"); + } + + public static boolean isMariaDbUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:mariadb:"); + } + + public static boolean isMysqlUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:mysql:"); + } + + public static boolean isHsqlDbUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:hsqldb:"); + } + + public static boolean isH2Url(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:h2:"); + } + + public static boolean isDerbyUrl(String jdbcUrl) { + return jdbcUrl.startsWith("jdbc:derby:"); + } + + public static JdbcConfiguration forTest(Class<?> testClass, String methodName) { + String javaIoTmpDir = StandardSystemProperty.JAVA_IO_TMPDIR.value(); + Preconditions.checkState( + StringUtils.isNotBlank(javaIoTmpDir), + "'" + StandardSystemProperty.JAVA_IO_TMPDIR.key() + "' is not defined in environment" + ); + File tempDirectoryFile = new File(javaIoTmpDir); + try { + FileUtil.createDirectoryIfNecessary(tempDirectoryFile); + } catch (IOException e) { + throw new TopiaException(e); + } + String path = Joiner.on(File.separator).join(TIMESTAMP, testClass.getName(), methodName, "h2"); + File file = new File(tempDirectoryFile, path); + JdbcConfiguration jdbcConfiguration = forH2Database(file); + if (log.isDebugEnabled()) { + log.debug("will store H2 tests data in " + jdbcConfiguration.getJdbcConnectionUrl()); + } + return jdbcConfiguration; + } +} diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java index 10e11a0..8b5c875 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcH2Helper.java @@ -15,7 +15,9 @@ public class JdbcH2Helper extends JdbcHelper { ResultSet resultSet = null; try { connection = openConnection(); - resultSet = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null); + resultSet = connection.getMetaData().getTables(null, null, tableName, null); +// resultSet = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null); +// resultSet = connection.getMetaData().getTables(null, null, null, null); boolean result = resultSet.next(); return result; } catch (SQLException e) { diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaH2Util.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaH2Util.java index 2208c85..323703e 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaH2Util.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaH2Util.java @@ -24,19 +24,20 @@ package org.nuiton.topia.persistence.util; * #L% */ +import org.nuiton.topia.persistence.TopiaException; +import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; +import org.nuiton.topia.persistence.support.TopiaSqlSupport; + import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.zip.GZIPInputStream; -import org.nuiton.topia.persistence.TopiaException; -import org.nuiton.topia.persistence.support.TopiaSqlSupport; -import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; - /** * @author Arnaud Thimel (Code Lutin) */ +// TODO brendan 16/12/14 move public class TopiaH2Util { protected TopiaFiresSupport firesSupport; 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 8e6ece6..bb4c5c9 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,14 +2,18 @@ package org.nuiton.topia.persistence; import org.junit.Assert; import org.junit.Test; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; public class TopiaConfigurationBuilderTest { @Test public void build() { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(getClass(), "build"); + TopiaConfiguration topiaConfiguration = - TopiaConfigurationBuilder.forH2DatabaseInTempDirectory() + TopiaConfigurationBuilder.forDatabase(jdbcConfiguration) .doNotUseConnectionPooling() .useHibernateUpdate() .build(); @@ -17,4 +21,11 @@ public class TopiaConfigurationBuilderTest { Assert.assertTrue("any generated topia configuration must have initSchema to true", topiaConfiguration.isInitSchema()); } + + @Test + public void forTest() { + + TopiaConfigurationBuilder.forTest(getClass(), "forTest"); + + } } \ No newline at end of file diff --git a/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java b/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java index f4ce7d4..bd08009 100644 --- a/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java +++ b/topia-service-flyway/src/test/java/org/nuiton/topia/flyway/TopiaServiceFlywayInitOnCreateSchemaTest.java @@ -25,7 +25,6 @@ package org.nuiton.topia.flyway; import com.google.common.collect.ImmutableMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.h2.Driver; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; @@ -33,12 +32,7 @@ import org.nuiton.topia.it.TopiaSchemaHelper; import org.nuiton.topia.it.mapping.TopiaItMappingTopiaApplicationContext; import org.nuiton.topia.persistence.BeanTopiaConfiguration; import org.nuiton.topia.persistence.TopiaConfigurationBuilder; -import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; +import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; /** * @author Arnaud Thimel (Code Lutin) @@ -48,79 +42,35 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { private static final Log log = LogFactory.getLog(TopiaServiceFlywayInitOnCreateSchemaTest.class); /** - * Tests if a given table exists. WARNING : this may not work is the tableName is not exactly the same. - * <p/> - * This method is designed for H2 only. + * SQL query to read the highest version in flyway schema_version table. + * + * Be careful, H2 is case sensitive and Flyway uses double quotes (") in table/column names */ - protected boolean isTableExist(JdbcConfiguration config, String tableName) throws Exception { - Connection connection = null; - try { - DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - config.getJdbcConnectionUrl(), - config.getJdbcConnectionUser(), - config.getJdbcConnectionPassword()); - - boolean result = connection.getMetaData().getTables(null, null, tableName.toUpperCase(), null).next() || - connection.getMetaData().getTables(null, null, tableName.toLowerCase(), null).next() || - connection.getMetaData().getTables(null, null, tableName, null).next(); - return result; - } finally { - if (connection != null && !connection.isClosed()) { - connection.close(); - } - } - } - - protected String runSelectOnString(JdbcConfiguration config, String sql) throws Exception { - Connection connection = null; - try { - DriverManager.registerDriver(new Driver()); - connection = DriverManager.getConnection( - config.getJdbcConnectionUrl(), - config.getJdbcConnectionUser(), - config.getJdbcConnectionPassword()); - PreparedStatement preparedStatement = connection.prepareStatement(sql); - ResultSet resultSet = preparedStatement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getString(1); - } - return null; - } finally { - if (connection != null && !connection.isClosed()) { - connection.close(); - } - } - } - - protected String readVersion(JdbcConfiguration config) throws Exception { - // Be careful, H2 is case sensitive and Flyway uses double quotes (") in table/column names - return runSelectOnString(config, " SELECT MAX(\"version\") FROM \"PUBLIC\".\"schema_version\" "); - } + protected static final String READ_LAST_VERSION_IN_SCHEMA_VERSION_SQL = " SELECT MAX(\"version\") FROM \"PUBLIC\".\"schema_version\" "; @Test public void testInitWithUseModelVersion() throws Exception { BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithUseModelVersion"); - config.addDeclaredService("migration", TopiaFlywayServiceImpl.class.getName(), ImmutableMap.of(TopiaFlywayService.USE_MODEL_VERSION, "true")); - Assert.assertFalse(isTableExist(config, "schema_version")); - Assert.assertFalse(isTableExist(config, "a6")); + JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(config); + + Assert.assertFalse(jdbcH2Helper.isTableExist("schema_version")); + Assert.assertFalse(jdbcH2Helper.isTableExist("A6")); TopiaSchemaHelper.createMappingDataBaseSchemas(config); // new application context will init database schema because of topia.persistence.initSchema=true TopiaItMappingTopiaApplicationContext applicationContext = new TopiaItMappingTopiaApplicationContext(config); - Assert.assertTrue(isTableExist(config, "schema_version")); - Assert.assertTrue(isTableExist(config, "a6")); + Assert.assertTrue(jdbcH2Helper.isTableExist("schema_version")); + Assert.assertTrue(jdbcH2Helper.isTableExist("A6")); applicationContext.close(); // Schema has been created, schema_version should contains the model's version - String actual = readVersion(config); + String actual = jdbcH2Helper.runSelectOnString(READ_LAST_VERSION_IN_SCHEMA_VERSION_SQL); Assert.assertEquals("1.0.5", actual); } @@ -129,26 +79,27 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { public void testInitWithoutUseModelVersion() throws Exception { BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithoutUseModelVersion"); - config.addDeclaredService("migration", TopiaFlywayServiceImpl.class.getName(), ImmutableMap.of(TopiaFlywayService.USE_MODEL_VERSION, "false")); - Assert.assertFalse(isTableExist(config, "schema_version")); - Assert.assertFalse(isTableExist(config, "a6")); + JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(config); + + Assert.assertFalse(jdbcH2Helper.isTableExist("schema_version")); + Assert.assertFalse(jdbcH2Helper.isTableExist("A6")); TopiaSchemaHelper.createMappingDataBaseSchemas(config); // new application context will init database schema because of topia.persistence.initSchema=true TopiaItMappingTopiaApplicationContext applicationContext = new TopiaItMappingTopiaApplicationContext(config); - Assert.assertTrue(isTableExist(config, "schema_version")); - Assert.assertTrue(isTableExist(config, "a6")); - - applicationContext.close(); + Assert.assertTrue(jdbcH2Helper.isTableExist("schema_version")); + Assert.assertTrue(jdbcH2Helper.isTableExist("A6")); // Schema has been created, schema_version should contains the latest migration script version - String actual = readVersion(config); + String actual = jdbcH2Helper.runSelectOnString(READ_LAST_VERSION_IN_SCHEMA_VERSION_SQL); Assert.assertEquals("1.2.3.4", actual); + applicationContext.close(); + } @Test @@ -156,7 +107,6 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { public void testInitWithFlywayInitVersion() throws Exception { BeanTopiaConfiguration config = TopiaConfigurationBuilder.forTest(getClass(), "testInitWithFlywayInitVersion"); - config.addDeclaredService( "migration", TopiaFlywayServiceImpl.class.getName(), @@ -165,21 +115,23 @@ public class TopiaServiceFlywayInitOnCreateSchemaTest { TopiaFlywayService.FLYWAY_INIT_VERSION, "1.2.42" )); - Assert.assertFalse(isTableExist(config, "schema_version")); - Assert.assertFalse(isTableExist(config, "a6")); + JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(config); + + Assert.assertFalse(jdbcH2Helper.isTableExist("schema_version")); + Assert.assertFalse(jdbcH2Helper.isTableExist("A6")); TopiaSchemaHelper.createMappingDataBaseSchemas(config); // new application context will init database schema because of topia.persistence.initSchema=true TopiaItMappingTopiaApplicationContext applicationContext = new TopiaItMappingTopiaApplicationContext(config); - Assert.assertTrue(isTableExist(config, "schema_version")); - Assert.assertTrue(isTableExist(config, "a6")); + Assert.assertTrue(jdbcH2Helper.isTableExist("schema_version")); + Assert.assertTrue(jdbcH2Helper.isTableExist("A6")); applicationContext.close(); // Schema has been created, schema_version should contains the model's version - String actual = readVersion(config); + String actual = jdbcH2Helper.runSelectOnString(READ_LAST_VERSION_IN_SCHEMA_VERSION_SQL); Assert.assertEquals("1.2.42", actual); } diff --git a/topia-service-flyway/src/test/resources/log4j.properties b/topia-service-flyway/src/test/resources/log4j.properties index ad74f37..8bf849c 100644 --- a/topia-service-flyway/src/test/resources/log4j.properties +++ b/topia-service-flyway/src/test/resources/log4j.properties @@ -27,7 +27,7 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n # package level -log4j.logger.org.nuiton.topia=INFO +log4j.logger.org.nuiton.topia=TRACE #log4j.logger.org.nuiton.topia.migration=DEBUG #log4j.logger.org.flywaydb.core.internal.dbsupport.SqlScript=DEBUG -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm