From 0ce2c141c0e23c856137932a56bcc409a1d67e5b Mon Sep 17 00:00:00 2001 From: BVier 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); + } } }