branch feature/2892 updated (3e5ee7d -> 9d93f47)
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 3e5ee7d Deprecate TopiaH2Util and move API to JdbcH2Helper new 582cfed refs #2892 Delegate methods from JdbcConfigurationBuilder to TopiaConfigurationBuilder new 9d93f47 refs #2892 Fix TopiaConnectionProviderTest The 2 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 9d93f47211fbd13f4cca02c09456dde1a7028ff2 Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Jan 16 18:08:16 2015 +0100 refs #2892 Fix TopiaConnectionProviderTest commit 582cfed0a4734d525596dfdb12c1c08a35883bda Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Jan 16 16:59:06 2015 +0100 refs #2892 Delegate methods from JdbcConfigurationBuilder to TopiaConfigurationBuilder Summary of changes: .../TopiaConnectionProviderHardCoded.java | 3 +- .../framework/TopiaConnectionProviderTest.java | 175 +++++++++++---------- .../TopiaConnectionProviderHardcoded.properties | 34 ---- .../persistence/TopiaConfigurationBuilder.java | 63 ++++++++ .../persistence/jdbc/JdbcConfigurationBuilder.java | 46 +++--- .../persistence/TopiaConfigurationBuilderTest.java | 4 +- 6 files changed, 177 insertions(+), 148 deletions(-) delete mode 100644 topia-it/src/test/resources/TopiaConnectionProviderHardcoded.properties -- 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 582cfed0a4734d525596dfdb12c1c08a35883bda Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Jan 16 16:59:06 2015 +0100 refs #2892 Delegate methods from JdbcConfigurationBuilder to TopiaConfigurationBuilder --- .../persistence/TopiaConfigurationBuilder.java | 63 ++++++++++++++++++++++ .../persistence/jdbc/JdbcConfigurationBuilder.java | 46 ++++++++-------- .../persistence/TopiaConfigurationBuilderTest.java | 4 +- 3 files changed, 86 insertions(+), 27 deletions(-) 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 985c4bb..97398ed 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 @@ -3,6 +3,7 @@ package org.nuiton.topia.persistence; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; + import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -16,11 +17,17 @@ import org.nuiton.util.beans.BinderFactory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.sql.Driver; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; +/** + * Builder to create a {@link org.nuiton.topia.persistence.TopiaConfiguration} instance. + * <p/> + * A few methods from {@link org.nuiton.topia.persistence.jdbc.JdbcConfiguration} are delegated here. + */ public class TopiaConfigurationBuilder { private static final Log log = LogFactory.getLog(TopiaConfigurationBuilder.class); @@ -349,4 +356,60 @@ public class TopiaConfigurationBuilder { return TopiaConfigurationBuilder.toMap(beanTopiaConfiguration); } } + + + + /* + * A few methods thah delegates to JdbcConfigurationBuilder + */ + + public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, String jdbcDriverClassName) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, jdbcDriverClassName); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword, Class<? extends Driver> jdbcDriverClass) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword, jdbcDriverClass); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forPostgresqlDatabase(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forPostgresqlDatabase(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forH2Database(String jdbcConnectionUrl, String jdbcConnectionUser, String jdbcConnectionPassword) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2Database(jdbcConnectionUrl, jdbcConnectionUser, jdbcConnectionPassword); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forH2Database(String jdbcConnectionUrl) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2Database(jdbcConnectionUrl); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forH2Database(File file) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2Database(file); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forH2DatabaseInTempDirectory() { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forH2DatabaseInTempDirectory(); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forInMemoryH2Database() { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forInMemoryH2Database(); + return forDatabase(jdbcConfiguration); + } + + public static ConfigureConnectionPoolingStep forTestDatabase(Class<?> testClass, String methodName) { + JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(testClass, methodName); + return forDatabase(jdbcConfiguration); + } } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcConfigurationBuilder.java index 6cde698..ca2fe45 100644 --- 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 @@ -15,9 +15,7 @@ import java.io.IOException; import java.sql.Driver; /** - * - * org.flywaydb.core.internal.util.jdbc.DriverDataSource - * + * Builder to create a {@link org.nuiton.topia.persistence.jdbc.JdbcConfiguration} instance */ public class JdbcConfigurationBuilder { @@ -80,6 +78,27 @@ public class JdbcConfigurationBuilder { throw new UnsupportedOperationException(); } + 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; + } + public static String guessJdbcDriverClassName(String jdbcUrl) { String guessedJdbcDriverClassName; if (isDb2Url(jdbcUrl)) { @@ -217,25 +236,4 @@ public class JdbcConfigurationBuilder { 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/test/java/org/nuiton/topia/persistence/TopiaConfigurationBuilderTest.java b/topia-persistence/src/test/java/org/nuiton/topia/persistence/TopiaConfigurationBuilderTest.java index 9dc4018..dcae9bc 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 @@ -45,10 +45,8 @@ public class TopiaConfigurationBuilderTest { @Test public void build() { - JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forTest(getClass(), "build"); - TopiaConfiguration topiaConfiguration = - TopiaConfigurationBuilder.forDatabase(jdbcConfiguration) + TopiaConfigurationBuilder.forTestDatabase(getClass(), "build") .doNotUseConnectionPooling() .useHibernateUpdate() .build(); -- 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 9d93f47211fbd13f4cca02c09456dde1a7028ff2 Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Jan 16 18:08:16 2015 +0100 refs #2892 Fix TopiaConnectionProviderTest --- .../TopiaConnectionProviderHardCoded.java | 3 +- .../framework/TopiaConnectionProviderTest.java | 175 +++++++++++---------- .../TopiaConnectionProviderHardcoded.properties | 34 ---- 3 files changed, 91 insertions(+), 121 deletions(-) diff --git a/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderHardCoded.java b/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderHardCoded.java index 73d25c3..85fda3a 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderHardCoded.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderHardCoded.java @@ -46,7 +46,8 @@ import java.util.Map; import java.util.Properties; /** - * Customized connection provider. + * Customized connection provider. It will not use the JDBC URL provided by Hibernate, but the one from + * {@link TopiaConnectionProviderTest#TEST_URL}. * * @author Tony Chemit - chemit@codelutin.com * @since 2.5.3 diff --git a/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderTest.java b/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderTest.java index b6aa977..5d92169 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/legacy/framework/TopiaConnectionProviderTest.java @@ -24,6 +24,24 @@ package org.nuiton.topia.it.legacy.framework; * #L% */ +import java.io.File; +import java.util.Locale; +import java.util.Map; + +import org.hibernate.cfg.AvailableSettings; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.nuiton.topia.it.legacy.TopiaItLegacyDatabase; +import org.nuiton.topia.it.legacy.TopiaItLegacyTopiaApplicationContext; +import org.nuiton.topia.it.legacy.TopiaItLegacyTopiaPersistenceContext; +import org.nuiton.topia.it.legacy.test.entities.Person; +import org.nuiton.topia.it.legacy.test.entities.PersonTopiaDao; +import org.nuiton.topia.it.legacy.topiatest.Personne; +import org.nuiton.topia.persistence.BeanTopiaConfiguration; +import org.nuiton.topia.persistence.TopiaConfiguration; +import org.nuiton.topia.persistence.TopiaConfigurationBuilder; +import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.internal.TopiaConnectionProvider; /** @@ -35,90 +53,75 @@ import org.nuiton.topia.persistence.internal.TopiaConnectionProvider; */ public class TopiaConnectionProviderTest { -//// private static final Log log = -//// LogFactory.getLog(TopiaConnectionProviderTest.class); -// - public static final String TEST_URL = "testURL"; -// -// @Rule -// public final TopiaItLegacyDatabase db = -// new TopiaItLegacyDatabase("/TopiaConnectionProviderHardcoded.properties") { -// -// @Override -// protected void onDbConfigurationCreate(Properties configuration, -// File testdir, -// String dbPath) { -// -// Assert.assertFalse(testdir.exists()); -// -// String dbPathFake = new File(testdir, "fake" + File.separator + "db").getAbsolutePath(); -// -// Assert.assertFalse(new File(dbPathFake).getParentFile().exists()); -// -// configuration.setProperty("dbPath", dbPath); -// configuration.setProperty("dbPathFake", dbPathFake); -// -// // give the path where connection provider will create db -// configuration.setProperty(TEST_URL, -// "jdbc:h2:file:" + dbPath); -// -// // give a fake db path (we will make sure it is never create after hibernate usage). -// configuration.setProperty(TopiaConfigurationConstants.CONFIG_URL, -// "jdbc:h2:file:" + dbPathFake); -// } -// }; -// -// @Test -// public void testWithHardcoded() throws Exception { -// -//// Properties dbProperties = TestHelper.loadHibernateConfiguration( -//// "/TopiaConnectionProviderHardcoded.properties"); -//// -//// File directory = new File(TestHelper.getDbName(testBasedir, "testWithHardcoded")); -// -// String dbPath = (String) db.getDbConfiguration().get("dbPath"); -// String dbPathFake = (String) db.getDbConfiguration().get("dbPathFake"); -// -//// new File(directory, "real" + File.separator + "db").getAbsolutePath(); -//// Assert.assertFalse(new File(dbPath).getParentFile().exists()); -// -//// String dbPathFake = new File(directory, "fake" + File.separator + "db").getAbsolutePath(); -// -//// Assert.assertFalse(new File(dbPathFake).getParentFile().exists()); -// -//// // give the path where connection provider will create db -//// dbProperties.setProperty(TEST_URL, "jdbc:h2:file:" + dbPath); -//// -//// // give a fake db path (we will make sure it is never create after hibernate usage). -//// dbProperties.setProperty(Environment.URL, "jdbc:h2:file:" + dbPathFake); -//// -//// root = TopiaContextFactory.getContext(dbProperties); -// -// Locale.setDefault(Locale.FRANCE); -// -// doStuffOnDb(); -// -// // the db file must have been created -// Assert.assertTrue(new File(dbPath).getParentFile().exists()); -// -// // make sure the fake db path was never used -// Assert.assertFalse(new File(dbPathFake).getParentFile().exists()); -// } -// -// private void doStuffOnDb() throws TopiaException { -// TopiaItLegacyTopiaPersistenceContext transaction = db.newPersistenceContext(); -// -// try { -// PersonTopiaDao dao = transaction.getPersonDao(); -// -// Person personne = dao.create(Personne.PROPERTY_NAME, "Jack Bauer"); -// transaction.commit(); -// String idPersonne = personne.getTopiaId(); -// assertNotNull(idPersonne); -// -// transaction.commit(); -// } finally { -// transaction.close(); -// } -// } + public static final String TEST_URL = "hibernate.taiste.testURL"; + + @Rule + public final TopiaItLegacyDatabase db = + new TopiaItLegacyDatabase() { + @Override + protected TopiaItLegacyTopiaApplicationContext createApplicationContext(TopiaConfiguration topiaConfiguration) { + + BeanTopiaConfiguration configuration = TopiaConfigurationBuilder.copyOf(topiaConfiguration); + + Map<String, String> extraConf = configuration.getHibernateExtraConfiguration(); + + // Declare an alternative connection provider. This connection provider will use a different DB path + extraConf.put(AvailableSettings.CONNECTION_PROVIDER, TopiaConnectionProviderHardCoded.class.getName()); + + String tmpdir = System.getProperty("java.io.tmpdir"); + File testDir = new File(tmpdir, String.valueOf(Math.random())); + + // Real DB Path is where the DB will be created + File realFileDir = new File(testDir, "real"); + String realDbPath = new File(realFileDir,"db").getAbsolutePath(); + extraConf.put("hibernate.taiste.realDbPath", realDbPath); + + // Fake DB Path is where the DB would have been created by the classic connection provider + File fakeFileDir = new File(testDir, "fake"); + String fakeDbPath = new File(fakeFileDir, "db").getAbsolutePath(); + extraConf.put("hibernate.taiste.fakeDbPath", fakeDbPath); + + // The custom connection provider will use another JDBC URL than the expected one for Hibernate + extraConf.put(TEST_URL, "jdbc:h2:file:" + realDbPath); + // Let Hibernate believe that this is the good db path + configuration.setJdbcConnectionUrl("jdbc:h2:file:" + fakeDbPath); + + return super.createApplicationContext(configuration); + } + }; + + @Test + public void testWithHardcoded() throws Exception { + + Map<String, String> hibernateExtraConfiguration = db.getApplicationContext().getConfiguration().getHibernateExtraConfiguration(); + String realDbPath = hibernateExtraConfiguration.get("hibernate.taiste.realDbPath"); + String fakeDbPath = hibernateExtraConfiguration.get("hibernate.taiste.fakeDbPath"); + + Locale.setDefault(Locale.FRANCE); + + doStuffOnDb(); + + // the db file must have been created (the one created by our hardcoded connection provider) + Assert.assertTrue(new File(realDbPath).getParentFile().exists()); + + // make sure the fake db path was never used (the one Hibernate may have created) + Assert.assertFalse(new File(fakeDbPath).getParentFile().exists()); + } + + private void doStuffOnDb() throws TopiaException { + TopiaItLegacyTopiaPersistenceContext transaction = db.newPersistenceContext(); + + try { + PersonTopiaDao dao = transaction.getPersonDao(); + + Person personne = dao.create(Personne.PROPERTY_NAME, "Jack Bauer"); + transaction.commit(); + String idPersonne = personne.getTopiaId(); + Assert.assertNotNull(idPersonne); + + transaction.commit(); + } finally { + transaction.close(); + } + } } diff --git a/topia-it/src/test/resources/TopiaConnectionProviderHardcoded.properties b/topia-it/src/test/resources/TopiaConnectionProviderHardcoded.properties deleted file mode 100644 index b40c953..0000000 --- a/topia-it/src/test/resources/TopiaConnectionProviderHardcoded.properties +++ /dev/null @@ -1,34 +0,0 @@ -### -# #%L -# ToPIA :: IT -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2004 - 2014 CodeLutin -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Lesser Public License for more details. -# -# You should have received a copy of the GNU General Lesser Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/lgpl-3.0.html>. -# #L% -### -# Proprietes par defaut pour une base de donnees de type H2 -hibernate.hbm2ddl.auto=update -hibernate.show_sql=false - -hibernate.dialect=org.hibernate.dialect.H2Dialect -hibernate.connection.username=sa -hibernate.connection.password= -hibernate.connection.driver_class=org.h2.Driver -hibernate.connection.provider_class=org.nuiton.topia.it.legacy.framework.TopiaConnectionProviderHardCoded -# tchemit 2010-11-28 : comment this line, each test must define his own db path -#hibernate.connection.url=jdbc:h2:file:target/surefire-workdir/h2data -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm