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
This commit is contained in:
BVier 2018-09-26 12:01:10 +02:00 committed by Holger Hagen
parent afe618eba4
commit 6f7b5b7e8c
6 changed files with 177 additions and 11 deletions

View File

@ -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.");

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -67,6 +67,12 @@
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc4</artifactId>
<version>11.1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
<!-- Postgresql driver dependency
<dependency>
@ -193,4 +199,14 @@
</plugins>
</build>
<!--
this repository is needed to fetch com.ibm.db2.jcc
-->
<repositories>
<repository>
<id>novatec public</id>
<name>novatec-repository</name>
<url>https://repository.novatec-gmbh.de/content/repositories/novatec/</url>
</repository>
</repositories>
</project>

View File

@ -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);
}
}
}