r1030 - in trunk/topia-service/src/java/org/codelutin/topia/migration: . callback
Author: chatellier Date: 2008-08-05 17:54:54 +0000 (Tue, 05 Aug 2008) New Revision: 1030 Modified: trunk/topia-service/src/java/org/codelutin/topia/migration/MigrationServiceImpl.java trunk/topia-service/src/java/org/codelutin/topia/migration/callback/MigrationCallbackHandler.java Log: Add new state CUSTOM_MIGRATION to manage migration. In this case, only version table is managed by migration topia services Modified: trunk/topia-service/src/java/org/codelutin/topia/migration/MigrationServiceImpl.java =================================================================== --- trunk/topia-service/src/java/org/codelutin/topia/migration/MigrationServiceImpl.java 2008-08-05 17:54:03 UTC (rev 1029) +++ trunk/topia-service/src/java/org/codelutin/topia/migration/MigrationServiceImpl.java 2008-08-05 17:54:54 UTC (rev 1030) @@ -34,6 +34,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.topia.migration.callback.MigrationCallbackHandler; +import org.codelutin.topia.migration.callback.MigrationCallbackHandler.MigrationChoice; import org.codelutin.topia.migration.common.Version; import org.codelutin.topia.migration.kernel.ConfigurationAdapter; import org.codelutin.topia.migration.kernel.ConfigurationHelper; @@ -242,7 +243,7 @@ // tel if migration is needed boolean bMigrationNeeded = false; // tel if migration is wanted - boolean bMigrationWanted = true; + MigrationChoice bMigrationWanted = null; // test if schema exist in database... // if not, the schema must be created @@ -266,13 +267,15 @@ bMigrationNeeded = true; // ask handler for migration bMigrationWanted = askHandlerForMigration(vdbVersion.getVersion(),currentApplicationVersion.getVersion()); + + logger.info("Handler choose : " + bMigrationWanted); } else { logger.info("Database is up to date, no migration needed."); } // si la migration doit etre faite - if(bMigrationNeeded && bMigrationWanted) { + if(bMigrationNeeded && bMigrationWanted.equals(MigrationChoice.MIGRATION)) { logger.info("Beginning database migration"); @@ -364,22 +367,33 @@ // all done logger.info("All done, migration complete"); - + // ferme la connexion a la base dbManager.disconnect(); - - // put version in databse - putVersionInDatabase(currentApplicationConfiguration.getProperties(),currentApplicationVersion,vdbVersion.equals(Version.VZERO)); } else { // ferme la connexion a la base dbManager.disconnect(); } + // manage no migration, but shema version here + if(bMigrationNeeded && + ( bMigrationWanted.equals(MigrationChoice.MIGRATION) || + bMigrationWanted.equals(MigrationChoice.CUSTOM_MIGRATION))) { + + // put version + logger.info("Set application version in database to " + currentApplicationVersion); + + // put version in databse + putVersionInDatabase(currentApplicationConfiguration.getProperties(),currentApplicationVersion,vdbVersion.equals(Version.VZERO)); + } + // return succes flag // - no migration needed // - or migration needed and accepted - return !bMigrationNeeded || (bMigrationNeeded && bMigrationWanted); + return !bMigrationNeeded || (bMigrationNeeded && + ( bMigrationWanted.equals(MigrationChoice.MIGRATION) || + bMigrationWanted.equals(MigrationChoice.CUSTOM_MIGRATION))); } /** @@ -416,13 +430,29 @@ * * @return <tt>true</tt> or <tt>false</tt> */ - protected boolean askHandlerForMigration(String databaseVersion, String applicationVersion) { + protected MigrationChoice askHandlerForMigration(String databaseVersion, String applicationVersion) { // true par defaut, s'il n'y a pas de handlers - boolean result = true; + MigrationChoice result = MigrationChoice.MIGRATION; for(MigrationCallbackHandler callback : migrationCallBackHandlers) { - result &= callback.doMigration(databaseVersion, applicationVersion); + MigrationChoice thiscallbackResult = callback.doMigration(databaseVersion, applicationVersion); + + // hack , si un des callback repond CUSTOM_MIGRATION + // ca sera CUSTOM_MIGRATION + + if(thiscallbackResult == MigrationChoice.NO_MIGRATION) { + if(!result.equals(MigrationChoice.CUSTOM_MIGRATION)) { + result = MigrationChoice.NO_MIGRATION; + } + } else if(thiscallbackResult == MigrationChoice.CUSTOM_MIGRATION) { + result = MigrationChoice.CUSTOM_MIGRATION; + } + else if(thiscallbackResult == MigrationChoice.MIGRATION) { + if(!result.equals(MigrationChoice.CUSTOM_MIGRATION)) { + result = MigrationChoice.MIGRATION; + } + } } return result; Modified: trunk/topia-service/src/java/org/codelutin/topia/migration/callback/MigrationCallbackHandler.java =================================================================== --- trunk/topia-service/src/java/org/codelutin/topia/migration/callback/MigrationCallbackHandler.java 2008-08-05 17:54:03 UTC (rev 1029) +++ trunk/topia-service/src/java/org/codelutin/topia/migration/callback/MigrationCallbackHandler.java 2008-08-05 17:54:54 UTC (rev 1030) @@ -30,11 +30,23 @@ public interface MigrationCallbackHandler { /** + * CallbackHandler return type. + */ + public static enum MigrationChoice { + // no migration + NO_MIGRATION, + // migration + MIGRATION, + // migration done by application, only version managed + CUSTOM_MIGRATION + } + + /** * Ask for migration * * @param databaseVersion database version * @param applicationVersion application version * @return migration aggrement */ - public boolean doMigration(String databaseVersion, String applicationVersion); + public MigrationChoice doMigration(String databaseVersion, String applicationVersion); }
participants (1)
-
chatellierï¼ users.labs.libre-entreprise.org