TSK-513 Integrate taskana-spring-txtest in taskana-spring-example

This commit is contained in:
BerndBreier 2018-06-12 12:12:57 +02:00 committed by Holger Hagen
parent ecd88201fb
commit cdcaa6b2fe
15 changed files with 152 additions and 257 deletions

View File

@ -18,6 +18,5 @@
<module>taskana-spring</module>
<module>taskana-cdi-example</module>
<module>taskana-spring-example</module>
<module>taskana-spring-txtest</module>
</modules>
</project>

View File

@ -1,65 +1,80 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring-example</artifactId>
<version>0.9.2-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath />
</parent>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring-example</artifactId>
<version>0.9.2-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath />
</parent>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Package as an executable jar/war -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<name>${project.groupId}:${project.artifactId}</name>
<url>http://taskana.pro</url>
<description>The Taskana Spring sample application.</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Package as an executable jar/war -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<name>${project.groupId}:${project.artifactId}</name>
<url>http://taskana.pro</url>
<description>The Taskana Spring sample application.</description>
</project>

View File

@ -6,13 +6,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.DomainNotFoundException;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketAlreadyExistException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
@Component
@ -22,13 +26,28 @@ public class ExampleBootstrap {
@Autowired
private TaskService taskService;
@Autowired
private TaskanaEngine taskanaEngine;
@PostConstruct
public void test() throws TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, InvalidStateException, InvalidOwnerException, TaskAlreadyExistException,
InvalidArgumentException {
InvalidArgumentException, DomainNotFoundException, InvalidWorkbasketException, WorkbasketAlreadyExistException,
ClassificationAlreadyExistException {
System.out.println("---------------------------> Start App");
Task task = taskService.newTask("1");
Workbasket wb = taskanaEngine.getWorkbasketService().newWorkbasket("workbasket", "DOMAIN_A");
wb.setName("workbasket");
wb.setType(WorkbasketType.GROUP);
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = taskanaEngine.getClassificationService().newClassification("TEST",
"DOMAIN_A",
"TASK");
taskanaEngine.getClassificationService().createClassification(classification);
Task task = taskanaEngine.getTaskService().newTask(wb.getId());
task.setName("Spring example task");
task.setClassificationKey(classification.getKey());
ObjectReference objRef = new ObjectReference();
objRef.setCompany("aCompany");
objRef.setSystem("aSystem");

View File

@ -1,22 +0,0 @@
package pro.taskana;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@ImportResource("applicationContext.xml")
public class SpringBootWebApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootWebApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootWebApplication.class, args);
}
}

View File

@ -1,4 +1,4 @@
package pro.taskana.springtx;
package pro.taskana;
import java.sql.SQLException;
@ -23,7 +23,6 @@ import pro.taskana.configuration.SpringTaskanaEngineConfiguration;
/**
* Class to set /load configuration for Taskana Library
*
* @author v101536 (Kilian Burkhardt)
*/
@Configuration
@EnableTransactionManagement()
@ -31,13 +30,13 @@ public class TaskanaConfig {
@Profile("inmemorydb")
@Configuration
@PropertySource("classpath:postkorb-inmemorydb.properties")
@PropertySource("classpath:customdb.properties")
static class InmemoryDBProperties {
}
@Bean
@Primary
@ConfigurationProperties(prefix = "postkorb.datasource")
@ConfigurationProperties(prefix = "customdb.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@ -88,4 +87,8 @@ public class TaskanaConfig {
return taskanaEngine.getClassificationService();
}
@Bean
public ExampleBootstrap exampleBootstrap() {
return new ExampleBootstrap() ;
}
}

View File

@ -1,4 +1,4 @@
package pro.taskana.springtx;
package pro.taskana;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@ -7,7 +7,6 @@ import org.springframework.context.annotation.Import;
/**
* Class to start an Application to test Taskana
*
* @author v101536 (Kilian Burkhardt)
*/
@SpringBootApplication
@Import(TaskanaConfig.class)

View File

