diff --git a/lib/taskana-core/src/main/java/org/taskana/configuration/DbScriptRunner.java b/lib/taskana-core/src/main/java/org/taskana/configuration/DbScriptRunner.java
index 5031a1899..3b3a47711 100644
--- a/lib/taskana-core/src/main/java/org/taskana/configuration/DbScriptRunner.java
+++ b/lib/taskana-core/src/main/java/org/taskana/configuration/DbScriptRunner.java
@@ -16,27 +16,28 @@ public class DbScriptRunner {
private static final Logger logger = LoggerFactory.getLogger(DbScriptRunner.class);
private static final String SQL = "/sql";
- private static final String DB_STRUCTURE = SQL + "/db-structure.sql";
+ private static final String DB_SCHEMA = SQL + "/taskana-schema.sql";
+ private static final String DB_SCHEMA_DETECTION = SQL + "/schema-detection.sql";
private DataSource dataSource;
+ private StringWriter outWriter = new StringWriter();
+ private PrintWriter logWriter = new PrintWriter(outWriter);
+ private StringWriter errorWriter = new StringWriter();
+ private PrintWriter errorLogWriter = new PrintWriter(errorWriter);
+
public DbScriptRunner(DataSource dataSource) {
super();
this.dataSource = dataSource;
}
+
/**
* Run all db scripts
*
* @throws SQLException
*/
public void run() throws SQLException {
- StringWriter outWriter = new StringWriter();
- PrintWriter logWriter = new PrintWriter(outWriter);
-
- StringWriter errorWriter = new StringWriter();
- PrintWriter errorLogWriter = new PrintWriter(errorWriter);
-
ScriptRunner runner = new ScriptRunner(dataSource.getConnection());
logger.debug(dataSource.getConnection().getMetaData().toString());
@@ -44,7 +45,9 @@ public class DbScriptRunner {
runner.setLogWriter(logWriter);
runner.setErrorLogWriter(errorLogWriter);
- runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_STRUCTURE)));
+ if (!isSchemaPreexisting(runner)) {
+ runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_SCHEMA)));
+ }
runner.closeConnection();
logger.debug(outWriter.toString());
@@ -53,6 +56,17 @@ public class DbScriptRunner {
}
}
+ private boolean isSchemaPreexisting(ScriptRunner runner) {
+ try {
+ runner.runScript(new InputStreamReader(this.getClass().getResourceAsStream(DB_SCHEMA_DETECTION)));
+ } catch (Exception e) {
+ logger.debug("Schema does not exist.");
+ return false;
+ }
+ logger.debug("Schema does exist.");
+ return true;
+ }
+
public DataSource getDataSource() {
return dataSource;
}
diff --git a/lib/taskana-core/src/main/resources/sql/db-structure.sql b/lib/taskana-core/src/main/resources/sql/db-structure.sql
deleted file mode 100644
index 0921284de..000000000
--- a/lib/taskana-core/src/main/resources/sql/db-structure.sql
+++ /dev/null
@@ -1,77 +0,0 @@
-CREATE TABLE IF NOT EXISTS TASK(
- ID varchar(36) NOT NULL,
- TENANT_ID varchar(36) NULL,
- CREATED TIMESTAMP NULL,
- CLAIMED TIMESTAMP NULL,
- COMPLETED TIMESTAMP NULL,
- MODIFIED TIMESTAMP NULL,
- PLANNED TIMESTAMP NULL,
- DUE TIMESTAMP NULL,
- NAME varchar(1024) NULL,
- DESCRIPTION varchar(4096) NULL,
- PRIORITY INT NULL,
- STATE varchar(20) NULL,
- TYPE varchar(255) NULL,
- WORKBASKETID varchar(36) NULL,
- OWNER varchar(255) NULL,
- PRIMARY_OBJ_REF_ID varchar(36) NULL,
- IS_READ bit NOT NULL,
- IS_TRANSFERRED bit NOT NULL,
- PRIMARY KEY (ID)
-);
-
-CREATE TABLE IF NOT EXISTS WORKBASKET(
- ID varchar(36) NOT NULL,
- TENANT_ID varchar(36) NULL,
- CREATED TIMESTAMP NULL,
- MODIFIED TIMESTAMP NULL,
- NAME varchar(255) NULL,
- DESCRIPTION varchar(255) NULL,
- OWNER varchar(255) NULL,
- PRIMARY KEY (ID),
- CONSTRAINT UC_NAME UNIQUE (NAME)
-);
-
-CREATE TABLE IF NOT EXISTS DISTRIBUTION_TARGETS(
- SOURCE_ID varchar(36) NOT NULL,
- TARGET_ID varchar(36) NOT NULL,
- PRIMARY KEY (SOURCE_ID, TARGET_ID)
-);
-
-CREATE TABLE IF NOT EXISTS CLASSIFICATION(
- ID varchar(36) NOT NULL,
- TENANT_ID varchar(36) NULL,
- PARENT_CLASSIFICATION_ID varchar(255),
- CATEGORY varchar(255),
- TYPE varchar(255),
- CREATED DATE NULL,
- MODIFIED DATE NULL,
- NAME varchar(255) NULL,
- DESCRIPTION varchar(255) NULL,
- PRIORITY INT NULL,
- SERVICE_LEVEL varchar(255) NULL,
- PRIMARY KEY (ID)
-);
-
-CREATE TABLE IF NOT EXISTS WORKBASKET_ACCESS_LIST(
- ID varchar(36) NOT NULL,
- WORKBASKET_ID varchar(36) NOT NULL,
- USER_ID varchar(255) NULL,
- GROUP_ID varchar(255) NULL,
- READ bit NOT NULL,
- OPEN bit NOT NULL,
- APPEND bit NOT NULL,
- TRANSFER bit NOT NULL,
- DISTRIBUTE bit NOT NULL,
- PRIMARY KEY (ID)
-);
-
-CREATE TABLE IF NOT EXISTS OBJECT_REFERENCE(
- ID varchar(36) NOT NULL,
- TENANT_ID varchar(36) NULL,
- COMPANY varchar(32) NOT NULL,
- SYSTEM varchar(32) NOT NULL,
- SYSTEM_INSTANCE varchar(32) NOT NULL,
- TYPE varchar(32) NOT NULL,
- VALUE varchar(128) NOT NULL
-);
diff --git a/lib/taskana-core/src/main/resources/sql/schema-detection.sql b/lib/taskana-core/src/main/resources/sql/schema-detection.sql
new file mode 100644
index 000000000..7dd6924e3
--- /dev/null
+++ b/lib/taskana-core/src/main/resources/sql/schema-detection.sql
@@ -0,0 +1 @@
+SELECT COUNT(*) FROM TASKANA_SCHEMA_VERSION;
diff --git a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql
new file mode 100644
index 000000000..dfe1775fa
--- /dev/null
+++ b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql
@@ -0,0 +1,74 @@
+CREATE TABLE TASKANA_SCHEMA_VERSION(
+ ID VARCHAR(36) NOT NULL,
+ VERSION VARCHAR(255) NOT NULL,
+ PRIMARY KEY (ID)
+);
+INSERT INTO TASKANA_SCHEMA_VERSION VALUES ('1', '0.0.1');
+
+CREATE TABLE TASK(
+ ID VARCHAR(36) NOT NULL,
+ TENANT_ID VARCHAR(36) NULL,
+ CREATED TIMESTAMP NULL,
+ CLAIMED TIMESTAMP NULL,
+ COMPLETED TIMESTAMP NULL,
+ MODIFIED TIMESTAMP NULL,
+ PLANNED TIMESTAMP NULL,
+ DUE TIMESTAMP NULL,
+ NAME VARCHAR(1024) NULL,
+ DESCRIPTION VARCHAR(4096) NULL,
+ PRIORITY INT NULL,
+ STATE VARCHAR(20) NULL,
+ TYPE VARCHAR(255) NULL,
+ WORKBASKETID VARCHAR(36) NULL,
+ OWNER VARCHAR(255) NULL,
+ PRIMARY_OBJ_REF_ID varchar(36) NULL,
+ IS_READ BOOLEAN NOT NULL,
+ IS_TRANSFERRED BOOLEAN NOT NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE WORKBASKET(
+ ID VARCHAR(36) NOT NULL,
+ TENANT_ID VARCHAR(36) NULL,
+ CREATED TIMESTAMP NULL,
+ MODIFIED TIMESTAMP NULL,
+ NAME VARCHAR(255) NOT NULL,
+ DESCRIPTION VARCHAR(255) NULL,
+ OWNER VARCHAR(255) NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT UC_NAME UNIQUE (NAME)
+);
+
+CREATE TABLE DISTRIBUTION_TARGETS(
+ SOURCE_ID VARCHAR(36) NOT NULL,
+ TARGET_ID VARCHAR(36) NOT NULL,
+ PRIMARY KEY (SOURCE_ID, TARGET_ID)
+);
+
+CREATE TABLE CLASSIFICATION(
+ ID VARCHAR(36) NOT NULL,
+ TENANT_ID VARCHAR(36) NULL,
+ PARENT_CLASSIFICATION_ID VARCHAR(255),
+ CATEGORY VARCHAR(255),
+ TYPE VARCHAR(255),
+ CREATED DATE NULL,
+ MODIFIED DATE NULL,
+ NAME VARCHAR(255) NULL,
+ DESCRIPTION VARCHAR(255) NULL,
+ PRIORITY INT NULL,
+ SERVICE_LEVEL VARCHAR(255) NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE WORKBASKET_ACCESS_LIST(
+ ID VARCHAR(36) NOT NULL,
+ WORKBASKET_ID VARCHAR(36) NOT NULL,
+ USER_ID VARCHAR(255) NULL,
+ GROUP_ID VARCHAR(255) NULL,
+ READ BOOLEAN NOT NULL,
+ OPEN BOOLEAN NOT NULL,
+ APPEND BOOLEAN NOT NULL,
+ TRANSFER BOOLEAN NOT NULL,
+ DISTRIBUTE BOOLEAN NOT NULL,
+ PRIMARY KEY (ID)
+);
diff --git a/lib/taskana-core/src/test/java/org/taskana/impl/integration/WorkbasketServiceImplIntTest.java b/lib/taskana-core/src/test/java/org/taskana/impl/integration/WorkbasketServiceImplIntTest.java
index af602db40..a63f7e3c4 100644
--- a/lib/taskana-core/src/test/java/org/taskana/impl/integration/WorkbasketServiceImplIntTest.java
+++ b/lib/taskana-core/src/test/java/org/taskana/impl/integration/WorkbasketServiceImplIntTest.java
@@ -41,6 +41,7 @@ public class WorkbasketServiceImplIntTest {
int before = workbasketServiceImpl.getWorkbaskets().size();
Workbasket workbasket = new Workbasket();
workbasket.setId("1");
+ workbasket.setName("Megabasket");
workbasketServiceImpl.createWorkbasket(workbasket);
Assert.assertEquals(before + 1, workbasketServiceImpl.getWorkbaskets().size());
}
@@ -50,12 +51,15 @@ public class WorkbasketServiceImplIntTest {
int before = workbasketServiceImpl.getWorkbaskets().size();
Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0");
+ workbasket0.setName("Superbasket");
workbasketServiceImpl.createWorkbasket(workbasket0);
Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1");
+ workbasket1.setName("Megabasket");
workbasketServiceImpl.createWorkbasket(workbasket1);
Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2");
+ workbasket2.setName("Hyperbasket");
workbasketServiceImpl.createWorkbasket(workbasket2);
Assert.assertEquals(before + 3, workbasketServiceImpl.getWorkbaskets().size());
}
@@ -64,12 +68,15 @@ public class WorkbasketServiceImplIntTest {
public void testSelectWorkbasket() throws WorkbasketNotFoundException, NotAuthorizedException {
Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0");
+ workbasket0.setName("Superbasket");
workbasketServiceImpl.createWorkbasket(workbasket0);
Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1");
+ workbasket1.setName("Megabasket");
workbasketServiceImpl.createWorkbasket(workbasket1);
Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2");
+ workbasket2.setName("Hyperbasket");
workbasketServiceImpl.createWorkbasket(workbasket2);
Workbasket foundWorkbasket = workbasketServiceImpl.getWorkbasket("2");
Assert.assertEquals("2", foundWorkbasket.getId());
@@ -84,10 +91,13 @@ public class WorkbasketServiceImplIntTest {
public void testSelectWorkbasketWithDistribution() throws WorkbasketNotFoundException, NotAuthorizedException {
Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0");
+ workbasket0.setName("Superbasket");
Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1");
+ workbasket1.setName("Megabasket");
Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2");
+ workbasket2.setName("Hyperbasket");
workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1);
@@ -101,16 +111,20 @@ public class WorkbasketServiceImplIntTest {
public void testUpdateWorkbasket() throws Exception {
Workbasket workbasket0 = new Workbasket();
workbasket0.setId("0");
+ workbasket0.setName("Superbasket");
Workbasket workbasket1 = new Workbasket();
workbasket1.setId("1");
+ workbasket1.setName("Megabasket");
Workbasket workbasket2 = new Workbasket();
workbasket2.setId("2");
+ workbasket2.setName("Hyperbasket");
workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1);
workbasketServiceImpl.createWorkbasket(workbasket2);
Workbasket workbasket3 = new Workbasket();
workbasket3.setId("3");
+ workbasket3.setName("hm ... irgend ein basket");
workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3);
Thread.sleep(100);
diff --git a/lib/taskana-spring-example/pom.xml b/lib/taskana-spring-example/pom.xml
index db98be019..ddb85326c 100644
--- a/lib/taskana-spring-example/pom.xml
+++ b/lib/taskana-spring-example/pom.xml
@@ -34,7 +34,11 @@
org.springframework
spring-tx
-
+
+ com.h2database
+ h2
+
+
org.taskana
taskana-core
diff --git a/lib/taskana-spring-example/src/main/resources/application.properties b/lib/taskana-spring-example/src/main/resources/application.properties
new file mode 100644
index 000000000..ed9c0ff88
--- /dev/null
+++ b/lib/taskana-spring-example/src/main/resources/application.properties
@@ -0,0 +1 @@
+logging.level.org.taskana=DEBUG
diff --git a/lib/taskana-spring-example/src/main/resources/applicationContext.xml b/lib/taskana-spring-example/src/main/resources/applicationContext.xml
index 3229062bf..d619bd682 100644
--- a/lib/taskana-spring-example/src/main/resources/applicationContext.xml
+++ b/lib/taskana-spring-example/src/main/resources/applicationContext.xml
@@ -5,8 +5,7 @@
-
+
@@ -18,31 +17,14 @@
-
-
-
+
-
-
-
-
-
-
+
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/lib/taskana-spring/src/main/java/org/taskana/SpringTaskanaEngineImpl.java b/lib/taskana-spring/src/main/java/org/taskana/SpringTaskanaEngineImpl.java
index 49dbfece6..9c1c0bdbd 100644
--- a/lib/taskana-spring/src/main/java/org/taskana/SpringTaskanaEngineImpl.java
+++ b/lib/taskana-spring/src/main/java/org/taskana/SpringTaskanaEngineImpl.java
@@ -5,29 +5,21 @@ import java.sql.SQLException;
import javax.annotation.PostConstruct;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
-import org.springframework.transaction.PlatformTransactionManager;
import org.taskana.configuration.SpringTaskanaEngineConfiguration;
import org.taskana.impl.TaskanaEngineImpl;
+/**
+ * This class configures the TaskanaEngine for spring
+ */
public class SpringTaskanaEngineImpl extends TaskanaEngineImpl {
public SpringTaskanaEngineImpl(SpringTaskanaEngineConfiguration taskanaEngineConfiguration) {
super(taskanaEngineConfiguration);
}
- private PlatformTransactionManager transactionManager;
-
@PostConstruct
public void init() throws SQLException {
this.transactionFactory = new ManagedTransactionFactory();
}
- public PlatformTransactionManager getTransactionManager() {
- return transactionManager;
- }
-
- public void setTransactionManager(PlatformTransactionManager transactionManager) {
- this.transactionManager = transactionManager;
- }
-
}
diff --git a/lib/taskana-spring/src/main/java/org/taskana/configuration/SpringTaskanaEngineConfiguration.java b/lib/taskana-spring/src/main/java/org/taskana/configuration/SpringTaskanaEngineConfiguration.java
index 66d039494..03ee319e9 100644
--- a/lib/taskana-spring/src/main/java/org/taskana/configuration/SpringTaskanaEngineConfiguration.java
+++ b/lib/taskana-spring/src/main/java/org/taskana/configuration/SpringTaskanaEngineConfiguration.java
@@ -2,19 +2,19 @@ package org.taskana.configuration;
import java.sql.SQLException;
-import javax.annotation.PostConstruct;
import javax.sql.DataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.taskana.SpringTaskanaEngineImpl;
import org.taskana.TaskanaEngine;
+/**
+ * This class configures the TaskanaEngineConfiguration for spring
+ */
public class SpringTaskanaEngineConfiguration extends TaskanaEngineConfiguration {
- @PostConstruct
- public void init() throws SQLException {
- dbScriptRunner = new DbScriptRunner(this.dataSource);
- dbScriptRunner.run();
- }
+ private static final Logger logger = LoggerFactory.getLogger(SpringTaskanaEngineConfiguration.class);
/**
* This method creates the Spring-based TaskanaEngine without an
@@ -23,10 +23,19 @@ public class SpringTaskanaEngineConfiguration extends TaskanaEngineConfiguration
* @return the TaskanaEngine
* @throws SQLException
*/
- public TaskanaEngine buildTaskanaEngine() throws SQLException {
+ public TaskanaEngine buildTaskanaEngine() {
+ this.useContainerManagedTransactions = true;
+
+ dbScriptRunner = new DbScriptRunner(this.dataSource);
+ try {
+ dbScriptRunner.run();
+ } catch (SQLException e) {
+ logger.error("The taskana schema could not be created: ", e);
+ }
+
return new SpringTaskanaEngineImpl(this);
}
-
+
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}