r2103 - trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration
Author: tchemit Date: 2010-08-21 18:01:23 +0200 (Sat, 21 Aug 2010) New Revision: 2103 Url: http://nuiton.org/repositories/revision/topia/2103 Log: Anomalie #814: Migration must be controlled when restoring database Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallback.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/TopiaMigrationCallback.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallback.java 2010-08-15 11:58:44 UTC (rev 2102) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationCallback.java 2010-08-21 16:01:23 UTC (rev 2103) @@ -100,53 +100,54 @@ List<Version> versions) { boolean doMigrate = askUser(dbVersion, versions); + if (!doMigrate) { + // l'utilisateur a refuse la migration + return false; + } + TopiaContextImplementor tx; - if (doMigrate) { - TopiaContextImplementor tx; + 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 + tx = (TopiaContextImplementor) ctxt.beginTransaction(); + try { - tx = (TopiaContextImplementor) ctxt.beginTransaction(); + Method m = getMigrationMethod(v); - try { + m.setAccessible(true); - Method m = getMigrationMethod(v); + log.info(_("topia.migration.start.migrate", v)); - m.setAccessible(true); + if (log.isDebugEnabled()) { + log.debug("launch method " + m.getName()); + } - log.info(_("topia.migration.start.migrate", v)); + m.invoke(this, tx, showSql, showProgression); - if (log.isDebugEnabled()) { - log.debug("launch method " + m.getName()); - } + // commit des modifs + tx.commitTransaction(); - m.invoke(this, tx, showSql, showProgression); - - // commit des modifs - tx.commitTransaction(); - - } catch (Exception eee) { - // en cas d'erreur - log.error("Migration impossible de la base", eee); - // rollback du travail en cours - tx.rollbackTransaction(); - // propagation de l'erreur - throw eee; - } finally { - // close database connexion - if (tx != null) { - tx.closeContext(); - } + } catch (Exception eee) { + // en cas d'erreur + log.error("Migration impossible de la base", eee); + // rollback du travail en cours + tx.rollbackTransaction(); + // propagation de l'erreur + throw eee; + } finally { + // close database connexion + if (tx != null) { + tx.closeContext(); } + } - } catch (Exception eee) { - 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; 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 2010-08-15 11:58:44 UTC (rev 2102) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java 2010-08-21 16:01:23 UTC (rev 2103) @@ -156,12 +156,18 @@ if (log.isDebugEnabled()) { log.debug("postRestoreSchema event detected, redo, schema migration"); } - try { - doMigrateSchema(); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("postRestoreSchema schema migration failed for reason " + e.getMessage(), e); + if (migrateOnInit) { + // do automatic migration + if (log.isDebugEnabled()) { + log.debug("Starts Migrate from postRestoreSchema..."); } + try { + doMigrateSchema(); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("postRestoreSchema schema migration failed for reason " + e.getMessage(), e); + } + } } } }; @@ -235,6 +241,7 @@ } if (migrateOnInit) { + // do automatic migration try { if (log.isDebugEnabled()) { @@ -339,7 +346,8 @@ log.info(_("topia.migration.skip.migration.no.version.to.apply")); } else { log.info(_("topia.migration.migrate.versions", versionsToApply)); - // ask handler for migration + + // perform the migration needToMigrate = callback.doMigration(rootContext, dbVersion, showSql, @@ -367,7 +375,7 @@ saveApplicationVersion(); } - // return succes flag + // return success flag // - no migration needed // - or migration needed and accepted return true;
participants (1)
-
tchemit@users.nuiton.org