@ -1,4 +1,4 @@
package pro.taskana.springtx;
package pro.taskana;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
@ -19,7 +19,7 @@ import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.util.IdGenerator;
/**
* @author Titus Meyer (v081065)
* Rest Controller.
*/
@RestController
public class TaskanaTestController {
@ -45,9 +45,9 @@ public class TaskanaTestController {
}
@Transactional(readOnly = true, rollbackFor = Exception.class)
@RequestMapping("/geschbuch-tests")
public @ResponseBody Integer geschbuchTests() {
return getGeschbuchTests();
@RequestMapping("/customdb-tests")
public @ResponseBody Integer customdbTests() {
return getCustomdbTests();
}
@Transactional(rollbackFor = Exception.class)
@ -83,21 +83,21 @@ public class TaskanaTestController {
}
@Transactional(rollbackFor = Exception.class)
@RequestMapping("/geschbuch")
public @ResponseBody String transactionGeschbuch(
@RequestMapping("/customdb")
public @ResponseBody String transactionCustomdb(
@RequestParam(value = "rollback", defaultValue = "false") String rollback)
throws InvalidWorkbasketException, NotAuthorizedException,
WorkbasketAlreadyExistException, DomainNotFoundException {
taskanaEngine.getWorkbasketService().createWorkbasket(createWorkBasket("key1", "workbasket1"));
taskanaEngine.getWorkbasketService().createWorkbasket(createWorkBasket("key2", "workbasket2"));
jdbcTemplate.execute("INSERT INTO GESCHBUCH.TEST VALUES ('1', 'test')");
jdbcTemplate.execute("INSERT INTO GESCHBUCH.TEST VALUES ('2', 'test2')");
jdbcTemplate.execute("INSERT INTO CUSTOMDB.TEST VALUES ('1', 'test')");
jdbcTemplate.execute("INSERT INTO CUSTOMDB.TEST VALUES ('2', 'test2')");
if (Boolean.valueOf(rollback)) {
throw new RuntimeException("workbaskets: " + getWorkbaskets() + ", tests: " + getGeschbuchTests());
throw new RuntimeException("workbaskets: " + getWorkbaskets() + ", tests: " + getCustomdbTests());
} else {
return "workbaskets: " + getWorkbaskets() + ", tests: " + getGeschbuchTests();
return "workbaskets: " + getWorkbaskets() + ", tests: " + getCustomdbTests();
}
}
@ -105,7 +105,7 @@ public class TaskanaTestController {
@RequestMapping("/cleanup")
public @ResponseBody String cleanup() {
jdbcTemplate.execute("DELETE FROM WORKBASKET");
jdbcTemplate.execute("DELETE FROM GESCHBUCH.TEST");
jdbcTemplate.execute("DELETE FROM CUSTOMDB.TEST");
System.err.println("cleaned workbasket and test tables");
return "cleaned workbasket and test tables";
}
@ -115,8 +115,8 @@ public class TaskanaTestController {
return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM WORKBASKET", Integer.class);
}
private int getGeschbuchTests() {
return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM GESCHBUCH.TEST", Integer.class);
private int getCustomdbTests() {
return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM CUSTOMDB.TEST", Integer.class);
}
private Workbasket createWorkBasket(String key, String name) {

View File

@ -1,30 +0,0 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<tx:annotation-driven transaction-manager="transactionManager" />
<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" />
<property name="url"
value="jdbc:h2:mem:task-engine;DB_CLOSE_DELAY=1000;IGNORECASE=TRUE;LOCK_MODE=0" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="taskanaEngineConfiguration" class="pro.taskana.configuration.SpringTaskanaEngineConfiguration">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="taskanaEngine" factory-bean="taskanaEngineConfiguration" factory-method="buildTaskanaEngine" />
<bean id="taskService" factory-bean="taskanaEngine" factory-method="getTaskService" />
</beans>

View File

@ -6,14 +6,14 @@ spring.datasource.schema=classpath:sql/taskana-schema.sql
spring.h2.console.enabled=true
security.basic.enabled=false
######## Postkorb / Taskana DB #######
postkorb.datasource.url=jdbc:h2:mem:testdb;IGNORECASE=TRUE;LOCK_MODE=0
#postkorb.datasource.url=jdbc:h2:mem:testdb;TRACE_LEVEL_FIle=4
postkorb.datasource.schema=classpath:schema.sql
postkorb.datasource.driverClassName=org.h2.Driver
postkorb.datasource.hibernate.dialect=org.hibernate.dialect.H2
postkorb.datasource.username=sa
postkorb.datasource.password=sa
######## customdb / Taskana DB #######
customdb.datasource.url=jdbc:h2:mem:testdb;IGNORECASE=TRUE;LOCK_MODE=0
#customdb.datasource.url=jdbc:h2:mem:testdb;TRACE_LEVEL_FIle=4
customdb.datasource.schema=classpath:schema.sql
customdb.datasource.driverClassName=org.h2.Driver
customdb.datasource.hibernate.dialect=org.hibernate.dialect.H2
customdb.datasource.username=sa
customdb.datasource.password=sa
#logging.level.org.springframework.transaction.interceptor=TRACE
#logging.level.org.springframework.transaction=TRACE

View File

@ -0,0 +1,8 @@
CREATE SCHEMA IF NOT EXISTS TASKANA;
CREATE SCHEMA IF NOT EXISTS CUSTOMDB;
CREATE TABLE IF NOT EXISTS CUSTOMDB.TEST (
ID CHAR(40) NOT NULL,
NAME VARCHAR(255) NOT NULL,
PRIMARY KEY (ID)
);
SET SCHEMA TASKANA;

View File

@ -3,3 +3,5 @@ taskana.roles.Admin=name=konrad,Organisation=novatec|admin
taskana.roles.businessadmin=max|Moritz|businessadmin
taskana.domains= Domain_A , DOMAIN_B
taskana.classification.types= TASK , document
taskana.classification.categories= EXTERNAL , manual, autoMAtic ,Process

View File

@ -1,4 +1,4 @@
package pro.taskana.springtx;
package pro.taskana;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
@ -18,7 +18,7 @@ import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author Titus Meyer (v081065)
*
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TaskanaConfigTestApplication.class,
@ -35,8 +35,9 @@ public class TaskanaTransactionTest {
@Before
public void before() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute("DELETE FROM TASK");
jdbcTemplate.execute("DELETE FROM WORKBASKET");
jdbcTemplate.execute("DELETE FROM GESCHBUCH.TEST");
jdbcTemplate.execute("DELETE FROM CUSTOMDB.TEST");
}
@Test
@ -92,10 +93,10 @@ public class TaskanaTransactionTest {
}
@Test
public void testTransactionGeschbuch() {
public void testTransactionCustomdb() {
assertBefore(0, 0);
ResponseEntity<String> responseEntity = restTemplate.getForEntity("/geschbuch", String.class);
ResponseEntity<String> responseEntity = restTemplate.getForEntity("/customdb", String.class);
System.err.println("response: " + responseEntity.getBody());
assertThat(responseEntity.getBody(), containsString("workbaskets: 2"));
assertThat(responseEntity.getBody(), containsString("tests: 2"));
@ -104,10 +105,10 @@ public class TaskanaTransactionTest {
}
@Test
public void testTransactionGeschbuchRollback() {
public void testTransactionCustomdbRollback() {
assertBefore(0, 0);
ResponseEntity<String> responseEntity = restTemplate.getForEntity("/geschbuch?rollback={rollback}",
ResponseEntity<String> responseEntity = restTemplate.getForEntity("/customdb?rollback={rollback}",
String.class, "true");
System.err.println("response: " + responseEntity.getBody());
assertThat(responseEntity.getBody(), containsString("workbaskets: 2"));
@ -118,12 +119,12 @@ public class TaskanaTransactionTest {
private void assertBefore(int workbaskets, int tests) {
assertWorkbaskets("before", workbaskets);
assertGeschbuchTests("before", tests);
assertCustomdbTests("before", tests);
}
private void assertAfter(int workbaskets, int tests) {
assertWorkbaskets("after", workbaskets);
assertGeschbuchTests("after", tests);
assertCustomdbTests("after", tests);
}
private void assertWorkbaskets(String assertion, int value) {
@ -132,8 +133,8 @@ public class TaskanaTransactionTest {
assertThat(workbaskets, is(value));
}
private void assertGeschbuchTests(String assertion, int value) {
int tests = getGeschbuchTests();
private void assertCustomdbTests(String assertion, int value) {
int tests = getCustomdbTests();
System.err.println(assertion + " tests: " + tests);
assertThat(tests, is(value));
}
@ -147,12 +148,12 @@ public class TaskanaTransactionTest {
}
}
private int getGeschbuchTests() {
ResponseEntity<Integer> tests = restTemplate.getForEntity("/geschbuch-tests", Integer.class);
private int getCustomdbTests() {
ResponseEntity<Integer> tests = restTemplate.getForEntity("/customdb-tests", Integer.class);
if (tests.getStatusCode().is2xxSuccessful()) {
return tests.getBody();
} else {
throw new RuntimeException("error get geschbuch.tests: " + tests.getBody());
throw new RuntimeException("error get customdb.tests: " + tests.getBody());
}
}
}

View File

@ -1,2 +0,0 @@
/target/
.checkstyle

View File

@ -1,89 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring-txtest</artifactId>
<version>0.9.2-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath />
</parent>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<name>${project.groupId}:${project.artifactId}</name>
<url>http://taskana.pro</url>
<description>The Taskana Spring sample application.</description>
</project>

View File

@ -1,8 +0,0 @@
CREATE SCHEMA IF NOT EXISTS TASKANA;
CREATE SCHEMA IF NOT EXISTS GESCHBUCH;
CREATE TABLE IF NOT EXISTS GESCHBUCH.TEST (
ID CHAR(40) NOT NULL,
NAME VARCHAR(255) NOT NULL,
PRIMARY KEY (ID)
);
SET SCHEMA TASKANA;