Author: tchemit Date: 2010-01-29 04:28:10 +0100 (Fri, 29 Jan 2010) New Revision: 1786 Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationCallback.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationEngine.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/MigrationService.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-en_GB.properties trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-fr_FR.properties Log: Evolution #291: Improve manual migration service logs Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationCallback.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationCallback.java 2010-01-26 21:08:09 UTC (rev 1785) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationCallback.java 2010-01-29 03:28:10 UTC (rev 1786) @@ -32,6 +32,7 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.util.StringUtil; import org.nuiton.util.Version; import static org.nuiton.i18n.I18n._; @@ -78,17 +79,23 @@ * @param ctxt topia context de la transaction en cours * @param dbVersion database version * @param applicationVersion application version - * @param versions all versions knwon by service - * @return migration aggrement + * @param showSql drapeau pour afficher les requete sql + * @param showProgression drapeau pour afficher la progression + * @param versions all versions knwon by service @return migration aggrement + * @return le choix de migration executee */ - public MigrationChoice doMigration(TopiaContext ctxt, Version dbVersion, Version applicationVersion, List<Version> versions) { + public MigrationChoice doMigration(TopiaContext ctxt, Version dbVersion, + Version applicationVersion, + boolean showSql, + boolean showProgression, + List<Version> versions) { MigrationChoice result = MigrationChoice.NO_MIGRATION; boolean doMigrate = askUser(dbVersion, applicationVersion, versions); if (doMigrate) { - TopiaContextImplementor tx = null; + TopiaContextImplementor tx; for (Version v : versions) { // ouverture d'une connexion direct JDBC sur la base @@ -100,17 +107,41 @@ String methodName = "migrateTo_" + v.getValidName(); - Method m = getClass().getMethod(methodName, TopiaContextImplementor.class); - m.setAccessible(true); + Method m; + try { + m = getClass().getMethod(methodName, + TopiaContextImplementor.class, + boolean.class, + boolean.class); - log.info(_("topia.migration.start.migrate" ,v)); - - if (log.isDebugEnabled()) { - log.debug("launch method " + methodName); + m.setAccessible(true); + + log.info(_("topia.migration.start.migrate", v)); + + if (log.isDebugEnabled()) { + log.debug("launch method " + methodName); + } + + m.invoke(this, tx, showSql, showProgression); + + + } catch (NoSuchMethodException e) { + // try with no boolean values (for legacy callbacks) + m = getClass().getMethod(methodName, + TopiaContextImplementor.class); + + m.setAccessible(true); + + log.info(_("topia.migration.start.migrate", v)); + + if (log.isDebugEnabled()) { + log.debug("launch method " + methodName); + } + + m.invoke(this, tx); + } - m.invoke(this, tx); - // commit des modifs tx.commitTransaction(); @@ -136,20 +167,72 @@ return result; } - public void executeSQL(TopiaContextImplementor tx, final String... sqls) throws TopiaException { + public void executeSQL(TopiaContextImplementor tx, final String... sqls) + throws TopiaException { + executeSQL(tx, false, false, sqls); + } + /** + * 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(TopiaContextImplementor tx, + final boolean showSql, + final boolean showProgression, + final String... sqls) throws TopiaException { + + if (log.isInfoEnabled()) { + + log.info(_("topia.migration.start.sqls", sqls.length)); + } + if (showSql) { + StringBuilder buffer = new StringBuilder(); + for (String s : sqls) { + buffer.append(s).append("\n"); + } + log.info("SQL TO EXECUTE :\n" + + "--------------------------------------------------------------------------------\n" + + "--------------------------------------------------------------------------------\n" + + buffer.toString() + + "--------------------------------------------------------------------------------\n" + + "--------------------------------------------------------------------------------\n" + ); + } tx.getHibernate().doWork(new Work() { @Override public void execute(Connection connection) throws SQLException { + int index = 0; + int max = sqls.length; for (final String sql : sqls) { - log.info(sql); + long t0 = System.nanoTime(); + if ((log.isInfoEnabled())) { + String message = ""; + + if (showProgression) { + message = _("topia.migration.start.sql", (++index), max); + } + if (showSql) { + message += "\n" + sql; + } + if (showProgression || showSql) { + + log.info(message); + } + } PreparedStatement sta = connection.prepareStatement(sql); sta.executeUpdate(); - if(log.isDebugEnabled()) { - log.debug("done " + sql); + sta.close(); + if (log.isDebugEnabled()) { + String message = _("topia.migration.end.sql", (++index), max, StringUtil.convertTime(System.nanoTime() - t0)); + log.debug(message); } - sta.close(); } } }); Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationEngine.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationEngine.java 2010-01-26 21:08:09 UTC (rev 1785) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/ManualMigrationEngine.java 2010-01-29 03:28:10 UTC (rev 1786) @@ -85,6 +85,14 @@ */ static public final String MIGRATION_MIGRATE_ON_INIT = "topia.service.migration.no.migrate.on.init"; /** + * Pour afficher les requetes sql executees + */ + static public final String MIGRATION_SHOW_SQL = "showSql"; + /** + * Pour afficher la progression des requetes sql executees + */ + static public final String MIGRATION_SHOW_PROGRESSION = "showProgression"; + /** * Configuration hibernate ne mappant que l'entite version (initialise en pre-init) */ protected Configuration versionConfiguration; @@ -124,6 +132,14 @@ * Un drapeau pour savoir si le service a bien ete initialise (i.e a bien fini la methode preInit) */ protected boolean init = false; + /** + * Un drapeau pour afficher les requetes sql executees + */ + protected boolean showSql = false; + /** + * Un drapeau pour afficher la progression des requetes sql executees + */ + protected boolean showProgression= false; @Override public Class<?>[] getPersistenceClasses() { @@ -148,6 +164,8 @@ String[] dirs = config.getProperty(TopiaContextImpl.TOPIA_PERSISTENCE_DIRECTORIES, "").split(","); this.migrateOnInit = Boolean.valueOf(config.getProperty(MIGRATION_MIGRATE_ON_INIT, "true")); + this.showSql = Boolean.valueOf(config.getProperty(MIGRATION_SHOW_SQL, "false")); + this.showProgression = Boolean.valueOf(config.getProperty(MIGRATION_SHOW_PROGRESSION, "false")); String modelName = config.getProperty(MIGRATION_MODEL_NAME, null); if (version == null || version.trim().isEmpty()) { @@ -168,7 +186,7 @@ // enregistrement du callback try { - Class<?> clazz = (Class<?>) Class.forName(callbackStr); + Class<?> clazz = Class.forName(callbackStr); this.callback = (ManualMigrationCallback) clazz.newInstance(); } catch (ClassNotFoundException e) { @@ -343,6 +361,8 @@ MigrationChoice bMigrationWanted = callback.doMigration(rootContext, dbVersion, applicationVersion, + showSql, + showProgression, versionsToApply); if (log.isDebugEnabled()) { Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/MigrationService.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/MigrationService.java 2010-01-26 21:08:09 UTC (rev 1785) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/MigrationService.java 2010-01-29 03:28:10 UTC (rev 1786) @@ -39,51 +39,51 @@ * Renvoie le chemin du ficier de configuration utilise * @return Chemin du fichier de configuration */ - public String getConfigurationFile(); + String getConfigurationFile(); /** * Modifie le fichier de configuration * @param configurationFile Chemin du fichier de configuration d'hibernate */ - public void setConfigurationFile(String configurationFile); + void setConfigurationFile(String configurationFile); /** * Retourne la configuration * @return la configuration * @see org.hibernate.cfg.Configuration */ - public Configuration getConfiguration(); + Configuration getConfiguration(); /** * Renseigne la configuration * @param configuration la configuration * @see org.hibernate.cfg.Configuration */ - public void setConfiguration(Configuration configuration); + void setConfiguration(Configuration configuration); /** * Retourne le repertoire des anciens schemas * @return Le repertoire des anciens schemas */ - public String getMappingsDirectory(); + String getMappingsDirectory(); /** * Modifie le chemin du dossier des anciens schemas * @param mappingsDirectory Le chemin du dossier des anciens schemas */ - public void setMappingsDirectory(String mappingsDirectory); + void setMappingsDirectory(String mappingsDirectory); /** * Change la version courante * @param version la version */ - public void setApplicationVersion(String version); + void setApplicationVersion(String version); /** * Ajoute un callbackhandler pour la migration * @param callbackHandler le controleur a ajouter */ - public void addMigrationCallbackHandler(MigrationCallbackHandler callbackHandler); + void addMigrationCallbackHandler(MigrationCallbackHandler callbackHandler); /** * Migrate the schema @@ -91,5 +91,5 @@ * @return <tt>true</tt> si la migration a ete effectuee et s'est bien passee, <tt>false</tt> sinon * @throws MigrationServiceException dans le cas ou le schema ne peut pas etre mis a jour */ - public boolean migrateSchema() throws MigrationServiceException; + boolean migrateSchema() throws MigrationServiceException; } Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java 2010-01-26 21:08:09 UTC (rev 1785) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationService.java 2010-01-29 03:28:10 UTC (rev 1786) @@ -38,7 +38,7 @@ /** * Nom du service */ - static final String SERVICE_NAME = "migration"; + String SERVICE_NAME = "migration"; boolean migrateSchema() throws MigrationServiceException; } Modified: trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-en_GB.properties =================================================================== --- trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-en_GB.properties 2010-01-26 21:08:09 UTC (rev 1785) +++ trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-en_GB.properties 2010-01-29 03:28:10 UTC (rev 1786) @@ -1,6 +1,7 @@ topia.migration.available.versions=Available versions \: %1$s topia.migration.db.not.versionned=Database version not found, so database schema is considered as V0 topia.migration.detected.db.version=detected database version \: %1$s +topia.migration.end.sql=Request [%1$-4s/%2$-4s] executed in %3$s. topia.migration.migrate.versions=Versions to apply \: %1$s topia.migration.migration.incomplete=Database migration not succesfully ended \! topia.migration.saving.db.version=Saving new database version \: %1$s @@ -8,3 +9,5 @@ topia.migration.skip.migration.no.version.to.apply=No version to apply, no migration needed. topia.migration.start.migrate=Start migration to version %1$s topia.migration.start.migration=Starting Topia Migration Service - Application version \: %1$s, Database version \: %2$s +topia.migration.start.sql=Executing request [%1$-4s/%2$-4s] +topia.migration.start.sqls=Will execute %1$s requests... Modified: trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-fr_FR.properties =================================================================== --- trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-fr_FR.properties 2010-01-26 21:08:09 UTC (rev 1785) +++ trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration-fr_FR.properties 2010-01-29 03:28:10 UTC (rev 1786) @@ -1,6 +1,7 @@ -topia.migration.available.versions=Mises \u00E0 jour disponibles \: %1$s +topia.migration.available.versions=Versions d\u00E9tect\u00E9es \: %1$s topia.migration.db.not.versionned=La base de donn\u00E9es n'est pas versionn\u00E9e, elle sera consid\u00E9r\u00E9e en version 0. topia.migration.detected.db.version=Version de base d\u00E9tect\u00E9e \: %1$s +topia.migration.end.sql=Requ\u00EAte [%1$-4s/%2$-4s] ex\u00E9cut\u00E9e en %3$s. topia.migration.migrate.versions=Mises \u00E0 jour \u00E0 installer \: %1$s topia.migration.migration.incomplete=La migration de la base s'est mal d\u00E9roul\u00E9 ou a \u00E9t\u00E9 annul\u00E9e\! topia.migration.saving.db.version=Sauvegarde de la nouvelle version de la base \: %1$s @@ -8,3 +9,5 @@ topia.migration.skip.migration.no.version.to.apply=Aucune version \u00E0 appliquer, aucune migration n\u00E9cessaire. topia.migration.start.migrate=D\u00E9marrage de la mise \u00E0 jour vers la version %1$s topia.migration.start.migration=D\u00E9marrage du service de mise \u00E0 jour - version de l'application \: %1$s, version de la base \: %2$s +topia.migration.start.sql=Execution de la requ\u00EAte [%1$-4s/%2$-4s] +topia.migration.start.sqls=Va executer %1$s requ\u00EAte(s)...