r3115 - trunk/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase
Author: bleny Date: 2014-05-20 18:34:38 +0200 (Tue, 20 May 2014) New Revision: 3115 Url: http://forge.nuiton.org/projects/topia/repository/revisions/3115 Log: refs #3204 make liquibase service create schema if needed Modified: trunk/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java Modified: trunk/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java =================================================================== --- trunk/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java 2014-05-20 09:48:56 UTC (rev 3114) +++ trunk/topia-service-liquibase/src/main/java/org/nuiton/topia/liquibase/TopiaLiquibaseServiceImpl.java 2014-05-20 16:34:38 UTC (rev 3115) @@ -1,5 +1,6 @@ package org.nuiton.topia.liquibase; +import liquibase.Contexts; import liquibase.Liquibase; import liquibase.database.Database; import liquibase.database.DatabaseFactory; @@ -30,6 +31,8 @@ private static final Log log = LogFactory.getLog(TopiaLiquibaseServiceImpl.class); + protected Contexts contexts = new Contexts(""); + /** * Place to find the changelog, default name has been fixed according * to <a href="http://www.liquibase.org/bestpractices.html">best practices</a>. @@ -60,8 +63,16 @@ Liquibase liquibase = getLiquibase(database, resourceAccessor); - update(liquibase); + if (isSchemaEmpty(liquibase, topiaApplicationContext)) { + createSchema(liquibase, topiaApplicationContext); + + } else { + + migrateSchema(liquibase, topiaApplicationContext); + + } + } catch (LiquibaseException e) { throw new TopiaException("unable to init liquibase", e); } finally { @@ -76,10 +87,40 @@ } - protected void update(Liquibase liquibase) throws LiquibaseException { - liquibase.update(""); // "" mean all contexts + /** + * Check if schema exists. If true is returned, we won't use any migrations and just create shema + * according to model. If false, a schema already exists and an migration should be tried. + */ + protected boolean isSchemaEmpty(Liquibase liquibase, TopiaApplicationContext topiaApplicationContext) { + + boolean schemaEmpty = topiaApplicationContext.isSchemaEmpty(); + + return schemaEmpty; + } + protected void createSchema(Liquibase liquibase, TopiaApplicationContext topiaApplicationContext) throws LiquibaseException { + + if (log.isInfoEnabled()) { + log.info("schema is empty, ignore migrations and let topia create schema"); + } + + topiaApplicationContext.createSchema(); + + if (log.isInfoEnabled()) { + log.info("sync changelog"); + } + + liquibase.changeLogSync(contexts); + + } + + protected void migrateSchema(Liquibase liquibase, TopiaApplicationContext topiaApplicationContext) throws LiquibaseException { + + liquibase.update(contexts); // "" mean all contexts + + } + protected Liquibase getLiquibase(Database database, ResourceAccessor resourceAccessor) throws LiquibaseException { Liquibase liquibase = new Liquibase(changeLogPath, resourceAccessor, database); return liquibase;
participants (1)
-
bleny@users.nuiton.org