r2593 - in trunk: topia-persistence/src/main/java/org/nuiton/topia/framework topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence topia-service-migration topia-service-migration/src/main/java/org/nuiton/topia/migration topia-service-migration/src/main/resources/org/nuiton/topia/migration/mappings topia-service-migration/src/site/rst topia-service-migration/src/test/java/org/nuiton/topia/migration topia-service-migration/src/test/resources
Author: athimel Date: 2012-07-02 17:15:56 +0200 (Mon, 02 Jul 2012) New Revision: 2593 Url: http://nuiton.org/repositories/revision/topia/2593 Log: Add a simple test on topia-migration-service Added: trunk/topia-service-migration/src/main/resources/org/nuiton/topia/migration/mappings/TMSVersion-orm.xml trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigration.java trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationCallback.java trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationV1_2.java trunk/topia-service-migration/src/test/resources/TopiaContext-it.properties trunk/topia-service-migration/src/test/resources/log4j.properties trunk/topia-service-migration/src/test/resources/migration-source-database.h2.db Removed: trunk/topia-service-migration/src/test/resources/ConfigurationAdapterTest-hibernate.cfg.xml Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java trunk/topia-service-migration/pom.xml trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java trunk/topia-service-migration/src/site/rst/index.rst Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-07-02 13:24:27 UTC (rev 2592) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-07-02 15:15:56 UTC (rev 2593) @@ -1006,9 +1006,10 @@ @Override public boolean isSchemaEmpty() { try { - Metamodel metamodel = getEntityManager().getMetamodel(); - Set<EntityType<?>> entities = metamodel.getEntities(); - for (EntityType<?> entity : entities) { + // Force configuration read + getJPAConfiguration(); + Set<Class<?>> entities = getPersistenceClasses(); + for (Class<?> entity : entities) { String entityName = entity.getName(); Class entityClass = Class.forName(entityName); if (isTableExists(entityClass)) { Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java =================================================================== --- trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java 2012-07-02 13:24:27 UTC (rev 2592) +++ trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java 2012-07-02 15:15:56 UTC (rev 2593) @@ -124,26 +124,34 @@ return result; } + public static Map<String, Object> buildHibernateProperties(Map<String, Object> topiaProperties) { + + Map<String, Object> result = Maps.newHashMap(topiaProperties); + + // Convert everything from topia.* to hibernate.* + for (String key : topiaProperties.keySet()) { + if (key.startsWith("topia.")) { + Object value = topiaProperties.get(key); + String hibernateKey = "hibernate." + key.substring(6); + result.put(hibernateKey, value); + } + } + return result; + } + public static Ejb3Configuration loadConfiguration( String entityManagerName, Map<String, Object> properties, Set<Class<?>> entities) { - Map<String, Object> hibernateProperties = Maps.newHashMap(properties); + Map<String, Object> hibernateProperties = buildHibernateProperties(properties); boolean useHibernateMapping = false; - // Convert everything from topia.* to hibernate.* - // and find out if use orm (jpa) or legacy hibernate mapping files - for (String key : properties.keySet()) { - if (key.startsWith("topia.")) { - Object value = properties.get(key); - String hibernateKey = "hibernate." + key.substring(6); - hibernateProperties.put(hibernateKey, value); - } else if (USE_HIBERNATE_MAPPING_FILES.equals(key)) { - String value = String.valueOf(properties.get(key)); - if (Boolean.valueOf(value)) { - // use hibernate mapping - useHibernateMapping = true; - } + // Find out if use orm (jpa) or legacy hibernate mapping files + if (hibernateProperties.containsKey(USE_HIBERNATE_MAPPING_FILES)) { + String value = String.valueOf(properties.get(USE_HIBERNATE_MAPPING_FILES)); + if (Boolean.valueOf(value)) { + // use hibernate mapping + useHibernateMapping = true; } } Modified: trunk/topia-service-migration/pom.xml =================================================================== --- trunk/topia-service-migration/pom.xml 2012-07-02 13:24:27 UTC (rev 2592) +++ trunk/topia-service-migration/pom.xml 2012-07-02 15:15:56 UTC (rev 2593) @@ -70,6 +70,12 @@ <artifactId>hibernate-core</artifactId> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>topia-persistence-hibernate</artifactId> + <version>${project.version}</version> + </dependency> + <!-- Depencies for test--> <dependency> <groupId>com.h2database</groupId> @@ -84,6 +90,13 @@ <artifactId>junit</artifactId> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>topia-persistence-tck</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> <name>ToPIA :: Service Migration</name> Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java 2012-07-02 13:24:27 UTC (rev 2592) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java 2012-07-02 15:15:56 UTC (rev 2593) @@ -39,12 +39,14 @@ import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.migration.mappings.TMSVersion; import org.nuiton.topia.migration.mappings.TMSVersionDAO; +import org.nuiton.topia.persistence.TopiaHibernatePersistenceProvider; import org.nuiton.util.Version; import org.nuiton.util.VersionUtil; import org.nuiton.util.VersionUtil.VersionComparator; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.Properties; import java.util.SortedSet; import java.util.TreeSet; @@ -616,11 +618,13 @@ * @since 2.5.3 */ protected Configuration createHibernateConfiguration(Configuration configuration) { - Properties config = rootContext.getConfig(); + Map<String, Object> jpaConfig = rootContext.getJPAConfiguration(); + Map<String, Object> hibernateConfig = + TopiaHibernatePersistenceProvider.buildHibernateProperties(jpaConfig); Properties prop = new Properties(); prop.putAll(configuration.getProperties()); - prop.putAll(config); + prop.putAll(hibernateConfig); configuration.setProperties(prop); configuration.buildMappings(); Added: trunk/topia-service-migration/src/main/resources/org/nuiton/topia/migration/mappings/TMSVersion-orm.xml =================================================================== --- trunk/topia-service-migration/src/main/resources/org/nuiton/topia/migration/mappings/TMSVersion-orm.xml (rev 0) +++ trunk/topia-service-migration/src/main/resources/org/nuiton/topia/migration/mappings/TMSVersion-orm.xml 2012-07-02 15:15:56 UTC (rev 2593) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity-mappings version="2.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"> + + <entity class="org.nuiton.topia.migration.mappings.TMSVersion"> + <table name="tms_version" /> + <attributes> + <id name="version" /> + </attributes> + </entity> + +</entity-mappings> Modified: trunk/topia-service-migration/src/site/rst/index.rst =================================================================== --- trunk/topia-service-migration/src/site/rst/index.rst 2012-07-02 13:24:27 UTC (rev 2592) +++ trunk/topia-service-migration/src/site/rst/index.rst 2012-07-02 15:15:56 UTC (rev 2593) @@ -143,10 +143,10 @@ effectue la migration si besoin. Dans le cas où la version ne peut pas être deterninée, il considère que le -schema en base est en version V0 (les mppings de cette version doivent être -fournit). Dans ce cas, il effectue en plus une détection des tables pour +schema en base est en version V0 (les mappings de cette version doivent être +fournis). Dans ce cas, il effectue en plus une détection des tables pour savoir si le schéma existe deja. S'il n'existe pas, il ne tente donc pas -d'effetuer une migration. +d'effectuer une migration. Classes de migration ~~~~~~~~~~~~~~~~~~~~ Added: trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigration.java =================================================================== --- trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigration.java (rev 0) +++ trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigration.java 2012-07-02 15:15:56 UTC (rev 2593) @@ -0,0 +1,107 @@ +package org.nuiton.topia.migration; + +import com.google.common.io.Files; +import com.google.common.io.InputSupplier; +import junit.framework.Assert; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.tck.TopiaDatabase; +import org.nuiton.topia.tck.it.Company; +import org.nuiton.topia.tck.it.CompanyDAO; +import org.nuiton.topia.tck.it.TopiaTckItDAOHelper; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Properties; + +/** + * @author Arnaud Thimel <thimel@codelutin.com> + */ +public class TckItMigration { + + private static final Log log = LogFactory.getLog(TckItMigration.class); + + protected TopiaContext rootCtxt; + + protected final String getImplementationClassesAsString() { + StringBuilder buffer = new StringBuilder(); + for (Class<? extends TopiaEntity> aClass : TopiaTckItDAOHelper.getImplementationClasses()) { + buffer.append(',').append(aClass.getName()); + } + return buffer.substring(1); + } + + @Before + public void setUpService() throws Exception { + File testSpecificDirectory = TopiaDatabase.getTestSpecificDirectory(TckItMigration.class, "testMigrationDone"); + + File dataCopyForTest = new File(testSpecificDirectory, "migration-test-db.h2.db"); + dataCopyForTest.getParentFile().mkdirs(); + + Files.copy(new InputSupplier<InputStream>() { + @Override + public InputStream getInput() throws IOException { + return TckItMigration.class.getResourceAsStream("/migration-source-database.h2.db"); + } + }, dataCopyForTest); + + String absolutePath = dataCopyForTest.getAbsolutePath(); + String path = absolutePath.substring(0, absolutePath.length()-6); + String jdbcUrl = String.format("jdbc:h2:%s", path); + + if (log.isInfoEnabled()) { + log.info("Use " + jdbcUrl); + } + log.debug("url de la copie de la base navision : " + jdbcUrl); + + + Properties dbConfiguration = new Properties(); + InputStream stream = + getClass().getResourceAsStream("/TopiaContext-it.properties"); + + try { + dbConfiguration.load(stream); + } finally { + stream.close(); + } + dbConfiguration.setProperty( + TopiaContextFactory.CONFIG_PERSISTENCE_CLASSES, + getImplementationClassesAsString()); + + dbConfiguration.setProperty( + TopiaContextFactory.CONFIG_URL, jdbcUrl); + + rootCtxt = TopiaContextFactory.getContext(dbConfiguration); + + } + + + + + @Test + public void testMigrationDone() throws TopiaException { + Assert.assertEquals("Test is written for model 1.2", "1.2", TopiaTckItDAOHelper.getModelVersion()); + + TopiaContext context = rootCtxt.beginTransaction(); + CompanyDAO companyDAO = TopiaTckItDAOHelper.getCompanyDAO(context); + + // There is already 1 company in the DB + Assert.assertEquals(1, companyDAO.count()); + + // Value in database before migration was : 12345 + // Siret value is decreased by 12222 -> 123 + + // Siret is 123 only if migration is done + List<Company> bySiret = companyDAO.findAllBySiret(123); + Assert.assertEquals(1, bySiret.size()); + } + +} Added: trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationCallback.java =================================================================== --- trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationCallback.java (rev 0) +++ trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationCallback.java 2012-07-02 15:15:56 UTC (rev 2593) @@ -0,0 +1,45 @@ +package org.nuiton.topia.migration; + +import com.google.common.collect.Maps; +import org.nuiton.topia.tck.it.TopiaTckItDAOHelper; +import org.nuiton.util.Version; +import org.nuiton.util.VersionUtil; + +import java.util.List; +import java.util.Map; + +/** + * @author Arnaud Thimel <thimel@codelutin.com> + */ +public class TckItMigrationCallback extends TopiaMigrationCallbackByClass { + + public static final Version VERSION_1_2 = VersionUtil.valueOf("1.2"); + + protected static MigrationCallBackForVersionResolverByMap resolver; + + static { + Map<Version, Class<? extends MigrationCallBackForVersion>> callbacks = Maps.newHashMap(); + callbacks.put(VERSION_1_2, TckItMigrationV1_2.class); + resolver = new MigrationCallBackForVersionResolverByMap(callbacks); + } + + public TckItMigrationCallback() { + super(resolver); + } + + @Override + public Version[] getAvailableVersions() { + return new Version[]{VERSION_1_2}; + } + + @Override + public Version getApplicationVersion() { + return VersionUtil.valueOf(TopiaTckItDAOHelper.getModelVersion()); + } + + @Override + public boolean askUser(Version dbVersion, List<Version> versions) { + return true; + } + +} Added: trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationV1_2.java =================================================================== --- trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationV1_2.java (rev 0) +++ trunk/topia-service-migration/src/test/java/org/nuiton/topia/migration/TckItMigrationV1_2.java 2012-07-02 15:15:56 UTC (rev 2593) @@ -0,0 +1,29 @@ +package org.nuiton.topia.migration; + +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.util.Version; + +import java.util.List; + +/** + * @author Arnaud Thimel <thimel@codelutin.com> + */ +public class TckItMigrationV1_2 extends TopiaMigrationCallbackByClass.MigrationCallBackForVersion { + + public TckItMigrationV1_2(Version version, TopiaMigrationCallbackByClass callBack) { + super(version, callBack); + } + + @Override + protected void prepareMigrationScript(TopiaContextImplementor tx, + List<String> queries, + boolean showSql, + boolean showProgression) + throws TopiaException { + // Actual value is 12345 + // 12345 - 12222 = 123 + queries.add("update company set siret = siret - 12222;"); + } + +} Deleted: trunk/topia-service-migration/src/test/resources/ConfigurationAdapterTest-hibernate.cfg.xml =================================================================== --- trunk/topia-service-migration/src/test/resources/ConfigurationAdapterTest-hibernate.cfg.xml 2012-07-02 13:24:27 UTC (rev 2592) +++ trunk/topia-service-migration/src/test/resources/ConfigurationAdapterTest-hibernate.cfg.xml 2012-07-02 15:15:56 UTC (rev 2593) @@ -1,43 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<!-- - #%L - ToPIA :: Service Migration - - $Id$ - $HeadURL$ - %% - Copyright (C) 2004 - 2010 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% - --> - -<!DOCTYPE hibernate-configuration - PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" - "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> - -<hibernate-configuration> - - <session-factory> - - <!--property name="connection.datasource">java:comp/env/atelier-content-lmfr</property--> - <property name="show_sql">false</property> - <property name="dialect">org.hibernate.dialect.H2Dialect</property> - - <!-- Mapping files --> - - </session-factory> - -</hibernate-configuration> Copied: trunk/topia-service-migration/src/test/resources/TopiaContext-it.properties (from rev 2591, trunk/topia-persistence-hibernate/src/test/resources/TopiaContext-it.properties) =================================================================== --- trunk/topia-service-migration/src/test/resources/TopiaContext-it.properties (rev 0) +++ trunk/topia-service-migration/src/test/resources/TopiaContext-it.properties 2012-07-02 15:15:56 UTC (rev 2593) @@ -0,0 +1,41 @@ +### +# #%L +# ToPIA :: Persistence :: Hibernate +# $Id$ +# $HeadURL$ +# %% +# Copyright (C) 2004 - 2012 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 et le model it +hibernate.hbm2ddl.auto=update +hibernate.show_sql=false + +hibernate.dialect=org.hibernate.dialect.H2Dialect + +topia.use.hibernate.mapping.files=false +topia.connection.username=sa +topia.connection.password=sa +topia.connection.driver_class=org.h2.Driver + +#Not necessary, but useful +hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaHibernateConnectionProvider + +# Migration configuration +topia.service.migration=org.nuiton.topia.migration.TopiaMigrationEngine +topia.service.migration.callback=org.nuiton.topia.migration.TckItMigrationCallback +topia.service.migration.showSql=true \ No newline at end of file Copied: trunk/topia-service-migration/src/test/resources/log4j.properties (from rev 2591, trunk/topia-persistence-hibernate/src/test/resources/log4j.properties) =================================================================== --- trunk/topia-service-migration/src/test/resources/log4j.properties (rev 0) +++ trunk/topia-service-migration/src/test/resources/log4j.properties 2012-07-02 15:15:56 UTC (rev 2593) @@ -0,0 +1,36 @@ +### +# #%L +# ToPIA :: Persistence +# +# $Id$ +# $HeadURL$ +# %% +# Copyright (C) 2004 - 2010 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% +### +#\u00a0This log is used to display trace in generation + +# Global logging configuration +log4j.rootLogger=WARN, stdout +# Console output... +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.topiatest=DEBUG +log4j.logger.org.nuiton.topia.persistence.util=INFO Added: trunk/topia-service-migration/src/test/resources/migration-source-database.h2.db =================================================================== (Binary files differ) Property changes on: trunk/topia-service-migration/src/test/resources/migration-source-database.h2.db ___________________________________________________________________ Added: svn:mime-type + application/octet-stream
participants (1)
-
athimel@users.nuiton.org