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();