branch feature/2892 updated (cd45d60 -> 3a3b569)
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 cd45d60 Move configuration in properties reading in builder, refactor BeanTopiaConfiguration to extends BeanJdbcConfiguration new 9134582 Deprecate everything in TopiaConfigurationConstants new e9195eb Introduce HibernateAvailableSettings new 2e409ec Implements a method to convert TopiaConfiguration to Map new 3a3b569 Convention on builders The 4 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 3a3b5698b7cf405fa1a0938e62fbba7f9a74223c Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 17:57:05 2014 +0100 Convention on builders commit 2e409ec1393b69da6307beac1397c5afc54a4abb Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 17:48:55 2014 +0100 Implements a method to convert TopiaConfiguration to Map commit e9195ebcd86a220360230878f2eaf5edb89a46a0 Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 17:12:28 2014 +0100 Introduce HibernateAvailableSettings commit 9134582a63aaf3382c757ff015731e1f70dedcbf Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 16:52:40 2014 +0100 Deprecate everything in TopiaConfigurationConstants Summary of changes: .../persistence/HibernateAvailableSettings.java | 14 +++ .../persistence/TopiaApplicationContextCache.java | 15 ++- .../topia/persistence/TopiaConfiguration.java | 32 +++++- .../persistence/TopiaConfigurationBuilder.java | 100 ++++++++++++++--- .../persistence/TopiaConfigurationConstants.java | 122 ++++++++++++++------- .../nuiton/topia/persistence/TopiaIdFactory.java | 4 +- .../persistence/internal/HibernateProvider.java | 3 +- .../nuiton/topia/persistence/util/TopiaUtil.java | 37 +++---- .../persistence/TopiaConfigurationBuilderTest.java | 63 ++++++++--- .../topia/migration/TopiaMigrationEngine.java | 4 +- .../topia/migration/TopiaMigrationService.java | 2 +- 11 files changed, 286 insertions(+), 110 deletions(-) create mode 100644 topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.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 9134582a63aaf3382c757ff015731e1f70dedcbf Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 16:52:40 2014 +0100 Deprecate everything in TopiaConfigurationConstants --- .../persistence/TopiaApplicationContextCache.java | 15 ++-- .../topia/persistence/TopiaConfiguration.java | 13 ++++ .../persistence/TopiaConfigurationBuilder.java | 52 ++++++++++--- .../persistence/TopiaConfigurationConstants.java | 87 ++++++++++++---------- .../nuiton/topia/persistence/TopiaIdFactory.java | 4 +- .../persistence/internal/HibernateProvider.java | 3 +- .../nuiton/topia/persistence/util/TopiaUtil.java | 37 +++++---- .../topia/migration/TopiaMigrationEngine.java | 4 +- .../topia/migration/TopiaMigrationService.java | 2 +- 9 files changed, 132 insertions(+), 85 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContextCache.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContextCache.java index d872e9a..931a5cc 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContextCache.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContextCache.java @@ -24,18 +24,17 @@ package org.nuiton.topia.persistence; * #L% */ -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; - +import com.google.common.base.Function; +import com.google.common.collect.Lists; import org.apache.commons.collections4.map.AbstractReferenceMap; import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import com.google.common.base.Function; -import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; /** * <p>This class will provide a TopiaApplicationContext cache. Its usage is not necessary, contexts can be directly @@ -105,7 +104,7 @@ public class TopiaApplicationContextCache { public static List<String> getRegisteredContextUrls() { List<String> result = Lists.newArrayList(); for (Properties e : contextCache.keySet()) { - result.add(e.getProperty(TopiaConfigurationConstants.CONFIG_URL)); + result.add(e.getProperty(TopiaConfigurationBuilder.CONFIG_URL)); } return result; } 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 7a85cc9..5005c0d 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 @@ -11,8 +11,21 @@ import java.util.Map; */ public interface TopiaConfiguration extends JdbcConfiguration { + /** + * You can set it to false if you don't want Topia to deal with the schema (you keep it + * up to date with your own sql file). + * + * @since 3.0 + */ boolean isInitSchema(); + /** + * Configuration directive to change topia Ids generation strategy. + * <p/> + * Expected value is an FQN to a class which implements {@link org.nuiton.topia.persistence.TopiaIdFactory} + * + * @since 3.0 + */ String getTopiaIdFactoryClassName(); String getSchemaName(); 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 dbb9e1c..4e87d75 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 @@ -2,11 +2,13 @@ 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; import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.AvailableSettings; +import org.hibernate.cfg.Environment; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; import org.nuiton.util.beans.Binder; @@ -26,6 +28,34 @@ public class TopiaConfigurationBuilder { protected static final String TOPIA_SERVICE_CONFIGURATION_PREFIX = "topia.service."; + protected static final String CONFIG_DEFAULT_SCHEMA = Environment.DEFAULT_SCHEMA; + + protected static final String CONFIG_USER = AvailableSettings.USER; + + protected static final String CONFIG_PASS = AvailableSettings.PASS; + + protected static final String CONFIG_DRIVER = AvailableSettings.DRIVER; + + protected static final String CONFIG_URL = AvailableSettings.URL; + + protected static final String CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME = + "topia.persistence.topiaIdFactoryClassName"; + + protected static final String CONFIG_PERSISTENCE_INIT_SCHEMA = + "topia.persistence.initSchema"; + + /** + * Configuration that must not be in {@link TopiaConfiguration#getHibernateExtraConfiguration()}. + */ + protected static final ImmutableSet<String> MAIN_CONFIGURATION = ImmutableSet.of( + CONFIG_DRIVER, + CONFIG_URL, + CONFIG_USER, + CONFIG_PASS, + AvailableSettings.C3P0_MIN_SIZE, + AvailableSettings.C3P0_MAX_SIZE + ); + /** * Do nothing but throws {@link TopiaMisconfigurationException} if there is a problem in * given configuration. @@ -49,15 +79,15 @@ public class TopiaConfigurationBuilder { } } Map<String, String> hibernateExtraConfiguration = topiaConfiguration.getHibernateExtraConfiguration(); - if (hibernateExtraConfiguration.containsKey(TopiaConfigurationConstants.CONFIG_HBM2DDL_AUTO)) { - throw new TopiaMisconfigurationException("you must not use " + TopiaConfigurationConstants.CONFIG_HBM2DDL_AUTO + if (hibernateExtraConfiguration.containsKey(Environment.HBM2DDL_AUTO)) { + throw new TopiaMisconfigurationException("you must not use " + Environment.HBM2DDL_AUTO + " configuration directive, if you want Hibernate to update the schema, use " + HibernateTopiaMigrationService.class.getName(), topiaConfiguration); } for (Map.Entry<String, String> entry : hibernateExtraConfiguration.entrySet()) { String key = entry.getKey(); boolean entryIsOk = key.startsWith("hibernate.") - && ! TopiaConfigurationConstants.MAIN_CONFIGURATION.contains(key); + && ! MAIN_CONFIGURATION.contains(key); if ( ! entryIsOk) { throw new TopiaMisconfigurationException("hibernate extra configuration is " + hibernateExtraConfiguration + @@ -87,16 +117,16 @@ public class TopiaConfigurationBuilder { public static BeanTopiaConfiguration readMap(Map<String, String> configuration) { // JDBC connection - String url = configuration.get(TopiaConfigurationConstants.CONFIG_URL); - String user = configuration.get(TopiaConfigurationConstants.CONFIG_USER); - String password = configuration.get(TopiaConfigurationConstants.CONFIG_PASS); - String driverName = configuration.get(TopiaConfigurationConstants.CONFIG_DRIVER); + String url = configuration.get(CONFIG_URL); + String user = configuration.get(CONFIG_USER); + String password = configuration.get(CONFIG_PASS); + String driverName = configuration.get(CONFIG_DRIVER); JdbcConfiguration jdbcConfiguration = JdbcConfigurationBuilder.forDatabase(url, user, password, driverName); BeanTopiaConfiguration result = new BeanTopiaConfiguration(jdbcConfiguration); // Schema initialization - String initSchemaConfigValue = configuration.get(TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA); + String initSchemaConfigValue = configuration.get(CONFIG_PERSISTENCE_INIT_SCHEMA); boolean initSchema = StringUtils.isBlank(initSchemaConfigValue) || Boolean.parseBoolean(initSchemaConfigValue); result.setInitSchema(initSchema); @@ -113,14 +143,14 @@ public class TopiaConfigurationBuilder { } // others - result.setTopiaIdFactoryClassName(configuration.get(TopiaConfigurationConstants.CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME)); - result.setSchemaName(configuration.get(TopiaConfigurationConstants.CONFIG_DEFAULT_SCHEMA)); + result.setTopiaIdFactoryClassName(configuration.get(CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME)); + result.setSchemaName(configuration.get(CONFIG_DEFAULT_SCHEMA)); // Hibernate for (Map.Entry<String, String> entry : configuration.entrySet()) { String key = entry.getKey(); boolean keyMustBeIncludedInHibernateExtraConfiguration = - !TopiaConfigurationConstants.MAIN_CONFIGURATION.contains(key) + !MAIN_CONFIGURATION.contains(key) && key.startsWith("hibernate."); if (keyMustBeIncludedInHibernateExtraConfiguration) { result.getHibernateExtraConfiguration().put(key, entry.getValue()); diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java index 1f5f5ad..6217f48 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java @@ -24,7 +24,6 @@ package org.nuiton.topia.persistence; * #L% */ -import com.google.common.collect.ImmutableSet; import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.Environment; @@ -35,64 +34,76 @@ import org.hibernate.cfg.Environment; * * @author Tony Chemit - chemit@codelutin.com * @since 3.0 + * @deprecated if you want to dynamically create configuration through Java, use {@link org.nuiton.topia.persistence.TopiaConfigurationBuilder}, + * if you need Hibernate constants, use {@link org.hibernate.cfg.AvailableSettings} */ +@Deprecated public interface TopiaConfigurationConstants { - ImmutableSet<String> MAIN_CONFIGURATION = ImmutableSet.of( - TopiaConfigurationConstants.CONFIG_DRIVER, - TopiaConfigurationConstants.CONFIG_URL, - TopiaConfigurationConstants.CONFIG_USER, - TopiaConfigurationConstants.CONFIG_PASS, - AvailableSettings.C3P0_MIN_SIZE, - AvailableSettings.C3P0_MAX_SIZE - ); - - String CONFIG_DEFAULT_SCHEMA = Environment.DEFAULT_SCHEMA; - - String CONFIG_USER = Environment.USER; + /** + * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfiguration#getSchemaName()} + */ + @Deprecated + String CONFIG_DEFAULT_SCHEMA = TopiaConfigurationBuilder.CONFIG_DEFAULT_SCHEMA; - String CONFIG_PASS = Environment.PASS; + /** + * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfiguration#getJdbcConnectionUser()} + */ + @Deprecated + String CONFIG_USER = TopiaConfigurationBuilder.CONFIG_USER; - String CONFIG_DRIVER = Environment.DRIVER; + /** + * @deprecated use {@link TopiaConfiguration#getJdbcConnectionPassword()} + */ + @Deprecated + String CONFIG_PASS = TopiaConfigurationBuilder.CONFIG_PASS; - String CONFIG_DIALECT = Environment.DIALECT; + /** + * @deprecated use {@link TopiaConfiguration#getJdbcDriverClass()} + */ + @Deprecated + String CONFIG_DRIVER = TopiaConfigurationBuilder.CONFIG_DRIVER; - String CONFIG_CONNECTION_PROVIDER = Environment.CONNECTION_PROVIDER; + /** + * @deprecated dialect is now guessed by Topia, you may use {@link TopiaConfiguration#getHibernateExtraConfiguration()} + * and add a key using constant {@link Environment#DIALECT}. + */ + @Deprecated + String CONFIG_DIALECT = AvailableSettings.DIALECT; - String CONFIG_BYTECODE_PROVIDER = Environment.BYTECODE_PROVIDER; + String CONFIG_CONNECTION_PROVIDER = AvailableSettings.CONNECTION_PROVIDER; - String CONFIG_CURRENT_SESSION_CONTEXT_CLASS = Environment.CURRENT_SESSION_CONTEXT_CLASS; + String CONFIG_BYTECODE_PROVIDER = AvailableSettings.BYTECODE_PROVIDER; - String CONFIG_GENERATE_STATISTICS = Environment.GENERATE_STATISTICS; + String CONFIG_CURRENT_SESSION_CONTEXT_CLASS = AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS; - String CONFIG_FORMAT_SQL = Environment.FORMAT_SQL; + String CONFIG_GENERATE_STATISTICS = AvailableSettings.GENERATE_STATISTICS; - String CONFIG_HBM2DDL_AUTO = Environment.HBM2DDL_AUTO; + String CONFIG_FORMAT_SQL = AvailableSettings.FORMAT_SQL; - String CONFIG_POOL_SIZE = Environment.POOL_SIZE; + String CONFIG_HBM2DDL_AUTO = AvailableSettings.HBM2DDL_AUTO; - String CONFIG_SHOW_SQL = Environment.SHOW_SQL; + String CONFIG_POOL_SIZE = AvailableSettings.POOL_SIZE; - String CONFIG_URL = Environment.URL; + String CONFIG_SHOW_SQL = AvailableSettings.SHOW_SQL; - String CONFIG_PERSISTENCE_CLASSES = "topia.persistence.classes"; + /** + * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfiguration#getJdbcConnectionUrl()} + */ + @Deprecated + String CONFIG_URL = TopiaConfigurationBuilder.CONFIG_URL; /** - * Configuration directive to change topia Ids generation strategy. - * <p/> - * Expected value is an FQN to a class which implements {@link org.nuiton.topia.persistence.TopiaIdFactory} - * - * @since 3.0 + * @deprecated use {@link TopiaConfiguration#getTopiaIdFactoryClassName()} */ + @Deprecated String CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME = - "topia.persistence.topiaIdFactoryClassName"; + TopiaConfigurationBuilder.CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME; /** - * You can set it to false if you don't want Topia to deal with the schema (you keep it - * up to date with your own sql file). - * - * @since 3.0 + * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfiguration#isInitSchema()} */ - String CONFIG_PERSISTENCE_INIT_SCHEMA = - "topia.persistence.initSchema"; + @Deprecated + String CONFIG_PERSISTENCE_INIT_SCHEMA = TopiaConfigurationBuilder.CONFIG_PERSISTENCE_INIT_SCHEMA; + } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java index b168752..f2a95b8 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaIdFactory.java @@ -33,9 +33,9 @@ package org.nuiton.topia.persistence; * <li>retrieves a class or random part from a given topiaId.</li> * </ul> * - * You may use {@link org.nuiton.topia.persistence.TopiaConfigurationConstants#CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME} - * in configuration to make topia use it. + * You can change the implementation used by ToPIA by changing configuration. * + * @see TopiaConfiguration#getTopiaIdFactoryClassName() * @author bleny <leny@codelutin.com/> * @author tchemit <chemit@codelutin.com/> * @since 3.0 diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java index 95c021f..31dbbb3 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/HibernateProvider.java @@ -45,7 +45,6 @@ import org.hibernate.service.ServiceRegistry; import org.hibernate.service.spi.SessionFactoryServiceRegistry; import org.hibernate.service.spi.Stoppable; import org.nuiton.topia.persistence.TopiaConfiguration; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.internal.support.TopiaHibernateEventListener; import org.nuiton.topia.persistence.support.TopiaServiceSupport; @@ -146,7 +145,7 @@ public class HibernateProvider { } public static String getHibernateDialect(TopiaConfiguration topiaConfiguration) { - String hibernateDialect = topiaConfiguration.getHibernateExtraConfiguration().get(TopiaConfigurationConstants.CONFIG_DIALECT); + String hibernateDialect = topiaConfiguration.getHibernateExtraConfiguration().get(Environment.DIALECT); if (hibernateDialect == null) { hibernateDialect = guessHibernateDialect(topiaConfiguration.getJdbcConnectionUrl(), topiaConfiguration.getJdbcDriverClass().getName()); } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaUtil.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaUtil.java index 7e5bde1..ef86846 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaUtil.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/TopiaUtil.java @@ -24,19 +24,10 @@ package org.nuiton.topia.persistence.util; * #L% */ -import java.io.Closeable; -import java.io.IOException; -import java.net.URL; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; -import java.util.regex.Pattern; - +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Session; @@ -51,7 +42,6 @@ import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.tool.hbm2ddl.DatabaseMetadata; import org.hibernate.tool.hbm2ddl.TableMetadata; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaNotFoundException; @@ -60,11 +50,18 @@ import org.nuiton.topia.persistence.support.TopiaHibernateSupport; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.Resource; -import com.google.common.base.Function; -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; -import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableSet; +import java.io.Closeable; +import java.io.IOException; +import java.net.URL; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; +import java.util.regex.Pattern; /** * TODO-fdesbois-20100507 : Need javadoc + translations for existing methods. @@ -483,7 +480,7 @@ public class TopiaUtil { * @return schema name */ public static String getSchemaName(Configuration config) { - return config.getProperty(TopiaConfigurationConstants.CONFIG_DEFAULT_SCHEMA); + return config.getProperty(Environment.DEFAULT_SCHEMA); } public static Map<String, Object> convertPropertiesArrayToMap(Object... propertyNamesAndValues) throws IllegalArgumentException { diff --git a/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java b/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java index d2e928d..3dd89bf 100644 --- a/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java +++ b/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java @@ -36,7 +36,6 @@ import org.nuiton.topia.migration.mappings.TMSVersion; import org.nuiton.topia.migration.mappings.TMSVersionHibernateDao; import org.nuiton.topia.persistence.TopiaApplicationContext; import org.nuiton.topia.persistence.TopiaConfiguration; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaMigrationServiceException; import org.nuiton.topia.persistence.internal.AbstractTopiaApplicationContext; @@ -194,8 +193,7 @@ public class TopiaMigrationEngine implements TopiaMigrationService { config.putAll(serviceConfiguration); Preconditions.checkState(StringUtils.isBlank(config.getProperty(MIGRATION_MIGRATE_ON_INIT)), - MIGRATION_MIGRATE_ON_INIT + " directive is deprecated, you must replace it by " - + TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA); + MIGRATION_MIGRATE_ON_INIT + " directive is deprecated, you must replace it by setting TopiaConfiguration#isInitSchema to true"); showSql = Boolean.valueOf(config.getProperty(MIGRATION_SHOW_SQL, String.valueOf(Boolean.FALSE))); if (log.isDebugEnabled()) { diff --git a/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java b/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java index 7bdac89..d7fbf5f 100644 --- a/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java +++ b/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java @@ -42,7 +42,7 @@ public interface TopiaMigrationService extends org.nuiton.topia.persistence.Topi /** * Migrate during init or not ? Default value is true. - * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfigurationConstants#CONFIG_PERSISTENCE_INIT_SCHEMA} + * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfiguration#isInitSchema()} */ @Deprecated String MIGRATION_MIGRATE_ON_INIT = "migrateOnInit"; -- 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 e9195ebcd86a220360230878f2eaf5edb89a46a0 Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 17:12:28 2014 +0100 Introduce HibernateAvailableSettings --- .../persistence/HibernateAvailableSettings.java | 14 ++++++ .../topia/persistence/TopiaConfiguration.java | 21 ++++++-- .../persistence/TopiaConfigurationConstants.java | 57 ++++++++++++++++------ 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java new file mode 100644 index 0000000..9be6d96 --- /dev/null +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/HibernateAvailableSettings.java @@ -0,0 +1,14 @@ +package org.nuiton.topia.persistence; + +import org.hibernate.cfg.AvailableSettings; + +/** + * It's just a shortcut that allows you to use {@link org.hibernate.cfg.AvailableSettings} + * constants without adding Hibernate to your dependencies so one can fill the + * {@link TopiaConfiguration#getHibernateExtraConfiguration()}. + * + * @since 3.0 + */ +public interface HibernateAvailableSettings extends AvailableSettings { + +} 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 5005c0d..fb1f48a 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 @@ -15,13 +15,14 @@ public interface TopiaConfiguration extends JdbcConfiguration { * You can set it to false if you don't want Topia to deal with the schema (you keep it * up to date with your own sql file). * + * @return true by default * @since 3.0 */ boolean isInitSchema(); /** * Configuration directive to change topia Ids generation strategy. - * <p/> + * * Expected value is an FQN to a class which implements {@link org.nuiton.topia.persistence.TopiaIdFactory} * * @since 3.0 @@ -30,6 +31,20 @@ public interface TopiaConfiguration extends JdbcConfiguration { String getSchemaName(); + /** + * Topia will automatically generate an Hibernate configuration for you based + * on the different element of this TopiaConfiguration. However, you can tune Hibernate + * by adding Hibernate configuration directive to this Map. + * + * We highly recommend you to use constants in {@link org.nuiton.topia.persistence.HibernateAvailableSettings} + * as keys of the map. + * + * You <strong>MUST NOT</strong> pass {@link HibernateAvailableSettings#HBM2DDL_AUTO} since + * ToPIA will use validate. If you want use it, have a look at {@link org.nuiton.topia.persistence.HibernateTopiaMigrationService} + * + * @return a map containing hibernate configuration directives that ToPIA will use when it + * will instantiate Hibernate. + */ Map<String, String> getHibernateExtraConfiguration(); boolean isConnectionPoolingEnabled(); @@ -38,8 +53,8 @@ public interface TopiaConfiguration extends JdbcConfiguration { Integer getConnectionPoolMaxSize(); - Map<String,Class<? extends TopiaService>> getDeclaredServices(); + Map<String, Class<? extends TopiaService>> getDeclaredServices(); - Map<String,Map<String,String>> getDeclaredServicesConfiguration(); + Map<String, Map<String,String>> getDeclaredServicesConfiguration(); } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java index 6217f48..473ed2f 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfigurationConstants.java @@ -24,9 +24,6 @@ package org.nuiton.topia.persistence; * #L% */ -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.cfg.Environment; - /** * This class lists the configuration variables that ToPIA expects * <p/> @@ -35,7 +32,7 @@ import org.hibernate.cfg.Environment; * @author Tony Chemit - chemit@codelutin.com * @since 3.0 * @deprecated if you want to dynamically create configuration through Java, use {@link org.nuiton.topia.persistence.TopiaConfigurationBuilder}, - * if you need Hibernate constants, use {@link org.hibernate.cfg.AvailableSettings} + * if you need Hibernate constants, use {@link org.nuiton.topia.persistence.HibernateAvailableSettings} */ @Deprecated public interface TopiaConfigurationConstants { @@ -66,26 +63,58 @@ public interface TopiaConfigurationConstants { /** * @deprecated dialect is now guessed by Topia, you may use {@link TopiaConfiguration#getHibernateExtraConfiguration()} - * and add a key using constant {@link Environment#DIALECT}. + * and add a key using constant {@link HibernateAvailableSettings#DIALECT}. */ @Deprecated - String CONFIG_DIALECT = AvailableSettings.DIALECT; + String CONFIG_DIALECT = HibernateAvailableSettings.DIALECT; - String CONFIG_CONNECTION_PROVIDER = AvailableSettings.CONNECTION_PROVIDER; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_CONNECTION_PROVIDER = HibernateAvailableSettings.CONNECTION_PROVIDER; - String CONFIG_BYTECODE_PROVIDER = AvailableSettings.BYTECODE_PROVIDER; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_BYTECODE_PROVIDER = HibernateAvailableSettings.BYTECODE_PROVIDER; - String CONFIG_CURRENT_SESSION_CONTEXT_CLASS = AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_CURRENT_SESSION_CONTEXT_CLASS = HibernateAvailableSettings.CURRENT_SESSION_CONTEXT_CLASS; - String CONFIG_GENERATE_STATISTICS = AvailableSettings.GENERATE_STATISTICS; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_GENERATE_STATISTICS = HibernateAvailableSettings.GENERATE_STATISTICS; - String CONFIG_FORMAT_SQL = AvailableSettings.FORMAT_SQL; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_FORMAT_SQL = HibernateAvailableSettings.FORMAT_SQL; - String CONFIG_HBM2DDL_AUTO = AvailableSettings.HBM2DDL_AUTO; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_HBM2DDL_AUTO = HibernateAvailableSettings.HBM2DDL_AUTO; - String CONFIG_POOL_SIZE = AvailableSettings.POOL_SIZE; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_POOL_SIZE = HibernateAvailableSettings.POOL_SIZE; - String CONFIG_SHOW_SQL = AvailableSettings.SHOW_SQL; + /** + * @deprecated use same constant in {@link HibernateAvailableSettings} + */ + @Deprecated + String CONFIG_SHOW_SQL = HibernateAvailableSettings.SHOW_SQL; /** * @deprecated use {@link org.nuiton.topia.persistence.TopiaConfiguration#getJdbcConnectionUrl()} -- 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 2e409ec1393b69da6307beac1397c5afc54a4abb Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 17:48:55 2014 +0100 Implements a method to convert TopiaConfiguration to Map --- .../persistence/TopiaConfigurationBuilder.java | 46 +++++++++++++++- .../persistence/TopiaConfigurationBuilderTest.java | 63 +++++++++++++++------- 2 files changed, 90 insertions(+), 19 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 4e87d75..11cc8d1 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 @@ -200,7 +200,47 @@ public class TopiaConfigurationBuilder { check(topiaConfiguration); Map<String, String> map = new LinkedHashMap<String, String>(); - throw new UnsupportedOperationException("yet"); + // JDBC connection + map.put(CONFIG_URL, topiaConfiguration.getJdbcConnectionUrl()); + map.put(CONFIG_USER, topiaConfiguration.getJdbcConnectionUser()); + map.put(CONFIG_PASS, topiaConfiguration.getJdbcConnectionPassword()); + map.put(CONFIG_DRIVER, topiaConfiguration.getJdbcDriverClass().getName()); + + // Schema initialization + if ( ! topiaConfiguration.isInitSchema()) { + map.put(CONFIG_PERSISTENCE_INIT_SCHEMA, String.valueOf(topiaConfiguration.isInitSchema())); + } + + // connection pooling + if (topiaConfiguration.isConnectionPoolingEnabled()) { + map.put(HibernateAvailableSettings.C3P0_MIN_SIZE, String.valueOf(topiaConfiguration.getConnectionPoolMinSize())); + map.put(HibernateAvailableSettings.C3P0_MAX_SIZE, String.valueOf(topiaConfiguration.getConnectionPoolMaxSize())); + } + + // others + map.put(CONFIG_PERSISTENCE_TOPIA_ID_FACTORY_CLASS_NAME, topiaConfiguration.getTopiaIdFactoryClassName()); + if (topiaConfiguration.getSchemaName() != null) { + map.put(CONFIG_DEFAULT_SCHEMA, topiaConfiguration.getSchemaName()); + } + + // Hibernate + map.putAll(topiaConfiguration.getHibernateExtraConfiguration()); + + // services + for (Map.Entry<String, Class<? extends TopiaService>> entry : topiaConfiguration.getDeclaredServices().entrySet()) { + String serviceName = entry.getKey(); + String serviceDeclaration = TOPIA_SERVICE_CONFIGURATION_PREFIX + "." + serviceName; + String serviceClassName = entry.getValue().getName(); + Map<String, String> serviceConfiguration = topiaConfiguration.getDeclaredServicesConfiguration().get(serviceName); + map.put(serviceDeclaration, serviceClassName); + if (serviceConfiguration != null) { + for (Map.Entry<String, String> serviceConfigurationEntry : serviceConfiguration.entrySet()) { + map.put(serviceDeclaration + "." + serviceConfigurationEntry.getKey(), serviceConfigurationEntry.getValue()); + } + } + } + + return map; } public static Properties toProperties(TopiaConfiguration topiaConfiguration) { @@ -305,5 +345,9 @@ public class TopiaConfigurationBuilder { public Properties toProperties() { return TopiaConfigurationBuilder.toProperties(beanTopiaConfiguration); } + + public Map<String, String> toMap() { + return TopiaConfigurationBuilder.toMap(beanTopiaConfiguration); + } } } 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 875af33..9dc4018 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 @@ -1,16 +1,47 @@ package org.nuiton.topia.persistence; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.nuiton.topia.persistence.internal.LegacyTopiaIdFactory; import org.nuiton.topia.persistence.internal.TopiaConnectionProvider; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; +import java.util.Map; import java.util.Properties; public class TopiaConfigurationBuilderTest { + private static final Log log = LogFactory.getLog(TopiaConfigurationBuilderTest.class); + + protected Properties properties; + + @Before + public void setUp() { + + properties = new Properties(); + properties.put("hibernate.connection.driver_class", "org.h2.Driver"); + properties.put("hibernate.connection.url", "jdbc:h2:file:/tmp/my-super-directory/h2data"); + properties.put("hibernate.connection.username", "sa"); + properties.put("hibernate.connection.password", ""); + properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + properties.put("hibernate.show_sql", "false"); + properties.put("hibernate.format_sql", "true"); + properties.put("hibernate.use_sql_comments", "true"); + properties.put("hibernate.ejb.naming_strategy", org.hibernate.cfg.ImprovedNamingStrategy.class.getName()); + properties.put("hibernate.c3p0.min_size", "5"); + properties.put("hibernate.c3p0.max_size", "20"); + properties.put("hibernate.c3p0.timeout", "1800"); + properties.put("hibernate.c3p0.max_statements", "50"); + properties.put("hibernate.connection.provider_class", TopiaConnectionProvider.class.getName()); + properties.put("topia.persistence.topiaIdFactoryClassName", LegacyTopiaIdFactory.class.getName()); + properties.put("topia.service.migration", HibernateTopiaMigrationService.class.getName()); + + } + @Test public void build() { @@ -36,24 +67,6 @@ public class TopiaConfigurationBuilderTest { @Test public void testReadProperties() { - Properties properties = new Properties(); - properties.put("hibernate.connection.driver_class", "org.h2.Driver"); - properties.put("hibernate.connection.url", "jdbc:h2:file:/tmp/my-super-directory/h2data"); - properties.put("hibernate.connection.username", "sa"); - properties.put("hibernate.connection.password", ""); - properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); - properties.put("hibernate.show_sql", "false"); - properties.put("hibernate.format_sql", "true"); - properties.put("hibernate.use_sql_comments", "true"); - properties.put("hibernate.ejb.naming_strategy", org.hibernate.cfg.ImprovedNamingStrategy.class.getName()); - properties.put("hibernate.c3p0.min_size", "5"); - properties.put("hibernate.c3p0.max_size", "20"); - properties.put("hibernate.c3p0.timeout", "1800"); - properties.put("hibernate.c3p0.max_statements", "50"); - properties.put("hibernate.connection.provider_class", TopiaConnectionProvider.class.getName()); - properties.put("topia.persistence.topiaIdFactoryClassName", LegacyTopiaIdFactory.class.getName()); - properties.put("topia.service.migration", HibernateTopiaMigrationService.class.getName()); - BeanTopiaConfiguration topiaConfiguration = TopiaConfigurationBuilder.readProperties(properties); Assert.assertTrue(topiaConfiguration.getHibernateExtraConfiguration().containsValue(org.hibernate.cfg.ImprovedNamingStrategy.class.getName())); @@ -61,4 +74,18 @@ public class TopiaConfigurationBuilderTest { } + @Test + public void testToMap() { + + TopiaConfiguration topiaConfiguration = TopiaConfigurationBuilder.readProperties(properties); + + Map<String, String> map = TopiaConfigurationBuilder.toMap(topiaConfiguration); + + if (log.isDebugEnabled()) { + log.debug("generated map is " + map); + } + + Assert.assertEquals(properties.size(), map.size()); + + } } \ No newline at end of file -- 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 3a3b5698b7cf405fa1a0938e62fbba7f9a74223c Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Dec 19 17:57:05 2014 +0100 Convention on builders --- .../java/org/nuiton/topia/persistence/TopiaConfigurationBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 11cc8d1..d28308c 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 @@ -342,11 +342,11 @@ public class TopiaConfigurationBuilder { return built; } - public Properties toProperties() { + public Properties buildProperties() { return TopiaConfigurationBuilder.toProperties(beanTopiaConfiguration); } - public Map<String, String> toMap() { + public Map<String, String> buildMap() { return TopiaConfigurationBuilder.toMap(beanTopiaConfiguration); } } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm