integrated logic for existing schema
This commit is contained in:
parent
9755ff98ca
commit
51ae3c97e3
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
);
|
|
@ -0,0 +1 @@
|
|||
SELECT COUNT(*) FROM TASKANA_SCHEMA_VERSION;
|
|
@ -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)
|
||||
);
|
|
@ -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);
|
||||
|
|
|
@ -34,7 +34,11 @@
|
|||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-tx</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.taskana</groupId>
|
||||
<artifactId>taskana-core</artifactId>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
logging.level.org.taskana=DEBUG
|
|
@ -5,8 +5,7 @@
|
|||
|
||||
<tx:annotation-driven transaction-manager="transactionManager" />
|
||||
|
||||
<bean id="dataSource"
|
||||
class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
|
||||
<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
|
||||
<property name="targetDataSource">
|
||||
<bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
|
||||
<property name="driverClass" value="org.h2.Driver" />
|
||||
|
@ -18,31 +17,14 @@
|
|||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
|
||||
<property name="targetDataSource"> <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
|
||||
<property name="driverClass" value="com.ibm.db2.jcc.DB2Driver" /> <property
|
||||
name="url" value="jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;"
|
||||
/> <property name="username" value="eh" /> <property name="password" value=""
|
||||
/> </bean> </property> </bean> -->
|
||||
|
||||
<bean id="transactionManager"
|
||||
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
|
||||
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
|
||||
<property name="dataSource" ref="dataSource" />
|
||||
</bean>
|
||||
|
||||
<bean id="taskEngineConfiguration" class="SpringTaskanaEngineConfiguration">
|
||||
<property name="dataSource" ref="dataSource" />
|
||||
<property name="transactionManager" ref="transactionManager" />
|
||||
</bean>
|
||||
|
||||
<bean id="taskEngineConfiguration" class="SpringTaskanaEngineConfiguration">
|
||||
<bean id="taskanaEngineConfiguration" class="org.taskana.configuration.SpringTaskanaEngineConfiguration">
|
||||
<property name="dataSource" ref="dataSource" />
|
||||
</bean>
|
||||
|
||||
<bean id="taskEngine" factory-bean="taskEngineConfiguration"
|
||||
factory-method="createTaskEngineConfiguration">
|
||||
<property name="transactionManager" ref="transactionManager" />
|
||||
</bean>
|
||||
<bean id="taskService" factory-bean="taskEngine" factory-method="getTaskService" />
|
||||
|
||||
<bean id="taskanaEngine" factory-bean="taskanaEngineConfiguration" factory-method="buildTaskanaEngine" />
|
||||
<bean id="taskService" factory-bean="taskanaEngine" factory-method="getTaskService" />
|
||||
</beans>
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue