diff --git a/.gitignore b/.gitignore
index afe247a..184bbc1 100755
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ build/
*.idea/
*.iml
*.log
+out/
diff --git a/multi-module/build.gradle b/multi-module/build.gradle
index 8143d31..64a9dfc 100755
--- a/multi-module/build.gradle
+++ b/multi-module/build.gradle
@@ -1,5 +1,8 @@
buildscript {
repositories {
+ maven {
+ url "http://repo.spring.io/milestone/"
+ }
mavenCentral()
}
dependencies {
@@ -8,7 +11,7 @@ buildscript {
}
task wrapper(type: Wrapper) {
- gradleVersion = '2.0'
+ gradleVersion = '4.4'
}
subprojects {
@@ -17,6 +20,9 @@ subprojects {
targetCompatibility = 1.8
repositories {
+ maven {
+ url "http://repo.spring.io/milestone/"
+ }
mavenCentral()
jcenter()
eventuateMavenRepoUrl.split(',').each { repoUrl -> maven { url repoUrl } }
diff --git a/multi-module/common-hateoas/build.gradle b/multi-module/common-hateoas/build.gradle
index 9589853..4ed8c34 100644
--- a/multi-module/common-hateoas/build.gradle
+++ b/multi-module/common-hateoas/build.gradle
@@ -8,7 +8,7 @@ dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
compile "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
- compile("org.springframework.hateoas:spring-hateoas:$springHateoasVersion")
+ compile "org.springframework.boot:spring-boot-starter-hateoas:$springBootVersion"
testCompile 'junit:junit:4.11'
}
\ No newline at end of file
diff --git a/multi-module/common/build.gradle b/multi-module/common/build.gradle
index c8d85b4..198f0b2 100755
--- a/multi-module/common/build.gradle
+++ b/multi-module/common/build.gradle
@@ -1,6 +1,7 @@
apply plugin: 'java'
dependencies {
+ compile 'org.apache.commons:commons-io:1.3.2'
compile "io.eventuate.client.java:eventuate-client-java-spring:$eventuateClientVersion"
compile "org.springframework.boot:spring-boot-starter-web:$springBootVersion"
compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
diff --git a/multi-module/docker-compose-eventuate-local-postgres.yml b/multi-module/docker-compose-eventuate-local-postgres.yml
index 233ee7c..2666983 100644
--- a/multi-module/docker-compose-eventuate-local-postgres.yml
+++ b/multi-module/docker-compose-eventuate-local-postgres.yml
@@ -1,12 +1,12 @@
zookeeper:
- image: eventuateio/eventuateio-local-zookeeper:0.15.0
+ image: eventuateio/eventuateio-local-zookeeper:0.17.0.RELEASE
ports:
- 2181:2181
- 2888:2888
- 3888:3888
kafka:
- image: eventuateio/eventuateio-local-kafka:0.15.0
+ image: eventuateio/eventuateio-local-kafka:0.17.0.RELEASE
ports:
- 9092:9092
links:
@@ -25,7 +25,9 @@ postgres:
POSTGRES_PASSWORD: eventuate
cdcservice:
- image: eventuateio/eventuateio-local-cdc-service:0.15.0
+ image: eventuateio/eventuateio-local-cdc-service:0.17.0.RELEASE
+ ports:
+ - "8099:8080"
links:
- postgres
- kafka
diff --git a/multi-module/docker-compose-eventuate-local.yml b/multi-module/docker-compose-eventuate-local.yml
index 90e7e99..d6b5ca8 100644
--- a/multi-module/docker-compose-eventuate-local.yml
+++ b/multi-module/docker-compose-eventuate-local.yml
@@ -1,5 +1,5 @@
zookeeper:
- image: eventuateio/eventuateio-local-zookeeper:0.15.0
+ image: eventuateio/eventuateio-local-zookeeper:0.17.0.RELEASE
ports:
- 2181:2181
- 2888:2888
@@ -7,7 +7,7 @@ zookeeper:
kafka:
- image: eventuateio/eventuateio-local-kafka:0.15.0
+ image: eventuateio/eventuateio-local-kafka:0.17.0.RELEASE
ports:
- 9092:9092
links:
@@ -18,7 +18,7 @@ kafka:
- ZOOKEEPER_SERVERS=zookeeper:2181
cdcservice:
- image: eventuateio/eventuateio-local-cdc-service:0.15.0
+ image: eventuateio/eventuateio-local-cdc-service:0.17.0.RELEASE
ports:
- "8099:8080"
links:
diff --git a/multi-module/e2etest/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java b/multi-module/e2etest/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java
index 90e8868..9ab8896 100755
--- a/multi-module/e2etest/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java
+++ b/multi-module/e2etest/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java
@@ -2,12 +2,10 @@
import net.chrisrichardson.eventstore.examples.todolist.AbstractTodoRestAPITest;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.IntegrationTest;
-import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
-@SpringApplicationConfiguration(classes = {E2ETestConfiguration.class})
-@IntegrationTest
+@SpringBootTest(classes = E2ETestConfiguration.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class EndToEndTest extends AbstractTodoRestAPITest {
@Value("#{systemEnvironment['DOCKER_HOST_IP']}")
diff --git a/multi-module/gradle.properties b/multi-module/gradle.properties
index e5dc0c6..0f1ef4b 100755
--- a/multi-module/gradle.properties
+++ b/multi-module/gradle.properties
@@ -3,9 +3,7 @@ org.gradle.jvmargs=-XX:MaxPermSize=512m
eventuateMavenRepoUrl=
-springHateoasVersion=0.17.0.RELEASE
+springBootVersion=2.0.0.RELEASE
-springBootVersion=1.3.5.RELEASE
-
-eventuateClientVersion=0.19.0.RELEASE
-eventuateLocalVersion=0.15.0.RELEASE
+eventuateClientVersion=0.20.1.RELEASE
+eventuateLocalVersion=0.17.0.RELEASE
diff --git a/multi-module/gradle/wrapper/gradle-wrapper.properties b/multi-module/gradle/wrapper/gradle-wrapper.properties
index 1164e0d..f2d5cdb 100755
--- a/multi-module/gradle/wrapper/gradle-wrapper.properties
+++ b/multi-module/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
diff --git a/multi-module/mysql/Dockerfile b/multi-module/mysql/Dockerfile
index e1198c9..53a3523 100644
--- a/multi-module/mysql/Dockerfile
+++ b/multi-module/mysql/Dockerfile
@@ -1,2 +1,2 @@
-FROM eventuateio/eventuateio-local-mysql:0.15.0
+FROM eventuateio/eventuateio-local-mysql:0.17.0.RELEASE
COPY schema-mysql.sql /docker-entrypoint-initdb.d
diff --git a/multi-module/postgres/Dockerfile b/multi-module/postgres/Dockerfile
index 1f0e707..5a72ad4 100644
--- a/multi-module/postgres/Dockerfile
+++ b/multi-module/postgres/Dockerfile
@@ -1,2 +1,2 @@
-FROM eventuateio/eventuateio-local-postgres:0.14.0
+FROM eventuateio/eventuateio-local-postgres:0.17.0.RELEASE
COPY schema-postgres.sql /docker-entrypoint-initdb.d
diff --git a/multi-module/rest-api-integration-tests/build.gradle b/multi-module/rest-api-integration-tests/build.gradle
deleted file mode 100755
index 8284bb5..0000000
--- a/multi-module/rest-api-integration-tests/build.gradle
+++ /dev/null
@@ -1,13 +0,0 @@
-apply plugin: 'java'
-
-dependencies {
- testCompile project(":todo-service")
- testCompile project(":todo-view-service")
-
- testCompile project(":test-utils")
- testCompile "junit:junit:4.11"
- testCompile "org.mockito:mockito-all:1.9.5"
- testCompile "org.apache.httpcomponents:httpclient:4.5"
- testCompile "org.springframework.boot:spring-boot-starter-test:$springBootVersion"
- testCompile "io.eventuate.client.java:eventuate-client-java-jdbc:$eventuateClientVersion"
-}
\ No newline at end of file
diff --git a/multi-module/rest-api-integration-tests/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integrationtests/RestAPITest.java b/multi-module/rest-api-integration-tests/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integrationtests/RestAPITest.java
deleted file mode 100755
index 24bfe74..0000000
--- a/multi-module/rest-api-integration-tests/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integrationtests/RestAPITest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package net.chrisrichardson.eventstore.examples.todolist.integrationtests;
-
-import net.chrisrichardson.eventstore.examples.todolist.AbstractTodoRestAPITest;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.SpringApplicationConfiguration;
-import org.springframework.test.context.web.WebAppConfiguration;
-
-
-@SpringApplicationConfiguration(classes = {RestAPITestConfiguration.class})
-@WebAppConfiguration
-public class RestAPITest extends AbstractTodoRestAPITest {
- @Value("${local.server.port}")
- private int port;
-
- @Override
- protected int getCommandsidePort() {
- return port;
- }
-
- @Override
- protected String getCommandsideHost() {
- return "localhost";
- }
-
- @Override
- protected int getQuerysidePort() {
- return port;
- }
-
- @Override
- protected String getQuerysideHost() {
- return "localhost";
- }
-}
diff --git a/multi-module/rest-api-integration-tests/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integrationtests/RestAPITestConfiguration.java b/multi-module/rest-api-integration-tests/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integrationtests/RestAPITestConfiguration.java
deleted file mode 100755
index 1f92b64..0000000
--- a/multi-module/rest-api-integration-tests/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integrationtests/RestAPITestConfiguration.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.chrisrichardson.eventstore.examples.todolist.integrationtests;
-
-import io.eventuate.javaclient.spring.jdbc.EmbeddedTestAggregateStoreConfiguration;
-import net.chrisrichardson.eventstore.examples.todolist.queryside.web.TodoViewWebConfiguration;
-import net.chrisrichardson.eventstore.examples.todolist.testutil.BasicWebTestConfiguration;
-import net.chrisrichardson.eventstore.examples.todolist.todoservice.web.TodoWebConfiguration;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-
-@Configuration
-@Import({BasicWebTestConfiguration.class,
- EmbeddedTestAggregateStoreConfiguration.class,
- TodoWebConfiguration.class,
- TodoViewWebConfiguration.class})
-public class RestAPITestConfiguration {
-}
diff --git a/multi-module/rest-api-integration-tests/src/test/resources/logback.xml b/multi-module/rest-api-integration-tests/src/test/resources/logback.xml
deleted file mode 100755
index 770049f..0000000
--- a/multi-module/rest-api-integration-tests/src/test/resources/logback.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
- %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/multi-module/settings.gradle b/multi-module/settings.gradle
index 5bc6bfb..9515903 100755
--- a/multi-module/settings.gradle
+++ b/multi-module/settings.gradle
@@ -4,7 +4,6 @@ include 'common-swagger'
include 'todo-service'
include 'todo-view-service'
include 'test-utils'
-include 'rest-api-integration-tests'
include 'e2etest'
rootProject.name = 'eventuate-examples-java-spring-todo-list-multi-module'
diff --git a/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java b/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java
index 0657c62..d18bebe 100755
--- a/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java
+++ b/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java
@@ -6,7 +6,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.IntegrationTest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
@@ -15,16 +14,13 @@
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import static net.chrisrichardson.eventstore.examples.todolist.testutil.TestUtil.awaitSuccessfulRequest;
import static net.chrisrichardson.eventstore.examples.todolist.testutil.TestUtil.awaitNotFoundResponse;
-import static net.chrisrichardson.eventstore.examples.todolist.testutil.TestUtil.awaitSuccessfulRequest;
@RunWith(SpringJUnit4ClassRunner.class)
-@IntegrationTest({"server.port=0"})
public abstract class AbstractTodoRestAPITest {
protected int port;
diff --git a/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java b/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java
index d999fa5..ce9cd10 100755
--- a/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java
+++ b/multi-module/test-utils/src/main/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java
@@ -5,7 +5,7 @@
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
@@ -14,6 +14,7 @@
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
+import java.util.Arrays;
import java.util.Collections;
@@ -26,7 +27,7 @@ public RestTemplate restTemplate(HttpMessageConverters converters) {
// we have to define Apache HTTP client to use the PATCH verb
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
- converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/json"));
+ converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM));
converter.setObjectMapper(new ObjectMapper());
HttpClient httpClient = HttpClients.createDefault();
diff --git a/multi-module/todo-service/build.gradle b/multi-module/todo-service/build.gradle
index 0341918..f601a58 100644
--- a/multi-module/todo-service/build.gradle
+++ b/multi-module/todo-service/build.gradle
@@ -1,8 +1,7 @@
+apply plugin: 'org.springframework.boot'
apply plugin: VerifyEventStoreEnvironmentPlugin
apply plugin: EventuateDependencyPlugin
-apply plugin: 'spring-boot'
-
dependencies {
compile project(":common")
compile project(":common-hateoas")
@@ -13,7 +12,5 @@ dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
compile "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
- compile("org.springframework.hateoas:spring-hateoas:$springHateoasVersion")
-
- testCompile project(":test-utils")
+ compile "org.springframework.boot:spring-boot-starter-hateoas:$springBootVersion"
}
\ No newline at end of file
diff --git a/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoBackendConfiguration.java b/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoBackendConfiguration.java
index c217df7..ade3253 100644
--- a/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoBackendConfiguration.java
+++ b/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoBackendConfiguration.java
@@ -9,9 +9,8 @@
import net.chrisrichardson.eventstore.examples.todolist.todoservice.backend.domain.TodoBulkDeleteAggregate;
import net.chrisrichardson.eventstore.examples.todolist.todoservice.backend.domain.TodoEventSubscriber;
import net.chrisrichardson.eventstore.examples.todolist.todoservice.backend.domain.TodoService;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
-import org.springframework.boot.orm.jpa.EntityScan;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
diff --git a/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoViewServiceImpl.java b/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoViewServiceImpl.java
index ec860e0..cb8555d 100755
--- a/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoViewServiceImpl.java
+++ b/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/backend/TodoViewServiceImpl.java
@@ -9,6 +9,7 @@
import javax.persistence.EntityNotFoundException;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.concurrent.CompletableFuture;
@@ -27,11 +28,10 @@ public List getAll() {
@Override
public CompletableFuture findById(String todoId) {
- Todo res = repository.findOne(todoId);
- if (res != null) {
- return CompletableFuture.completedFuture(res);
- }
- return CompletableFutureUtil.failedFuture(new EntityNotFoundException("No todo found for given id"));
+ return repository
+ .findById(todoId)
+ .map(CompletableFuture::completedFuture)
+ .orElse(CompletableFutureUtil.failedFuture(new NoSuchElementException("No todo with given id found")));
}
}
diff --git a/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/web/TodoWebConfiguration.java b/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/web/TodoWebConfiguration.java
index b65d650..6418bd9 100644
--- a/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/web/TodoWebConfiguration.java
+++ b/multi-module/todo-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/todoservice/web/TodoWebConfiguration.java
@@ -1,24 +1,14 @@
package net.chrisrichardson.eventstore.examples.todolist.todoservice.web;
import net.chrisrichardson.eventstore.examples.todolist.todoservice.backend.TodoBackendConfiguration;
-import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.springframework.web.context.request.RequestContextListener;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@Import({TodoBackendConfiguration.class})
@ComponentScan({ "net.chrisrichardson.eventstore.examples.todolist.common",
"net.chrisrichardson.eventstore.examples.todolist.todoservice.web",
"net.chrisrichardson.eventstore.examples.todolist.hateoas"})
-public class TodoWebConfiguration extends WebMvcConfigurerAdapter {
-
- @Bean
- public ServletListenerRegistrationBean httpRequestContextListener() {
- return new ServletListenerRegistrationBean(new RequestContextListener());
- }
-
+public class TodoWebConfiguration {
}
diff --git a/multi-module/todo-view-service/build.gradle b/multi-module/todo-view-service/build.gradle
index da09522..f601a58 100644
--- a/multi-module/todo-view-service/build.gradle
+++ b/multi-module/todo-view-service/build.gradle
@@ -1,6 +1,6 @@
+apply plugin: 'org.springframework.boot'
apply plugin: VerifyEventStoreEnvironmentPlugin
apply plugin: EventuateDependencyPlugin
-apply plugin: 'spring-boot'
dependencies {
compile project(":common")
@@ -12,7 +12,5 @@ dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
compile "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
- compile("org.springframework.hateoas:spring-hateoas:$springHateoasVersion")
-
- testCompile project(":test-utils")
+ compile "org.springframework.boot:spring-boot-starter-hateoas:$springBootVersion"
}
\ No newline at end of file
diff --git a/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoUpdateServiceImpl.java b/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoUpdateServiceImpl.java
index 2c88531..042a221 100755
--- a/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoUpdateServiceImpl.java
+++ b/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoUpdateServiceImpl.java
@@ -28,7 +28,7 @@ public List getAll() {
}
public void remove(String id) {
- repository.delete(id);
+ repository.deleteById(id);
}
public void removeAll() {
@@ -36,11 +36,10 @@ public void removeAll() {
}
public CompletableFuture findById(String todoId) {
- Todo res = repository.findOne(todoId);
- if (res != null) {
- return CompletableFuture.completedFuture(res);
- }
- return CompletableFutureUtil.failedFuture(new NoSuchElementException("No todo with given id found"));
+ return repository
+ .findById(todoId)
+ .map(CompletableFuture::completedFuture)
+ .orElse(CompletableFutureUtil.failedFuture(new NoSuchElementException("No todo with given id found")));
}
}
diff --git a/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoViewBackendConfiguration.java b/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoViewBackendConfiguration.java
index fd8e6ef..69fb9cd 100755
--- a/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoViewBackendConfiguration.java
+++ b/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/backend/TodoViewBackendConfiguration.java
@@ -2,11 +2,9 @@
import io.eventuate.javaclient.spring.EnableEventHandlers;
import net.chrisrichardson.eventstore.examples.todolist.TodoRepository;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
-import org.springframework.boot.orm.jpa.EntityScan;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.http.converter.HttpMessageConverter;
diff --git a/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/web/TodoViewWebConfiguration.java b/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/web/TodoViewWebConfiguration.java
index 6820236..1c42686 100644
--- a/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/web/TodoViewWebConfiguration.java
+++ b/multi-module/todo-view-service/src/main/java/net/chrisrichardson/eventstore/examples/todolist/queryside/web/TodoViewWebConfiguration.java
@@ -1,24 +1,14 @@
package net.chrisrichardson.eventstore.examples.todolist.queryside.web;
import net.chrisrichardson.eventstore.examples.todolist.queryside.backend.TodoViewBackendConfiguration;
-import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.springframework.web.context.request.RequestContextListener;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@Import({TodoViewBackendConfiguration.class})
@ComponentScan({"net.chrisrichardson.eventstore.examples.todolist.common",
"net.chrisrichardson.eventstore.examples.todolist.hateoas",
"net.chrisrichardson.eventstore.examples.todolist.queryside.web"})
-public class TodoViewWebConfiguration extends WebMvcConfigurerAdapter {
-
- @Bean
- public ServletListenerRegistrationBean httpRequestContextListener() {
- return new ServletListenerRegistrationBean(new RequestContextListener());
- }
-
+public class TodoViewWebConfiguration {
}
diff --git a/single-module/build.gradle b/single-module/build.gradle
index bf132b6..bd0e87f 100755
--- a/single-module/build.gradle
+++ b/single-module/build.gradle
@@ -1,6 +1,9 @@
buildscript {
repositories {
mavenCentral()
+ maven {
+ url "http://repo.spring.io/milestone/"
+ }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
@@ -8,11 +11,11 @@ buildscript {
}
task wrapper(type: Wrapper) {
- gradleVersion = '2.0'
+ gradleVersion = '4.4'
}
apply plugin: 'java'
-apply plugin: 'spring-boot'
+apply plugin: 'org.springframework.boot'
apply plugin: VerifyEventStoreEnvironmentPlugin
apply plugin: EventuateDependencyPlugin
@@ -22,6 +25,9 @@ targetCompatibility = 1.8
repositories {
mavenCentral()
+ maven {
+ url "http://repo.spring.io/milestone/"
+ }
jcenter()
eventuateMavenRepoUrl.split(',').each { repoUrl -> maven { url repoUrl } }
}
@@ -33,11 +39,11 @@ dependencies {
compile('org.postgresql:postgresql:9.4-1200-jdbc41') {
exclude group: 'org.slf4j', module: 'slf4j-simple'
}
-
+ compile 'org.apache.commons:commons-io:1.3.2'
compile "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion"
compile "org.springframework.boot:spring-boot-starter-web:$springBootVersion"
compile "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
- compile "org.springframework.hateoas:spring-hateoas:$springHateoasVersion"
+ compile "org.springframework.boot:spring-boot-starter-hateoas:$springBootVersion"
compile "io.reactivex:rxjava:1.1.5"
compile "org.apache.httpcomponents:httpclient:4.5"
diff --git a/single-module/docker-compose-eventuate-local-postgres.yml b/single-module/docker-compose-eventuate-local-postgres.yml
index 27549ff..7562e4b 100644
--- a/single-module/docker-compose-eventuate-local-postgres.yml
+++ b/single-module/docker-compose-eventuate-local-postgres.yml
@@ -1,12 +1,12 @@
zookeeper:
- image: eventuateio/eventuateio-local-zookeeper:0.15.0
+ image: eventuateio/eventuateio-local-zookeeper:0.17.0.RELEASE
ports:
- 2181:2181
- 2888:2888
- 3888:3888
kafka:
- image: eventuateio/eventuateio-local-kafka:0.15.0
+ image: eventuateio/eventuateio-local-kafka:0.17.0.RELEASE
ports:
- 9092:9092
links:
@@ -25,7 +25,9 @@ postgres:
POSTGRES_PASSWORD: eventuate
cdcservice:
- image: eventuateio/eventuateio-local-cdc-service:0.15.0
+ image: eventuateio/eventuateio-local-cdc-service:0.17.0.RELEASE
+ ports:
+ - "8099:8080"
links:
- postgres
- kafka
diff --git a/single-module/docker-compose-eventuate-local.yml b/single-module/docker-compose-eventuate-local.yml
index 49169b5..fe9ed5e 100644
--- a/single-module/docker-compose-eventuate-local.yml
+++ b/single-module/docker-compose-eventuate-local.yml
@@ -1,5 +1,5 @@
zookeeper:
- image: eventuateio/eventuateio-local-zookeeper:0.15.0
+ image: eventuateio/eventuateio-local-zookeeper:0.17.0.RELEASE
ports:
- 2181:2181
- 2888:2888
@@ -7,7 +7,7 @@ zookeeper:
kafka:
- image: eventuateio/eventuateio-local-kafka:0.15.0
+ image: eventuateio/eventuateio-local-kafka:0.17.0.RELEASE
ports:
- 9092:9092
links:
@@ -18,7 +18,7 @@ kafka:
- ZOOKEEPER_SERVERS=zookeeper:2181
cdcservice:
- image: eventuateio/eventuateio-local-cdc-service:0.15.0
+ image: eventuateio/eventuateio-local-cdc-service:0.17.0.RELEASE
ports:
- "8099:8080"
links:
diff --git a/single-module/gradle.properties b/single-module/gradle.properties
index 169f3c8..0f1ef4b 100755
--- a/single-module/gradle.properties
+++ b/single-module/gradle.properties
@@ -3,8 +3,7 @@ org.gradle.jvmargs=-XX:MaxPermSize=512m
eventuateMavenRepoUrl=
-springHateoasVersion=0.17.0.RELEASE
-springBootVersion=1.3.5.RELEASE
+springBootVersion=2.0.0.RELEASE
-eventuateClientVersion=0.19.0.RELEASE
-eventuateLocalVersion=0.15.0.RELEASE
+eventuateClientVersion=0.20.1.RELEASE
+eventuateLocalVersion=0.17.0.RELEASE
diff --git a/single-module/gradle/wrapper/gradle-wrapper.properties b/single-module/gradle/wrapper/gradle-wrapper.properties
index 94fe3a3..f2d5cdb 100755
--- a/single-module/gradle/wrapper/gradle-wrapper.properties
+++ b/single-module/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
diff --git a/single-module/mysql/Dockerfile b/single-module/mysql/Dockerfile
index e1198c9..53a3523 100644
--- a/single-module/mysql/Dockerfile
+++ b/single-module/mysql/Dockerfile
@@ -1,2 +1,2 @@
-FROM eventuateio/eventuateio-local-mysql:0.15.0
+FROM eventuateio/eventuateio-local-mysql:0.17.0.RELEASE
COPY schema-mysql.sql /docker-entrypoint-initdb.d
diff --git a/single-module/postgres/Dockerfile b/single-module/postgres/Dockerfile
index 1f0e707..5a72ad4 100644
--- a/single-module/postgres/Dockerfile
+++ b/single-module/postgres/Dockerfile
@@ -1,2 +1,2 @@
-FROM eventuateio/eventuateio-local-postgres:0.14.0
+FROM eventuateio/eventuateio-local-postgres:0.17.0.RELEASE
COPY schema-postgres.sql /docker-entrypoint-initdb.d
diff --git a/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoBackendConfiguration.java b/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoBackendConfiguration.java
index c66fc53..272636b 100644
--- a/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoBackendConfiguration.java
+++ b/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoBackendConfiguration.java
@@ -10,7 +10,7 @@
import net.chrisrichardson.eventstore.examples.todolist.backend.domain.TodoService;
import net.chrisrichardson.eventstore.examples.todolist.web.TodoWebConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.orm.jpa.EntityScan;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
diff --git a/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoQueryService.java b/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoQueryService.java
index 5d38216..b040857 100755
--- a/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoQueryService.java
+++ b/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/backend/TodoQueryService.java
@@ -25,7 +25,7 @@ public List getAll() {
}
public void remove(String id) {
- repository.delete(id);
+ repository.deleteById(id);
}
public void removeAll() {
@@ -33,12 +33,9 @@ public void removeAll() {
}
public CompletableFuture findById(String todoId) {
- Todo res = repository.findOne(todoId);
- if (res != null) {
- return CompletableFuture.completedFuture(res);
- }
- return CompletableFutureUtil.failedFuture(new NoSuchElementException("No todo with given id found"));
+ return repository
+ .findById(todoId)
+ .map(CompletableFuture::completedFuture)
+ .orElse(CompletableFutureUtil.failedFuture(new NoSuchElementException("No todo with given id found")));
}
-
-
}
diff --git a/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/web/TodoWebConfiguration.java b/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/web/TodoWebConfiguration.java
index d489a17..85fa413 100644
--- a/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/web/TodoWebConfiguration.java
+++ b/single-module/src/main/java/net/chrisrichardson/eventstore/examples/todolist/web/TodoWebConfiguration.java
@@ -1,29 +1,15 @@
package net.chrisrichardson.eventstore.examples.todolist.web;
-import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
-import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.web.context.request.RequestContextListener;
-import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
-
-import java.util.ArrayList;
-import java.util.List;
@Configuration
@ComponentScan("net.chrisrichardson.eventstore.examples.todolist.web")
-public class TodoWebConfiguration extends WebMvcConfigurerAdapter {
-
- @Bean
- public ServletListenerRegistrationBean httpRequestContextListener() {
- return new ServletListenerRegistrationBean<>(new RequestContextListener());
- }
-
+public class TodoWebConfiguration {
@Bean
public HttpMessageConverters customConverters() {
HttpMessageConverter> additional = new MappingJackson2HttpMessageConverter();
diff --git a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java
index bccde1c..b2260a4 100755
--- a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java
+++ b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/AbstractTodoRestAPITest.java
@@ -6,7 +6,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.IntegrationTest;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
@@ -22,7 +22,6 @@
@RunWith(SpringJUnit4ClassRunner.class)
-@IntegrationTest({"server.port=0"})
public abstract class AbstractTodoRestAPITest {
protected int port;
diff --git a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java
index 44bdfbe..c438112 100755
--- a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java
+++ b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/e2etests/EndToEndTest.java
@@ -1,14 +1,11 @@
package net.chrisrichardson.eventstore.examples.todolist.e2etests;
import net.chrisrichardson.eventstore.examples.todolist.AbstractTodoRestAPITest;
-import net.chrisrichardson.eventstore.examples.todolist.testutil.BasicWebTestConfiguration;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.IntegrationTest;
-import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
-@SpringApplicationConfiguration(classes = {E2ETestConfiguration.class})
-@IntegrationTest
+@SpringBootTest(classes = E2ETestConfiguration.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class EndToEndTest extends AbstractTodoRestAPITest {
@Value("#{systemEnvironment['DOCKER_HOST_IP']}")
diff --git a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integration/RestAPITest.java b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integration/RestAPITest.java
index 208f4c8..d80f5af 100755
--- a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integration/RestAPITest.java
+++ b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/integration/RestAPITest.java
@@ -2,12 +2,10 @@
import net.chrisrichardson.eventstore.examples.todolist.AbstractTodoRestAPITest;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.SpringApplicationConfiguration;
-import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
-@SpringApplicationConfiguration(classes = {RestAPITestConfiguration.class})
-@WebAppConfiguration
+@SpringBootTest(classes = {RestAPITestConfiguration.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RestAPITest extends AbstractTodoRestAPITest {
@Value("${local.server.port}")
private int port;
diff --git a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java
index d999fa5..a125d75 100755
--- a/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java
+++ b/single-module/src/test/java/net/chrisrichardson/eventstore/examples/todolist/testutil/BasicWebTestConfiguration.java
@@ -5,7 +5,7 @@
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
@@ -14,6 +14,7 @@
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
+import java.util.Arrays;
import java.util.Collections;
@@ -23,10 +24,9 @@ public class BasicWebTestConfiguration {
@Bean
public RestTemplate restTemplate(HttpMessageConverters converters) {
-
// we have to define Apache HTTP client to use the PATCH verb
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
- converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/json"));
+ converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM));
converter.setObjectMapper(new ObjectMapper());
HttpClient httpClient = HttpClients.createDefault();