diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IMigrationStep.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IMigrationStep.java index 5ad82aad28563d592e826a4e9217390b0d367010..692c648d2294ff96c7ce1ed18ec9562095018395 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IMigrationStep.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IMigrationStep.java @@ -22,10 +22,20 @@ import ch.systemsx.cisd.common.exceptions.Status; /** * An interface which must be implemented by all classes providing Java code that performs migration - * steps prior (pre) or after (post) the SQL migration script ran. Canonical name of class - * implementing this interface (preceded by <code>-- JAVA </code>) may be included in the first - * line of SQL migration script. <Example: - * <code> -- JAVA ch.systemsx.cisd.openbis.db.migration.MigrationStepFrom022To023</code> + * steps prior (<i>pre</i>) or after (<i>post</i>) the SQL migration script ran. + * <p> + * Canonical name of class implementing this interface (preceded by <code>-- JAVA </code>) may be + * included in the first line of SQL migration script.<br> + * Example: + * + * <pre> + * -- JAVA ch.systemsx.cisd.openbis.db.migration.MigrationStepFrom022To023 + * </pre> + * + * </p> + * <p> + * Implementations are expected to be stateless and have a public empty constructor. + * </p> * * @author Izabela Adamczyk */ diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/JavaMigrationStepExecutor.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/JavaMigrationStepExecutor.java index ac35f7f331f8ebbc4434e08254139307eb718b79..c45e1a2a5e4ef570902cc39e17d82c028bce903b 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/JavaMigrationStepExecutor.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/JavaMigrationStepExecutor.java @@ -27,10 +27,12 @@ import org.springframework.jdbc.core.support.JdbcDaoSupport; import ch.systemsx.cisd.common.Script; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.Status; +import ch.systemsx.cisd.common.utilities.ClassUtils; /** - * Allows to extract {@link IMigrationStep} class from migration script and run the pre- and post- - * migration java steps. Example of the script containing Java Migration Step definition: + * Allows to extract {@link IMigrationStep} class from migration script and run the <i>pre</i>- and + * <i>post</i>- migration java steps.<br> + * Example of the script containing Java Migration Step definition: * * <pre> * -- JAVA ch.systemsx.cisd.openbis.db.migration.MigrationStepFrom022To023 @@ -89,55 +91,36 @@ public class JavaMigrationStepExecutor extends JdbcDaoSupport implements IJavaMi { msg = - String - .format( - "Migration script '%s' contains more than one Java Migration Steps.", - sqlScript.getName()); - + String.format("Migration script '%s' contains more " + + "than one Java Migration Steps.", sqlScript.getName()); } else { msg = - String - .format( - "Java Migration Step should be defined in the first non-blank line of the migration script '%s'.", - sqlScript.getName()); - + String.format("Java Migration Step should be defined in the first " + + "non-blank line of the migration script '%s'.", sqlScript + .getName()); } - throw new EnvironmentFailureException(msg); } } - @SuppressWarnings("unchecked") - private IMigrationStep tryExtractMigrationStepFromLine(final String lineToProcess) + private final IMigrationStep tryExtractMigrationStepFromLine(final String lineToProcess) { final String line = StringUtils.deleteWhitespace(lineToProcess); if (line != null && line.startsWith(JAVA_MIGRATION_STEP_PREFIX)) { final String className = StringUtils.removeStart(line, JAVA_MIGRATION_STEP_PREFIX); - String msg; try { - final Class clazz = Class.forName(className); - final Object object = clazz.newInstance(); - return (IMigrationStep) object; + return (IMigrationStep) ClassUtils.createInstance(Class.forName(className)); } catch (final ClassNotFoundException ex) { - msg = String.format("Class '%s' not found.", className); - - } catch (final InstantiationException ex) + throw new EnvironmentFailureException(String.format("Class '%s' not found.", + className)); + } catch (final RuntimeException ex) { - msg = - String.format( - "Cannot instantiate class '%s' (EnvironmentFailureException).", - className); - } catch (final IllegalAccessException ex) - { - msg = - String.format("Cannot instantiate class '%s' (IllegalAccessException).", - className); + throw new EnvironmentFailureException(ex.getMessage()); } - throw new EnvironmentFailureException(msg); } else { return null; @@ -155,7 +138,6 @@ public class JavaMigrationStepExecutor extends JdbcDaoSupport implements IJavaMi final IMigrationStep migrationStep = tryExtractMigrationStep(sqlScript); if (migrationStep != null) { - final Status preMigrationStatus = migrationStep.performPreMigration(getJdbcTemplate()); return preMigrationStatus; } else