From 6f7b5b7e8c14e5af15f3f6b50b00fd3366782925 Mon Sep 17 00:00:00 2001
From: BVier <26220150+BVier@users.noreply.github.com>
Date: Wed, 26 Sep 2018 12:01:10 +0200
Subject: [PATCH] TSK-721: Enable connection to db2-instance
Enables Taskana-rest-spring-exxample to run against an DB2-Database.
Introduced Flag to define if sample data should be inserted
---
.../configuration/DbSchemaCreator.java | 22 +++++---
.../taskana_schema_update_0.9.2_to_1.0.2.sql | 26 ++++++++-
...skana_schema_update_0.9.2_to_1.0.2_db2.sql | 56 +++++++++++++++++++
..._schema_update_0.9.2_to_1.0.2_postgres.sql | 56 +++++++++++++++++++
rest/taskana-rest-spring-example/pom.xml | 16 ++++++
.../taskana/rest/ExampleRestApplication.java | 12 +++-
6 files changed, 177 insertions(+), 11 deletions(-)
create mode 100644 lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_db2.sql
create mode 100644 lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_postgres.sql
diff --git a/lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java b/lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java
index 5d34e1e5f..e28e695ec 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java
@@ -61,13 +61,10 @@ public class DbSchemaCreator {
*/
public void run() throws SQLException {
Connection connection = dataSource.getConnection();
- ScriptRunner runner = new ScriptRunner(connection);
- LOGGER.debug(connection.getMetaData().toString());
- runner.setStopOnError(true);
- runner.setLogWriter(logWriter);
- runner.setErrorLogWriter(errorLogWriter);
+ LOGGER.debug("Using database of type {} with url '{}'", connection.getMetaData().getDatabaseProductName(), connection.getMetaData().getURL());
+ ScriptRunner runner = getScriptRunnerInstance(connection);
try {
- if (!isSchemaPreexisting(runner, connection.getMetaData().getDatabaseProductName())) {
+ if (!isSchemaPreexisting(connection)) {
BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass()
.getResourceAsStream(selectDbScriptFileName(connection.getMetaData().getDatabaseProductName()))));
runner.runScript(getSqlSchemaNameParsed(reader));
@@ -81,10 +78,19 @@ public class DbSchemaCreator {
}
}
- private boolean isSchemaPreexisting(ScriptRunner runner, String productName) {
+ private ScriptRunner getScriptRunnerInstance(Connection connection) {
+ ScriptRunner runner = new ScriptRunner(connection);
+ runner.setStopOnError(true);
+ runner.setLogWriter(logWriter);
+ runner.setErrorLogWriter(errorLogWriter);
+ return runner;
+ }
+
+ private boolean isSchemaPreexisting(Connection connection) {
+ ScriptRunner runner = getScriptRunnerInstance(connection);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass()
- .getResourceAsStream(selectDbSchemaDetectionScript(productName))));
+ .getResourceAsStream(selectDbSchemaDetectionScript(connection.getMetaData().getDatabaseProductName()))));
runner.runScript(getSqlSchemaNameParsed(reader));
} catch (Exception e) {
LOGGER.debug("Schema does not exist.");
diff --git a/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2.sql b/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2.sql
index d7fb0defa..8effecb08 100644
--- a/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2.sql
+++ b/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2.sql
@@ -26,7 +26,31 @@ CREATE TABLE SCHEDULED_JOB(
LOCK_EXPIRES TIMESTAMP NULL,
TYPE VARCHAR(32) NULL,
RETRY_COUNT INTEGER NOT NULL,
- ARGUMENTS TEXT NULL,
+ ARGUMENTS CLOB NULL,
PRIMARY KEY (JOB_ID)
);
+DROP SEQUENCE JOB_SEQ;
+
+CREATE SEQUENCE SCHEDULED_JOB_SEQ
+ MINVALUE 1
+ START WITH 1
+ INCREMENT BY 1
+ CACHE 10;
+
+ALTER TABLE CLASSIFICATION
+ ADD COLUMN PARENT_KEY
+ VARCHAR(32) NOT NULL DEFAULT '';
+
+UPDATE CLASSIFICATION C
+ SET C.PARENT_KEY =
+ (SELECT KEY FROM CLASSIFICATION WHERE ID = C.PARENT_ID)
+ WHERE C.PARENT_ID != '';
+
+ALTER TABLE TASK
+ ADD COLUMN CALLBACK_INFO
+ CLOB NULL DEFAULT NULL;
+
+ALTER TABLE WORKBASKET_ACCESS_LIST
+ ADD COLUMN ACCESS_NAME
+ VARCHAR(255) NULL DEFAULT NULL;
diff --git a/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_db2.sql b/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_db2.sql
new file mode 100644
index 000000000..8effecb08
--- /dev/null
+++ b/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_db2.sql
@@ -0,0 +1,56 @@
+-- this script migrates the schema only.
+-- data is not migrated, as this is currently not necessary.
+
+SET SCHEMA %schemaName%;
+
+DROP TABLE TASKANA_SCHEMA_VERSION;
+
+CREATE TABLE TASKANA_SCHEMA_VERSION(
+ ID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
+ VERSION VARCHAR(255) NOT NULL,
+ CREATED TIMESTAMP NOT NULL,
+ PRIMARY KEY (ID)
+);
+INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('0.9.2', CURRENT_TIMESTAMP);
+INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('1.0.2', CURRENT_TIMESTAMP);
+
+DROP TABLE JOB;
+
+CREATE TABLE SCHEDULED_JOB(
+ JOB_ID INTEGER NOT NULL,
+ PRIORITY INTEGER NULL,
+ CREATED TIMESTAMP NULL,
+ DUE TIMESTAMP NULL,
+ STATE VARCHAR(32) NULL,
+ LOCKED_BY VARCHAR(32) NULL,
+ LOCK_EXPIRES TIMESTAMP NULL,
+ TYPE VARCHAR(32) NULL,
+ RETRY_COUNT INTEGER NOT NULL,
+ ARGUMENTS CLOB NULL,
+ PRIMARY KEY (JOB_ID)
+);
+
+DROP SEQUENCE JOB_SEQ;
+
+CREATE SEQUENCE SCHEDULED_JOB_SEQ
+ MINVALUE 1
+ START WITH 1
+ INCREMENT BY 1
+ CACHE 10;
+
+ALTER TABLE CLASSIFICATION
+ ADD COLUMN PARENT_KEY
+ VARCHAR(32) NOT NULL DEFAULT '';
+
+UPDATE CLASSIFICATION C
+ SET C.PARENT_KEY =
+ (SELECT KEY FROM CLASSIFICATION WHERE ID = C.PARENT_ID)
+ WHERE C.PARENT_ID != '';
+
+ALTER TABLE TASK
+ ADD COLUMN CALLBACK_INFO
+ CLOB NULL DEFAULT NULL;
+
+ALTER TABLE WORKBASKET_ACCESS_LIST
+ ADD COLUMN ACCESS_NAME
+ VARCHAR(255) NULL DEFAULT NULL;
diff --git a/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_postgres.sql b/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_postgres.sql
new file mode 100644
index 000000000..96800ee66
--- /dev/null
+++ b/lib/taskana-core/src/main/resources/sql/taskana_schema_update_0.9.2_to_1.0.2_postgres.sql
@@ -0,0 +1,56 @@
+-- this script migrates the schema only.
+-- data is not migrated, as this is currently not necessary.
+
+SET SCHEMA %schemaName%;
+
+DROP TABLE TASKANA_SCHEMA_VERSION;
+
+CREATE TABLE TASKANA_SCHEMA_VERSION(
+ ID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
+ VERSION VARCHAR(255) NOT NULL,
+ CREATED TIMESTAMP NOT NULL,
+ PRIMARY KEY (ID)
+);
+INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('0.9.2', CURRENT_TIMESTAMP);
+INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('1.0.2', CURRENT_TIMESTAMP);
+
+DROP TABLE JOB;
+
+CREATE TABLE SCHEDULED_JOB(
+ JOB_ID INTEGER NOT NULL,
+ PRIORITY INTEGER NULL,
+ CREATED TIMESTAMP NULL,
+ DUE TIMESTAMP NULL,
+ STATE VARCHAR(32) NULL,
+ LOCKED_BY VARCHAR(32) NULL,
+ LOCK_EXPIRES TIMESTAMP NULL,
+ TYPE VARCHAR(32) NULL,
+ RETRY_COUNT INTEGER NOT NULL,
+ ARGUMENTS TEXT NULL,
+ PRIMARY KEY (JOB_ID)
+);
+
+DROP SEQUENCE JOB_SEQ;
+
+CREATE SEQUENCE SCHEDULED_JOB_SEQ
+ MINVALUE 1
+ START WITH 1
+ INCREMENT BY 1
+ CACHE 10;
+
+ALTER TABLE CLASSIFICATION
+ ADD COLUMN PARENT_KEY
+ VARCHAR(32) NOT NULL DEFAULT '';
+
+UPDATE CLASSIFICATION C
+ SET C.PARENT_KEY =
+ (SELECT KEY FROM CLASSIFICATION WHERE ID = C.PARENT_ID)
+ WHERE C.PARENT_ID != '';
+
+ALTER TABLE TASK
+ ADD COLUMN CALLBACK_INFO
+ TEXT NULL DEFAULT NULL;
+
+ALTER TABLE WORKBASKET_ACCESS_LIST
+ ADD COLUMN ACCESS_NAME
+ VARCHAR(255) NULL DEFAULT NULL;
diff --git a/rest/taskana-rest-spring-example/pom.xml b/rest/taskana-rest-spring-example/pom.xml
index 25273d0d4..34a2e8b14 100644
--- a/rest/taskana-rest-spring-example/pom.xml
+++ b/rest/taskana-rest-spring-example/pom.xml
@@ -67,6 +67,12 @@
h2
1.4.197
+
+
+ com.ibm.db2.jcc
+ db2jcc4
+ 11.1.1.1
+
+
+
+ novatec public
+ novatec-repository
+ https://repository.novatec-gmbh.de/content/repositories/novatec/
+
+
diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java
index dfcf13352..023bb7967 100644
--- a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java
+++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java
@@ -38,6 +38,12 @@ public class ExampleRestApplication {
@Value("${taskana.schemaName:TASKANA}")
public String schemaName;
+ @Value("${generateSampleData:true}")
+ public boolean generateSampleData;
+
+ @Autowired
+ private SampleDataGenerator sampleDataGenerator;
+
@Autowired
private LdapClient ldapClient;
@@ -69,8 +75,7 @@ public class ExampleRestApplication {
@Bean
@DependsOn("taskanaEngineConfiguration") // generate sample data after schema was inserted
public SampleDataGenerator generateSampleData(DataSource dataSource) throws SQLException {
- SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource);
- sampleDataGenerator.generateSampleData(schemaName);
+ SampleDataGenerator sampleDataGenerator = new SampleDataGenerator(dataSource);
return sampleDataGenerator;
}
@@ -79,5 +84,8 @@ public class ExampleRestApplication {
if (!ldapClient.useLdap()) {
AccessIdController.setLdapCache(ldapCacheTest);
}
+ if (generateSampleData) {
+ sampleDataGenerator.generateSampleData(schemaName);
+ }
}
}