r2938 - trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration
Author: tchemit Date: 2013-12-18 23:51:39 +0100 (Wed, 18 Dec 2013) New Revision: 2938 Url: http://nuiton.org/projects/topia/repository/revisions/2938 Log: fixes #2973: Making migration service works again Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClass.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClassNG.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByMethod.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java 2013-12-18 22:50:15 UTC (rev 2937) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java 2013-12-18 22:51:39 UTC (rev 2938) @@ -28,7 +28,6 @@ import org.apache.commons.logging.LogFactory; import org.hibernate.jdbc.Work; import org.nuiton.topia.AbstractTopiaApplicationContext; -import org.nuiton.topia.AbstractTopiaPersistenceContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaHibernateSupport; import org.nuiton.topia.TopiaPersistenceContext; @@ -40,8 +39,6 @@ import java.sql.SQLException; import java.util.List; -import com.google.common.base.Preconditions; - /** * Abstract migration callback. * @@ -57,9 +54,6 @@ /** @return the available versions from the call back */ public abstract Version[] getAvailableVersions(); - /** @return the current application version (says the version to use) */ - public abstract Version getApplicationVersion(); - /** * Hook to ask user if migration can be performed. * @@ -70,8 +64,10 @@ public abstract boolean askUser(Version dbVersion, List<Version> versions); + protected abstract TopiaHibernateSupport getHibernateSupport(TopiaPersistenceContext tx); + protected abstract void migrateForVersion(Version version, - TopiaHibernateSupport tx, + TopiaPersistenceContext tx, boolean showSql, boolean showProgression) throws Exception; @@ -88,12 +84,12 @@ * <p/> * Note: pour chaque version a appliquer, on ouvre une nouvelle transaction. * - * @param applicationContext topia context de la transaction en cours - * @param dbVersion database version - * @param showSql drapeau pour afficher les requete sql - * @param showProgression drapeau pour afficher la progression - * @param versions all versions knwon by service @return migration a - * ggrement + * @param applicationContext topia context de la transaction en cours + * @param dbVersion database version + * @param showSql drapeau pour afficher les requete sql + * @param showProgression drapeau pour afficher la progression + * @param versions all versions knwon by service @return migration a + * ggrement * @return {@code true} si la migration est accepté, {@code false} autrement. */ public boolean doMigration(AbstractTopiaApplicationContext applicationContext, @@ -103,56 +99,49 @@ List<Version> versions) { boolean doMigrate = askUser(dbVersion, versions); - if (!doMigrate) { - // l'utilisateur a refuse la migration - return false; - } + if (doMigrate) { - for (Version v : versions) { - // ouverture d'une connexion direct JDBC sur la base - try { + for (Version v : versions) { + // ouverture d'une connexion direct JDBC sur la base + try { - TopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext(); - TopiaHibernateSupport hibernateSupport = null; - if (persistenceContext instanceof AbstractTopiaPersistenceContext) { - hibernateSupport = ((AbstractTopiaPersistenceContext)persistenceContext).getHibernateSupport(); - } - Preconditions.checkState(hibernateSupport != null); + TopiaPersistenceContext persistenceContext = + applicationContext.newPersistenceContext(); + try { - try { + log.info(String.format("Start migration to version %s", v)); - log.info(String.format("Start migration to version %s", v)); + migrateForVersion(v, persistenceContext, showSql, showProgression); - migrateForVersion(v, hibernateSupport, showSql, showProgression); + // commit des modifs + persistenceContext.commit(); - // commit des modifs - persistenceContext.commit(); + } catch (Exception eee) { + // en cas d'erreur + log.error("Could not migrate database", eee); + // rollback du travail en cours + persistenceContext.rollback(); + // propagation de l'erreur + throw eee; + } finally { + // close database connexion + if (persistenceContext != null) { + persistenceContext.closeContext(); + } + } } catch (Exception eee) { - // en cas d'erreur - log.error("Could not migrate database", eee); - // rollback du travail en cours - persistenceContext.rollback(); - // propagation de l'erreur - throw eee; - } finally { - // close database connexion - if (persistenceContext != null) { - persistenceContext.closeContext(); - } + log.error("Error lors de la tentative de migration", eee); + doMigrate = false; + // toute erreur arrête la mgration + break; } - - } catch (Exception eee) { - log.error("Error lors de la tentative de migration", eee); - doMigrate = false; - // toute erreur arrête la mgration - break; } } return doMigrate; } - public void executeSQL(TopiaHibernateSupport tx, String... sqls) + public void executeSQL(TopiaPersistenceContext tx, String... sqls) throws TopiaException { executeSQL(tx, false, false, sqls); } @@ -160,18 +149,18 @@ /** * Executes the given {@code sqls} requests. * - * @param tx the session * @param showSql flag to see sql requests * @param showProgression flag to see progession on console * @param sqls requests to execute * @throws TopiaException if any pb * @since 2.3.0 */ - public void executeSQL(TopiaHibernateSupport tx, + public void executeSQL(TopiaPersistenceContext tx, final boolean showSql, final boolean showProgression, final String... sqls) throws TopiaException { + TopiaHibernateSupport hibernateSupport = getHibernateSupport(tx); if (log.isInfoEnabled()) { log.info(String.format("Will execute %1$s requests...", sqls.length)); @@ -189,7 +178,7 @@ "--------------------------------------------------------------------------------\n" ); } - tx.getHibernateSession().doWork(new Work() { + hibernateSupport.getHibernateSession().doWork(new Work() { @Override public void execute(Connection connection) throws SQLException { Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClass.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClass.java 2013-12-18 22:50:15 UTC (rev 2937) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClass.java 2013-12-18 22:51:39 UTC (rev 2938) @@ -25,7 +25,7 @@ package org.nuiton.topia.migration; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaHibernateSupport; +import org.nuiton.topia.TopiaPersistenceContext; import org.nuiton.util.ObjectUtil; import org.nuiton.util.Version; @@ -67,7 +67,7 @@ @Override protected void migrateForVersion(Version version, - TopiaHibernateSupport tx, + TopiaPersistenceContext tx, boolean showSql, boolean showProgression) throws Exception { @@ -100,7 +100,7 @@ } - protected String[] prepareMigration(TopiaHibernateSupport tx, + protected String[] prepareMigration(TopiaPersistenceContext tx, boolean showSql, boolean showProgression) throws TopiaException { @@ -111,17 +111,17 @@ return queries.toArray(new String[queries.size()]); } - protected abstract void prepareMigrationScript(TopiaHibernateSupport tx, + protected abstract void prepareMigrationScript(TopiaPersistenceContext tx, List<String> queries, boolean showSql, boolean showProgression) throws TopiaException; - public void executeSQL(TopiaHibernateSupport tx, + public void executeSQL(TopiaPersistenceContext tx, String... sqls) throws TopiaException { callBack.executeSQL(tx, sqls); } - public void executeSQL(TopiaHibernateSupport tx, + public void executeSQL(TopiaPersistenceContext tx, boolean showSql, boolean showProgression, String... sqls) throws TopiaException { Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClassNG.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClassNG.java 2013-12-18 22:50:15 UTC (rev 2937) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByClassNG.java 2013-12-18 22:51:39 UTC (rev 2938) @@ -27,7 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaHibernateSupport; +import org.nuiton.topia.TopiaPersistenceContext; import org.nuiton.util.Version; import org.nuiton.util.VersionUtil; @@ -73,7 +73,7 @@ @Override protected void migrateForVersion(Version version, - TopiaHibernateSupport tx, + TopiaPersistenceContext tx, boolean showSql, boolean showProgression) throws Exception { @@ -103,7 +103,7 @@ this.callBack = callBack; } - protected String[] prepareMigration(TopiaHibernateSupport tx, + protected String[] prepareMigration(TopiaPersistenceContext tx, boolean showSql, boolean showProgression) throws TopiaException { @@ -114,17 +114,17 @@ return queries.toArray(new String[queries.size()]); } - protected abstract void prepareMigrationScript(TopiaHibernateSupport tx, + protected abstract void prepareMigrationScript(TopiaPersistenceContext tx, List<String> queries, boolean showSql, boolean showProgression) throws TopiaException; - public void executeSQL(TopiaHibernateSupport tx, + public void executeSQL(TopiaPersistenceContext tx, String... sqls) throws TopiaException { callBack.executeSQL(tx, sqls); } - public void executeSQL(TopiaHibernateSupport tx, + public void executeSQL(TopiaPersistenceContext tx, boolean showSql, boolean showProgression, String... sqls) throws TopiaException { Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByMethod.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByMethod.java 2013-12-18 22:50:15 UTC (rev 2937) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallbackByMethod.java 2013-12-18 22:51:39 UTC (rev 2938) @@ -26,7 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaHibernateSupport; +import org.nuiton.topia.TopiaPersistenceContext; import org.nuiton.util.Version; import java.lang.reflect.Method; @@ -51,14 +51,14 @@ @Override protected void migrateForVersion(Version version, - TopiaHibernateSupport tx, + TopiaPersistenceContext tx, boolean showSql, boolean showProgression) throws Exception { String methodName = "migrateTo_" + version.getValidName(); Method m = getClass().getMethod(methodName, - TopiaHibernateSupport.class, + TopiaPersistenceContext.class, boolean.class, boolean.class ); 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 2013-12-18 22:50:15 UTC (rev 2937) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java 2013-12-18 22:51:39 UTC (rev 2938) @@ -202,7 +202,8 @@ public boolean preInit(AbstractTopiaApplicationContext context) { applicationContext = context; - Properties config = null; //applicationContext.getConfig(); + Properties config = new Properties(); + config.putAll(applicationContext.getConfiguration()); String callbackStr = getSafeParameter(config, MIGRATION_CALLBACK); if (log.isDebugEnabled()) { @@ -299,7 +300,7 @@ detectDbVersion(); - Version version = callback.getApplicationVersion(); + Version version = getApplicationVersion(); log.info(String.format("Starting Topia Migration Service - Application version \\: %1$s, Database version \\: %2$s", version.getVersion(), @@ -424,7 +425,7 @@ checkInit(); - Version version = callback.getApplicationVersion(); + Version version = getApplicationVersion(); detectDbVersion(); @@ -504,6 +505,10 @@ dbVersion = version; } + protected Version getApplicationVersion() { + return VersionUtil.valueOf(applicationContext.getModelVersion()); + } + /** * Recupere depuis la base les états internes du service : * <p/>
participants (1)
-
tchemit@users.nuiton.org