From: <fg...@us...> - 2007-02-01 10:57:17
|
Revision: 163 http://svn.sourceforge.net/openutils/?rev=163&view=rev Author: fgiust Date: 2007-02-01 02:57:14 -0800 (Thu, 01 Feb 2007) Log Message: ----------- initial import Added Paths: ----------- trunk/openutils-dbmigration/src/main/java/it/ trunk/openutils-dbmigration/src/main/java/it/openutils/ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManager.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManagerImpl.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbVersionManager.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DefaultDbVersionManagerImpl.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/BaseDbTask.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/DbTask.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericConditionalTask.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericScriptBasedConditionalTask.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/ScriptBasedUnconditionalTask.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/DbUpdate.java trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/ScriptBasedDbUpdate.java Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManager.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManager.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManager.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,17 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration; + +/** + * @author fgiust + * @version $Id$ + */ +public interface DbSetupManager +{ + + /** + * Updates the DDL + */ + void updateDDL(); +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManager.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManagerImpl.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManagerImpl.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManagerImpl.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,186 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration; + +import it.openutils.migration.task.setup.DbTask; +import it.openutils.migration.task.update.DbUpdate; + +import java.util.Comparator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import javax.sql.DataSource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataAccessException; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallbackWithoutResult; +import org.springframework.transaction.support.TransactionTemplate; + + +/** + * DB setup manager: handles db setup and upgrade. + * @author fgiust + * @version $Id$ + */ +public class DbSetupManagerImpl implements DbSetupManager +{ + + /** + * Logger. + */ + private static Logger log = LoggerFactory.getLogger(DbSetupManagerImpl.class); + + private List<DbTask> setupTasks; + + private List<DbUpdate> updateTasks; + + private DataSource dataSource; + + private DbVersionManager versionManager; + + private TransactionTemplate transactionTemplate; + + /** + * Sets the versionManager. + * @param versionManager the versionManager to set + */ + public void setVersionManager(DbVersionManager versionManager) + { + this.versionManager = versionManager; + } + + /** + * Sets the transactionTemplate. + * @param transactionTemplate the transactionTemplate to set + */ + public void setTransactionTemplate(TransactionTemplate transactionTemplate) + { + this.transactionTemplate = transactionTemplate; + } + + /** + * Setter for <code>dataSource</code>. + * @param dataSource The dataSource to set. + */ + public void setDataSource(DataSource dataSource) + { + this.dataSource = dataSource; + } + + /** + * Sets the tasks. + * @param setupTasks the tasks to set + */ + public void setSetupTasks(List<DbTask> setupTasks) + { + this.setupTasks = setupTasks; + } + + /** + * Sets the updateTasks. + * @param updateTasks the updateTasks to set + */ + public void setUpdateTasks(List<DbUpdate> updateTasks) + { + this.updateTasks = updateTasks; + } + + /** + * @see it.openutils.dbupdate.DbSetupManager#updateDDL() + */ + public void updateDDL() + { + + transactionTemplate.execute(new TransactionCallbackWithoutResult() + { + + @Override + protected void doInTransactionWithoutResult(TransactionStatus status) + { + if (setupTasks != null) + { + executeSetupTasks(); + } + if (updateTasks != null) + { + executeUpdateTasks(); + } + } + }); + + } + + /** + * + */ + private void executeSetupTasks() + { + log.info("Preparing db, checking {} setup tasks.", setupTasks.size()); + for (DbTask task : setupTasks) + { + log.info(task.getDescription()); + task.execute(dataSource); + } + + } + + /** + * + */ + private void executeUpdateTasks() + { + + int initialVersion = versionManager.getCurrentVersion(); + int currentVersion = initialVersion; + + Set<DbUpdate> sortedMigrations = new TreeSet<DbUpdate>(new Comparator<DbUpdate>() + { + + public int compare(DbUpdate o1, DbUpdate o2) + { + return o1.getVersion() - o2.getVersion(); + } + + }); + sortedMigrations.addAll(updateTasks); + + log.info("Found {} migrations, looking for updates to run...", updateTasks.size()); + for (DbUpdate update : sortedMigrations) + { + if (update.getVersion() > currentVersion) + { + currentVersion = update.getVersion(); + + log.info("Preparing migration to version {}. {}", update.getVersion(), update.getDescription()); + try + { + update.execute(dataSource); + } + catch (DataAccessException e) + { + log.error("\n***********\n\n\nDatabase upgrade from version " + + initialVersion + + " to version " + + currentVersion + + " FAILED!\n\n\n***********\n", e); + } + versionManager.setNewVersion(currentVersion); + } + } + if (currentVersion != initialVersion) + { + log.info("Database upgraded from version {} to version {}", initialVersion, currentVersion); + } + else + { + log.info("No Database upgrade is needed. Current version is {} ", initialVersion); + } + // org.springframework.jdbc.BadSqlGrammarException: + // java.sql.SQLException: ORA-00959: tablespace 'XDM_DATA' inesistente + + } +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbSetupManagerImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbVersionManager.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbVersionManager.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbVersionManager.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,25 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration; + +/** + * @author fgiust + * @version $Id$ + */ +public interface DbVersionManager +{ + + /** + * Returns the current version for the db, usually reading from a configuration table. This should also handle table + * initialization. + * @return current db version + */ + int getCurrentVersion(); + + /** + * Saves a new version for the db. + * @param version new version + */ + void setNewVersion(int version); +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DbVersionManager.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DefaultDbVersionManagerImpl.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DefaultDbVersionManagerImpl.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DefaultDbVersionManagerImpl.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,104 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration; + +import javax.sql.DataSource; + +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + + +/** + * <pre> + * <bean class="it.openutils.migration.DefaultDbVersionManagerImpl"> + * <property name="dataSource" ref="dataSource" /> + * <property name="versionQuery"> + * <value>SELECT DBVERSION FROM DBVERSION</value> + * </property> + * <property name="versionUpdate"> + * <value>UPDATE DBVERSION SET DBVERSION = ?</value> + * </property> + * <property name="versionCreate"> + * <value>INSERT INTO DBVERSION(DBVERSION) VALUES (0)</value> + * </property> + * </bean> + * </pre> + * + * @author fgiust + * @version $Id$ + */ +public class DefaultDbVersionManagerImpl implements DbVersionManager +{ + + private String versionQuery; + + private String versionUpdate; + + private String versionCreate; + + private DataSource dataSource; + + /** + * Sets the versionCreate. + * @param versionCreate the versionCreate to set + */ + public void setVersionCreate(String versionCreate) + { + this.versionCreate = versionCreate; + } + + /** + * Sets the versionQuery. + * @param versionQuery the versionQuery to set + */ + public void setVersionQuery(String versionQuery) + { + this.versionQuery = versionQuery; + } + + /** + * Sets the versionUpdate. + * @param versionUpdate the versionUpdate to set + */ + public void setVersionUpdate(String versionUpdate) + { + this.versionUpdate = versionUpdate; + } + + /** + * Sets the dataSource. + * @param dataSource the dataSource to set + */ + public void setDataSource(DataSource dataSource) + { + this.dataSource = dataSource; + } + + /** + * {@inheritDoc} + */ + public int getCurrentVersion() + { + SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource); + int initialVersion = 0; + try + { + initialVersion = jdbcTemplate.queryForInt(versionQuery); + } + catch (EmptyResultDataAccessException e) + { + jdbcTemplate.update(versionCreate); + } + return initialVersion; + } + + /** + * {@inheritDoc} + */ + public void setNewVersion(int version) + { + new SimpleJdbcTemplate(dataSource).update(versionUpdate, version); + } + +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/DefaultDbVersionManagerImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/BaseDbTask.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/BaseDbTask.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/BaseDbTask.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,32 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.setup; + +/** + * @author fgiust + * @version $Id$ + */ +public abstract class BaseDbTask implements DbTask +{ + + private String description; + + /** + * {@inheritDoc} + */ + public String getDescription() + { + return description; + } + + /** + * {@inheritDoc} + */ + public void setDescription(String description) + { + this.description = description; + + } + +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/BaseDbTask.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/DbTask.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/DbTask.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/DbTask.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,27 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.setup; + +import javax.sql.DataSource; + + +/** + * @author fgiust + * @version $Id$ + */ +public interface DbTask +{ + + /** + * Returns a description for this task + * @return task description + */ + String getDescription(); + + /** + * Execute this db task. + * @param dataSource javax.sql.datasource + */ + void execute(DataSource dataSource); +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/DbTask.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericConditionalTask.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericConditionalTask.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericConditionalTask.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,69 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.setup; + +import javax.sql.DataSource; + +import org.apache.commons.lang.StringUtils; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + + +/** + * @author fgiust + * @version $Id$ + */ +public class GenericConditionalTask extends BaseDbTask implements DbTask +{ + + private String check; + + private String ddl; + + /** + * {@inheritDoc} + */ + public void setDdl(String ddls) + { + this.ddl = ddls; + } + + /** + * {@inheritDoc} + */ + public void setCheck(String name) + { + this.check = name; + } + + /** + * Returns the check. + * @return the check + */ + public String getCheck() + { + return check; + } + + /** + * {@inheritDoc} + */ + public void execute(DataSource dataSource) + { + SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource); + + int result = jdbcTemplate.queryForInt(getCheck()); + if (result == 0) + { + String[] ddls = StringUtils.split(ddl, ';'); + for (String statement : ddls) + { + if (StringUtils.isNotBlank(statement)) + { + jdbcTemplate.update(statement); + } + } + } + } + +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericConditionalTask.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericScriptBasedConditionalTask.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericScriptBasedConditionalTask.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericScriptBasedConditionalTask.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,122 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.setup; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import javax.sql.DataSource; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + + +/** + * @author fgiust + * @version $Id$ + */ +public class GenericScriptBasedConditionalTask implements DbTask +{ + + /** + * Logger. + */ + private static Logger log = LoggerFactory.getLogger(GenericScriptBasedConditionalTask.class); + + protected List<Resource> scripts; + + private String check; + + /** + * Sets the scripts. + * @param scripts the scripts to set + */ + public void setScripts(List<Resource> scripts) + { + this.scripts = scripts; + } + + /** + * Sets the check. + * @param check the check to set + */ + public void setCheck(String check) + { + this.check = check; + } + + protected String objectNameFromFileName(Resource script) + { + return StringUtils.substringBeforeLast(script.getFilename(), "."); + } + + /** + * {@inheritDoc} + */ + public String getDescription() + { + // @todo add better description and avoid NPEs + return "Checking " + objectNameFromFileName(scripts.get(0)); + } + + /** + * {@inheritDoc} + */ + public void execute(DataSource dataSource) + { + + SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource); + + for (Resource script : scripts) + { + int result = jdbcTemplate.queryForInt(check, this.objectNameFromFileName(script)); + if (result == 0) + { + if (script == null || !script.exists()) + { + log.error("Unable to execute db task \"{}\", script \"{}\" not found.", getDescription(), script); + return; + } + + String scriptContent; + InputStream is = null; + + try + { + is = script.getInputStream(); + scriptContent = IOUtils.toString(is, "UTF8"); + } + catch (IOException e) + { + log.error( + "Unable to execute db task \"{}\", script \"{}\" can't be read.", + getDescription(), + script); + return; + } + finally + { + IOUtils.closeQuietly(is); + } + + String[] ddls = StringUtils.split(scriptContent, ";"); + + for (String ddl : ddls) + { + if (StringUtils.isNotBlank(ddl)) + { + log.debug("Executing:\n{}", ddl); + jdbcTemplate.update(ddl); + } + } + } + } + + } +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/GenericScriptBasedConditionalTask.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/ScriptBasedUnconditionalTask.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/ScriptBasedUnconditionalTask.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/ScriptBasedUnconditionalTask.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,85 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.setup; + +import java.io.IOException; +import java.util.List; + +import javax.sql.DataSource; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + + +/** + * @author fgiust + * @version $Id$ + */ +public class ScriptBasedUnconditionalTask extends BaseDbTask implements DbTask +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(ScriptBasedUnconditionalTask.class); + + private List<Resource> scripts; + + /** + * Sets the scripts. + * @param scripts the scripts to set + */ + public void setScripts(List<Resource> scripts) + { + this.scripts = scripts; + } + + /** + * {@inheritDoc} + */ + public void execute(DataSource dataSource) + { + + for (Resource script : scripts) + { + if (script == null || !script.exists()) + { + log.error("Unable to execute db task \"{}\", script \"{}\" not found.", getDescription(), script); + return; + } + + String scriptContent; + + try + { + // @todo we should read line by line, avoiding to cache all the script in memory + scriptContent = IOUtils.toString(script.getInputStream(), "UTF8"); + } + catch (IOException e) + { + log.error("Unable to execute db task \"{}\", script \"{}\" can't be read.", getDescription(), script); + return; + } + + String[] ddls = StringUtils.split(scriptContent, ";"); + SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource); + + for (String ddl : ddls) + { + if (StringUtils.isNotBlank(ddl)) + { + log.debug("Executing:\n{}", ddl); + jdbcTemplate.update(ddl); + } + } + + } + + } + +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/setup/ScriptBasedUnconditionalTask.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/DbUpdate.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/DbUpdate.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/DbUpdate.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,22 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.update; + +import it.openutils.migration.task.setup.DbTask; + + +/** + * @author fgiust + * @version $Id$ + */ +public interface DbUpdate extends DbTask +{ + + /** + * Returns the version for this update. THe task will be executed only if the current db version is lower than this. + * @return target version for this upgrade. + */ + int getVersion(); + +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/DbUpdate.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/ScriptBasedDbUpdate.java =================================================================== --- trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/ScriptBasedDbUpdate.java (rev 0) +++ trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/ScriptBasedDbUpdate.java 2007-02-01 10:57:14 UTC (rev 163) @@ -0,0 +1,125 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.migration.task.update; + +import it.openutils.migration.task.setup.ScriptBasedUnconditionalTask; + +import java.io.IOException; +import java.io.InputStream; + +import javax.sql.DataSource; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + + +/** + * @author fgiust + * @version $Id$ + */ +public class ScriptBasedDbUpdate implements DbUpdate +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(ScriptBasedUnconditionalTask.class); + + private Resource script; + + private int version; + + private String description; + + /** + * Sets the script. + * @param script the script to set + */ + public void setScript(Resource script) + { + this.script = script; + } + + /** + * {@inheritDoc} + */ + public int getVersion() + { + return version; + } + + /** + * Sets the version. + * @param version the version to set + */ + public void setVersion(int version) + { + this.version = version; + } + + /** + * {@inheritDoc} + */ + public String getDescription() + { + return description; + } + + /** + * Sets the description. + * @param description the description to set + */ + public void setDescription(String description) + { + this.description = description; + } + + /** + * {@inheritDoc} + */ + public void execute(DataSource dataSource) + { + if (script == null || !script.exists()) + { + log.error("Unable to execute db task \"{}\", script \"{}\" not found.", getDescription(), script); + return; + } + + String scriptContent; + InputStream is = null; + + try + { + is = script.getInputStream(); + scriptContent = IOUtils.toString(is, "UTF8"); + } + catch (IOException e) + { + log.error("Unable to execute db task \"{}\", script \"{}\" can't be read.", getDescription(), script); + return; + } + finally + { + IOUtils.closeQuietly(is); + } + + String[] ddls = StringUtils.split(scriptContent, ";"); + SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource); + + for (String ddl : ddls) + { + if (StringUtils.isNotBlank(ddl)) + { + log.debug("Executing:\n{}", ddl); + jdbcTemplate.update(ddl); + } + } + + } + +} Property changes on: trunk/openutils-dbmigration/src/main/java/it/openutils/migration/task/update/ScriptBasedDbUpdate.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |