TSK-516 verify schema version at startup
This commit is contained in:
parent
71a42b58fd
commit
4dedc761f1
|
@ -5,10 +5,12 @@ import java.io.PrintWriter;
|
|||
import java.io.StringWriter;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.ibatis.jdbc.ScriptRunner;
|
||||
import org.apache.ibatis.jdbc.SqlRunner;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -76,6 +78,40 @@ public class DbSchemaCreator {
|
|||
return true;
|
||||
}
|
||||
|
||||
public boolean isValidSchemaVersion(String expectedVersion) {
|
||||
SqlRunner runner = null;
|
||||
try {
|
||||
Connection connection = dataSource.getConnection();
|
||||
runner = new SqlRunner(connection);
|
||||
LOGGER.debug(connection.getMetaData().toString());
|
||||
|
||||
String query = "select VERSION from TASKANA.TASKANA_SCHEMA_VERSION where "
|
||||
+ "VERSION = (select max(VERSION) from TASKANA.TASKANA_SCHEMA_VERSION) "
|
||||
+ "AND VERSION = '" + expectedVersion + "'";
|
||||
|
||||
Map<String, Object> queryResult = runner.selectOne(query, new Object[] {});
|
||||
if (queryResult == null || queryResult.isEmpty()) {
|
||||
LOGGER.error(
|
||||
"Schema version not valid. The VERSION property in table TASKANA.TASKANA_SCHEMA_VERSION has not the expected value {}",
|
||||
expectedVersion);
|
||||
return false;
|
||||
} else {
|
||||
LOGGER.debug("Schema version is valid.");
|
||||
return true;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LOGGER.error(
|
||||
"Schema version not valid. The VERSION property in table TASKANA.TASKANA_SCHEMA_VERSION has not the expected value {}",
|
||||
expectedVersion);
|
||||
return false;
|
||||
} finally {
|
||||
if (runner != null) {
|
||||
runner.closeConnection();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DataSource getDataSource() {
|
||||
return dataSource;
|
||||
}
|
||||
|
|
|
@ -49,13 +49,15 @@ public class TaskanaEngineConfiguration {
|
|||
private static final String TASKANA_DOMAINS_PROPERTY = "taskana.domains";
|
||||
private static final String TASKANA_CLASSIFICATION_TYPES_PROPERTY = "taskana.classification.types";
|
||||
private static final String TASKANA_CLASSIFICATION_CATEGORIES_PROPERTY = "taskana.classification.categories";
|
||||
protected static final String TASKANA_SCHEMA_VERSION = "0.9.2"; // must match the VERSION value in table
|
||||
// TASKANA.TASKANA_SCHEMA_VERSION
|
||||
|
||||
// Taskana properties file
|
||||
protected String propertiesFileName = TASKANA_PROPERTIES;
|
||||
|
||||
// Taskana datasource configuration
|
||||
protected DataSource dataSource;
|
||||
protected DbSchemaCreator dbScriptRunner;
|
||||
protected DbSchemaCreator dbSchemaCreator;
|
||||
|
||||
// Taskana role configuration
|
||||
protected String rolesSeparator = TASKANA_ROLES_SEPARATOR;
|
||||
|
@ -114,8 +116,13 @@ public class TaskanaEngineConfiguration {
|
|||
// use default In Memory datasource
|
||||
this.dataSource = createDefaultDataSource();
|
||||
}
|
||||
dbScriptRunner = new DbSchemaCreator(this.dataSource);
|
||||
dbScriptRunner.run();
|
||||
dbSchemaCreator = new DbSchemaCreator(this.dataSource);
|
||||
dbSchemaCreator.run();
|
||||
|
||||
if (!dbSchemaCreator.isValidSchemaVersion(TASKANA_SCHEMA_VERSION)) {
|
||||
throw new SystemException(
|
||||
"The Database Schema Version doesn't match the expected version " + TASKANA_SCHEMA_VERSION);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ CREATE TABLE TASKANA.TASKANA_SCHEMA_VERSION(
|
|||
VERSION VARCHAR(255) NOT NULL,
|
||||
PRIMARY KEY (ID)
|
||||
);
|
||||
-- The VERSION value must match the value of TaskanaEngineConfiguration.TASKANA_SCHEMA_VERSION
|
||||
INSERT INTO TASKANA.TASKANA_SCHEMA_VERSION VALUES ('1', '0.9.2');
|
||||
|
||||
CREATE TABLE TASKANA.CLASSIFICATION(
|
||||
|
|
|
@ -4,9 +4,6 @@ import java.sql.SQLException;
|
|||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import pro.taskana.SpringTaskanaEngineImpl;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
|
||||
|
@ -15,8 +12,6 @@ import pro.taskana.TaskanaEngine;
|
|||
*/
|
||||
public class SpringTaskanaEngineConfiguration extends TaskanaEngineConfiguration {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SpringTaskanaEngineConfiguration.class);
|
||||
|
||||
public SpringTaskanaEngineConfiguration(DataSource dataSource, boolean useManagedTransactions,
|
||||
boolean securityEnabled) throws SQLException {
|
||||
super(dataSource, useManagedTransactions, securityEnabled);
|
||||
|
@ -35,14 +30,6 @@ public class SpringTaskanaEngineConfiguration extends TaskanaEngineConfiguration
|
|||
@Override
|
||||
public TaskanaEngine buildTaskanaEngine() {
|
||||
this.useManagedTransactions = true;
|
||||
|
||||
dbScriptRunner = new DbSchemaCreator(this.dataSource);
|
||||
try {
|
||||
dbScriptRunner.run();
|
||||
} catch (SQLException e) {
|
||||
logger.error("The taskana schema could not be created: ", e);
|
||||
}
|
||||
|
||||
return new SpringTaskanaEngineImpl(this);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue