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>.