@Override public void onApplicationStart() { if (!isDisabled()) { populateModulesWithEvolutions(); if (Play.mode.isProd()) { try { checkEvolutionsState(); } catch (InvalidDatabaseRevision e) { Logger.warn(""); Logger.warn("Your database is not up to date."); Logger.warn("Use `play evolutions` command to manage database evolutions."); throw e; } } } }
public static void main(String[] args) throws SQLException { /** Start the DB plugin * */ Play.id = System.getProperty("play.id"); Play.applicationPath = new File(System.getProperty("application.path")); Play.guessFrameworkPath(); Play.readConfiguration(); Play.javaPath = new ArrayList<VirtualFile>(); Play.classes = new ApplicationClasses(); Play.classloader = new ApplicationClassloader(); Play.templatesPath = new ArrayList<VirtualFile>(); Play.modulesRoutes = new HashMap<String, VirtualFile>(); Play.loadModules(); if (System.getProperty("modules") != null) { populateModulesWithSpecificModules(); } else { populateModulesWithEvolutions(); } if (modulesWithEvolutions.isEmpty()) { System.out.println("~ Nothing has evolutions, go away and think again."); return; } Logger.init(); Logger.setUp("ERROR"); new DBPlugin().onApplicationStart(); /** Connected * */ System.out.println( "~ Connected to " + EvolutionQuery.getDatasource().getConnection().getMetaData().getURL()); for (Entry<String, VirtualFile> moduleRoot : modulesWithEvolutions.entrySet()) { /** Sumary * */ Evolution database = listDatabaseEvolutions(moduleRoot.getKey()).peek(); Evolution application = listApplicationEvolutions(moduleRoot.getKey(), moduleRoot.getValue()).peek(); if ("resolve".equals(System.getProperty("mode"))) { try { checkEvolutionsState(); System.out.println("~"); System.out.println("~ Nothing to resolve for " + moduleRoot.getKey() + "..."); System.out.println("~"); return; } catch (InconsistentDatabase e) { resolve(moduleRoot.getKey(), e.getRevision()); System.out.println("~"); System.out.println( "~ Revision " + e.getRevision() + " for " + moduleRoot.getKey() + " has been resolved;"); System.out.println("~"); } catch (InvalidDatabaseRevision e) { // see later } } /** Check inconsistency * */ try { checkEvolutionsState(); } catch (InconsistentDatabase e) { System.out.println("~"); System.out.println("~ Your database is in an inconsistent state!"); System.out.println("~"); System.out.println("~ While applying this script part:"); System.out.println(""); System.out.println(e.getEvolutionScript()); System.out.println(""); System.out.println("~ The following error occured:"); System.out.println(""); System.out.println(e.getError()); System.out.println(""); System.out.println( "~ Please correct it manually, and mark it resolved by running `play evolutions:resolve`"); System.out.println("~"); return; } catch (InvalidDatabaseRevision e) { // see later } System.out.print( "~ '" + moduleRoot.getKey() + "' Application revision is " + application.revision + " [" + application.hash.substring(0, 7) + "]"); System.out.println( " and '" + moduleRoot.getKey() + "' Database revision is " + database.revision + " [" + database.hash.substring(0, 7) + "]"); System.out.println("~"); /** Evolution script * */ List<Evolution> evolutions = getEvolutionScript(moduleRoot.getKey(), moduleRoot.getValue()); if (evolutions.isEmpty()) { System.out.println("~ Your database is up to date for " + moduleRoot.getKey()); System.out.println("~"); } else { if ("apply".equals(System.getProperty("mode"))) { System.out.println("~ Applying evolutions for " + moduleRoot.getKey() + ":"); System.out.println(""); System.out.println( "# ------------------------------------------------------------------------------"); System.out.println(""); System.out.println(toHumanReadableScript(evolutions)); System.out.println(""); System.out.println( "# ------------------------------------------------------------------------------"); System.out.println(""); if (applyScript(true, moduleRoot.getKey(), moduleRoot.getValue())) { System.out.println("~"); System.out.println( "~ Evolutions script successfully applied for " + moduleRoot.getKey() + "!"); System.out.println("~"); } else { System.out.println("~"); System.out.println("~ Can't apply evolutions for " + moduleRoot.getKey() + "..."); System.out.println("~"); } } else if ("markApplied".equals(System.getProperty("mode"))) { if (applyScript(false, moduleRoot.getKey(), moduleRoot.getValue())) { System.out.println( "~ Evolutions script marked as applied for " + moduleRoot.getKey() + "!"); System.out.println("~"); } else { System.out.println("~ Can't apply evolutions for " + moduleRoot.getKey() + "..."); System.out.println("~"); } } else { System.out.println("~ Your database needs evolutions for " + moduleRoot.getKey() + "!"); System.out.println(""); System.out.println( "# ------------------------------------------------------------------------------"); System.out.println(""); System.out.println(toHumanReadableScript(evolutions)); System.out.println(""); System.out.println( "# ------------------------------------------------------------------------------"); System.out.println(""); System.out.println( "~ Run `play evolutions:apply` to automatically apply this script to the database"); System.out.println( "~ or apply it yourself and mark it done using `play evolutions:markApplied`"); System.out.println("~"); System.exit(-1); } } } }