diff --git a/_build-and-test-all.sh b/_build-and-test-all.sh index 22bb1018..d77fa0d9 100755 --- a/_build-and-test-all.sh +++ b/_build-and-test-all.sh @@ -3,13 +3,12 @@ set -e dockerall="./gradlew ${DATABASE?}${MODE?}Compose" -dockercdc="./gradlew ${DATABASE?}${MODE?}cdcCompose" +dockerinfrastructure="./gradlew ${DATABASE?}${MODE?}infrastructureCompose" ./gradlew testClasses ${dockerall}Down -${dockercdc}Build -${dockercdc}Up +${dockerinfrastructure}Up ./gradlew -x :end-to-end-tests:test -x :snapshot-tests:test build diff --git a/build-and-test-snapshots.sh b/build-and-test-snapshots.sh index a022eafb..d6384d44 100755 --- a/build-and-test-snapshots.sh +++ b/build-and-test-snapshots.sh @@ -3,12 +3,12 @@ set -e dockerall="./gradlew mysqlbinlogCompose" -dockercdc="./gradlew mysqlbinlogcdcCompose" +dockerinfrastructure="./gradlew mysqlbinloginfrastructureCompose" dockertextsearch="./gradlew mysqlbinlogwithorderhistorytextsearchserviceCompose" ${dockertextsearch}Down ${dockerall}Down -${dockercdc}Up +${dockerinfrastructure}Up ./gradlew assemble diff --git a/build.gradle b/build.gradle index 8ece2b0a..52f3a613 100644 --- a/build.gradle +++ b/build.gradle @@ -14,8 +14,9 @@ apply plugin: 'docker-compose' subprojects { apply plugin: "java" - sourceCompatibility = 8 - targetCompatibility = 8 + + sourceCompatibility = 1.8 + targetCompatibility = 1.8 repositories { mavenCentral() @@ -51,10 +52,10 @@ dockerCompose { startedServices = ["elasticsearch", "orderhistorytextsearchservice"] } - mysqlbinlogcdc { + mysqlbinloginfrastructure { projectName = null useComposeFiles = ["docker-compose-mysql-binlog.yml"] - startedServices = ["cdcservice"] + startedServices = ["cdcservice", "zipkin"] } postgrespolling { @@ -62,7 +63,7 @@ dockerCompose { useComposeFiles = ["docker-compose-postgres-polling.yml"] } - postgrespollingcdc { + postgrespollinginfrastructure { projectName = null useComposeFiles = ["docker-compose-postgres-polling.yml"] startedServices = ["cdcservice"] @@ -73,9 +74,31 @@ dockerCompose { useComposeFiles = ["docker-compose-postgres-wal.yml"] } - postgreswalcdc { + postgreswalinfrastructure { projectName = null useComposeFiles = ["docker-compose-postgres-wal.yml"] startedServices = ["cdcservice"] } + + javaDevelopment { + projectName = null + useComposeFiles = ["docker-compose-java-development.yml"] + } } + +task prepareJavaDevelopmentDockerImage(type:Exec) { + commandLine './prepare-java-development-docker-image.sh' +} + +javaDevelopmentComposeBuild.dependsOn(prepareJavaDevelopmentDockerImage) + +task buildAndStartServicesMySqlBinlog(type: GradleBuild) { + List t = [] + + t.add("javaDevelopmentComposeBuild") + t.add("mysqlbinloginfrastructureComposeUp") + t.addAll(subprojects.collect { it.name }.collect { ":" + it + ":assemble" }) + t.add("mysqlbinlogComposeUp") + + tasks = t +} \ No newline at end of file diff --git a/buildSrc/src/main/groovy/ServicePlugin.groovy b/buildSrc/src/main/groovy/ServicePlugin.groovy new file mode 100644 index 00000000..4eb89af2 --- /dev/null +++ b/buildSrc/src/main/groovy/ServicePlugin.groovy @@ -0,0 +1,29 @@ +import org.gradle.api.Plugin +import org.gradle.api.Project + +class ServicePlugin implements Plugin { + + @Override + void apply(Project project) { + + project.apply(plugin: 'org.springframework.boot') + project.apply(plugin: "io.spring.dependency-management") + + project.dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-sleuth:${project.ext.springCloudSleuthVersion}" + } + } + + + project.dependencies { + + compile 'org.springframework.cloud:spring-cloud-starter-sleuth' + compile 'org.springframework.cloud:spring-cloud-starter-zipkin' + compile 'io.zipkin.brave:brave-bom:4.17.1' + + compile "io.eventuate.tram.core:eventuate-tram-spring-cloud-sleuth-integration:${project.ext.eventuateTramVersion}" + } + + } +} diff --git a/customer-service/Dockerfile b/customer-service/Dockerfile index ab9c8b1a..cfb5d105 100755 --- a/customer-service/Dockerfile +++ b/customer-service/Dockerfile @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar customer-service-*.jar COPY build/libs/customer-service-*.jar . diff --git a/customer-service/Dockerfile-maven b/customer-service/Dockerfile-maven index dc3235a6..22855519 100755 --- a/customer-service/Dockerfile-maven +++ b/customer-service/Dockerfile-maven @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar customer-service-0.1.0-SNAPSHOT.jar COPY ./target/customer-service-0.1.0-SNAPSHOT.jar . diff --git a/customer-service/build.gradle b/customer-service/build.gradle index 76792f7f..606d01bc 100644 --- a/customer-service/build.gradle +++ b/customer-service/build.gradle @@ -1,3 +1,5 @@ +apply plugin: ServicePlugin + dependencies { compile project(":common-swagger") compile project(":customer-backend") @@ -6,7 +8,4 @@ dependencies { compile "org.springframework.boot:spring-boot-starter" compile "org.springframework.boot:spring-boot-starter-actuator" compile "org.springframework.boot:spring-boot-starter-web" -} - -apply plugin: 'org.springframework.boot' -apply plugin: "io.spring.dependency-management" +} \ No newline at end of file diff --git a/customer-service/src/main/java/io/eventuate/examples/tram/ordersandcustomers/customers/web/CustomerController.java b/customer-service/src/main/java/io/eventuate/examples/tram/ordersandcustomers/customers/web/CustomerController.java index 0b15c907..769712ee 100644 --- a/customer-service/src/main/java/io/eventuate/examples/tram/ordersandcustomers/customers/web/CustomerController.java +++ b/customer-service/src/main/java/io/eventuate/examples/tram/ordersandcustomers/customers/web/CustomerController.java @@ -6,15 +6,12 @@ import io.eventuate.examples.tram.ordersandcustomers.customers.domain.Customer; import io.eventuate.examples.tram.ordersandcustomers.customers.service.CustomerService; import io.eventuate.tram.viewsupport.rebuild.DomainSnapshotExportService; -import io.eventuate.tram.viewsupport.rebuild.TopicPartitionOffset; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - @RestController public class CustomerController { @@ -29,6 +26,7 @@ public CustomerController(CustomerService customerService, this.domainSnapshotExportService = domainSnapshotExportService; } + @RequestMapping(value = "/customers", method = RequestMethod.POST) public CreateCustomerResponse createCustomer(@RequestBody CreateCustomerRequest createCustomerRequest) { Customer customer = customerService.createCustomer(createCustomerRequest.getName(), createCustomerRequest.getCreditLimit()); diff --git a/customer-service/src/main/resources/application.properties b/customer-service/src/main/resources/application.properties index bde5ec47..60b4dd73 100644 --- a/customer-service/src/main/resources/application.properties +++ b/customer-service/src/main/resources/application.properties @@ -12,3 +12,7 @@ spring.datasource.username=mysqluser spring.datasource.password=mysqlpw spring.datasource.driver-class-name=com.mysql.jdbc.Driver cdc.service.url: http://localhost:8099 + +spring.sleuth.enabled=true +spring.sleuth.sampler.probability=1 +spring.zipkin.base.url=http://${DOCKER_HOST_IP:localhost}:9411/ diff --git a/docker-compose-java-development.yml b/docker-compose-java-development.yml new file mode 100644 index 00000000..91ccd5b0 --- /dev/null +++ b/docker-compose-java-development.yml @@ -0,0 +1,6 @@ +version: '3' +services: + + java-development: + build: ./java-development + image: eventuateio/eventuate-tram-examples-customers-and-orders-java-development:${DOCKER_IMAGE_TAG:-latest} diff --git a/docker-compose-mysql-binlog.yml b/docker-compose-mysql-binlog.yml index 7276266c..3681f9dc 100755 --- a/docker-compose-mysql-binlog.yml +++ b/docker-compose-mysql-binlog.yml @@ -19,6 +19,9 @@ services: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:29092 EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 CDC_SERVICE_URL: http://cdcservice:8080 + SPRING_SLEUTH_ENABLED: "true" + SPRING_SLEUTH_SAMPLER_PROBABILITY: 1 + SPRING_ZIPKIN_BASE_URL: http://zipkin:9411/ customerservice: build: @@ -39,6 +42,9 @@ services: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:29092 EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 CDC_SERVICE_URL: http://cdcservice:8080 + SPRING_SLEUTH_ENABLED: "true" + SPRING_SLEUTH_SAMPLER_PROBABILITY: 1 + SPRING_ZIPKIN_BASE_URL: http://zipkin:9411/ orderhistoryservice: build: @@ -55,6 +61,9 @@ services: SPRING_DATA_MONGODB_URI: mongodb://mongodb/customers_and_orders EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:29092 EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 + SPRING_SLEUTH_ENABLED: "true" + SPRING_SLEUTH_SAMPLER_PROBABILITY: 1 + SPRING_ZIPKIN_BASE_URL: http://zipkin:9411/ zookeeper: image: confluentinc/cp-zookeeper:5.2.4 @@ -117,3 +126,24 @@ services: EVENTUATELOCAL_CDC_MYSQL_BINLOG_CLIENT_UNIQUE_ID: 1234567890 EVENTUATELOCAL_CDC_READ_OLD_DEBEZIUM_DB_OFFSET_STORAGE_TOPIC: "false" EVENTUATE_CDC_KAFKA_ENABLE_BATCH_PROCESSING: ${EVENTUATE_CDC_KAFKA_ENABLE_BATCH_PROCESSING} + + java-development: + image: eventuateio/eventuate-tram-examples-customers-and-orders-java-development:latest + volumes: + - .:/development + - /var/run/docker.sock:/var/run/docker.sock + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://mysql/eventuate + SPRING_DATASOURCE_USERNAME: mysqluser + SPRING_DATASOURCE_PASSWORD: mysqlpw + SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.jdbc.Driver + SPRING_SLEUTH_ENABLED: "true" + SPRING_SLEUTH_SAMPLER_PROBABILITY: 1 + SPRING_ZIPKIN_BASE_URL: http://zipkin:9411/ + + zipkin: + image: openzipkin/zipkin:2.21 + ports: + - "9411:9411" + environment: + JAVA_OPTS: -Xmx128m \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 24ecdd13..b1ef25c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,6 +5,7 @@ deployUrl=file:///Users/cer/.m2/testdeploy eventuateMavenRepoUrl=https://dl.bintray.com/eventuateio-oss/eventuate-maven-release/,file:///Users/cer/.m2/testdeploy,https://dl.bintray.com/eventuateio-oss/eventuate-maven-rc,https://snapshots.repositories.eventuate.io/repository springBootVersion=2.2.6.RELEASE +springCloudSleuthVersion=2.1.0.RELEASE eventuateTramVersion=0.24.0.RELEASE eventuateUtilVersion=0.4.0.RELEASE dockerComposePluginVersion=0.4.5 @@ -16,3 +17,4 @@ eventuateCommonImageVersion=0.9.0.RELEASE eventuateMessagingKafkaImageVersion=0.9.0.RELEASE eventuateCdcImageVersion=0.6.1.RELEASE eventuateCdcKafkaEnableBatchProcessing=false + diff --git a/java-development/Dockerfile b/java-development/Dockerfile new file mode 100644 index 00000000..52f89067 --- /dev/null +++ b/java-development/Dockerfile @@ -0,0 +1,28 @@ +FROM openjdk:8u252-slim-buster + +WORKDIR /development +RUN apt-get update && \ + apt-get install -y curl && \ + apt-get install -y jq && \ + apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg2 \ + software-properties-common && \ + ( curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - ) && \ + add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/debian \ + $(lsb_release -cs) \ + stable" && \ + apt-get update && \ + apt-get install -y docker-ce-cli && \ + curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \ + chmod +x /usr/local/bin/docker-compose && \ + rm -rf /var/lib/apt/lists/* + +COPY build /tmp-src + +RUN echo "Building in image..." && (cd /tmp-src ; ./gradlew testClasses assemble ; cd ; rm -fr /tmp-src) + +CMD echo Ready ; sleep 260000 diff --git a/jmeter-service/Dockerfile b/jmeter-service/Dockerfile index d9775249..48506ca7 100755 --- a/jmeter-service/Dockerfile +++ b/jmeter-service/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:14-jdk-alpine3.10 +FROM openjdk:8u252-slim-buster RUN wget -q -O - http://mirror.linux-ia64.org/apache//jmeter/binaries/apache-jmeter-5.2.1.tgz | tar -xzf - -C /usr/local RUN mkdir /usr/local/plans RUN mkdir /usr/local/results diff --git a/jmeter-service/build.gradle b/jmeter-service/build.gradle index e5bd2776..1cedc178 100644 --- a/jmeter-service/build.gradle +++ b/jmeter-service/build.gradle @@ -1,3 +1,6 @@ +apply plugin: 'org.springframework.boot' +apply plugin: "io.spring.dependency-management" + dependencies { compile project(":common-swagger") @@ -7,6 +10,3 @@ dependencies { compile "org.springframework.boot:spring-boot-starter-actuator" compile "org.springframework.boot:spring-boot-starter-web" } - -apply plugin: 'org.springframework.boot' -apply plugin: "io.spring.dependency-management" \ No newline at end of file diff --git a/jmeter-service/scripts/run-test.sh b/jmeter-service/scripts/run-test.sh index db273212..08eeb785 100755 --- a/jmeter-service/scripts/run-test.sh +++ b/jmeter-service/scripts/run-test.sh @@ -13,7 +13,7 @@ docker rm eventuate-tram-examples-customers-and-orders_cdcservice_1 ./jmeter-service/scripts/run-jmeter.sh -./gradlew $* mysqlbinlogcdcComposeUp +./gradlew $* mysqlbinloginfrastructureComposeUp while true ; do date diff --git a/order-history-service/Dockerfile b/order-history-service/Dockerfile index 03d19a0f..f42c9de1 100644 --- a/order-history-service/Dockerfile +++ b/order-history-service/Dockerfile @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar order-history-service-*.jar COPY build/libs/order-history-service-*.jar . diff --git a/order-history-service/Dockerfile-maven b/order-history-service/Dockerfile-maven index 4d42e615..fa8d33b8 100644 --- a/order-history-service/Dockerfile-maven +++ b/order-history-service/Dockerfile-maven @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar order-history-service-0.1.0-SNAPSHOT.jar COPY ./target/order-history-service-0.1.0-SNAPSHOT.jar . diff --git a/order-history-service/build.gradle b/order-history-service/build.gradle index dcd6d54e..c742dc86 100644 --- a/order-history-service/build.gradle +++ b/order-history-service/build.gradle @@ -8,8 +8,7 @@ buildscript { } } -apply plugin: 'org.springframework.boot' -apply plugin: "io.spring.dependency-management" +apply plugin: ServicePlugin dependencies { compile project(":order-history-backend") @@ -18,5 +17,5 @@ dependencies { compile "org.springframework.boot:spring-boot-starter" compile "org.springframework.boot:spring-boot-starter-web" compile "org.springframework.boot:spring-boot-starter-actuator" - } + diff --git a/order-history-service/src/main/resources/application.properties b/order-history-service/src/main/resources/application.properties index 39b0a166..11a3eb90 100644 --- a/order-history-service/src/main/resources/application.properties +++ b/order-history-service/src/main/resources/application.properties @@ -6,4 +6,8 @@ spring.datasource.hikari.maximumPoolSize=100 eventuatelocal.kafka.bootstrap.servers=${DOCKER_HOST_IP:localhost}:9092 eventuatelocal.zookeeper.connection.string=${DOCKER_HOST_IP:localhost}:2181 -spring.data.mongodb.uri=mongodb://${DOCKER_HOST_IP:localhost}/customers.orders \ No newline at end of file +spring.data.mongodb.uri=mongodb://${DOCKER_HOST_IP:localhost}/customers.orders + +spring.sleuth.enabled=true +spring.sleuth.sampler.probability=1 +spring.zipkin.base.url=http://${DOCKER_HOST_IP:localhost}:9411/ \ No newline at end of file diff --git a/order-history-text-search-service/Dockerfile b/order-history-text-search-service/Dockerfile index 30e8387b..05c9a2aa 100755 --- a/order-history-text-search-service/Dockerfile +++ b/order-history-text-search-service/Dockerfile @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar order-history-text-search-service-*.jar COPY build/libs/order-history-text-search-service-*.jar . \ No newline at end of file diff --git a/order-service/Dockerfile b/order-service/Dockerfile index 1c6e66ab..df4af5ff 100755 --- a/order-service/Dockerfile +++ b/order-service/Dockerfile @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar order-service-*.jar COPY build/libs/order-service-*.jar . diff --git a/order-service/Dockerfile-maven b/order-service/Dockerfile-maven index 8e6e29cb..cefe7596 100755 --- a/order-service/Dockerfile-maven +++ b/order-service/Dockerfile-maven @@ -1,5 +1,5 @@ -FROM openjdk:14-jdk-alpine3.10 -RUN apk --no-cache add curl +FROM openjdk:8u252-slim-buster +RUN apt-get update && apt-get install -y curl HEALTHCHECK --start-period=30s --interval=5s CMD curl -f http://localhost:8080/actuator/health || exit 1 CMD java ${JAVA_OPTS} -jar order-service-0.1.0-SNAPSHOT.jar COPY ./target/order-service-0.1.0-SNAPSHOT.jar . diff --git a/order-service/build.gradle b/order-service/build.gradle index 2f333606..f83c40f2 100644 --- a/order-service/build.gradle +++ b/order-service/build.gradle @@ -1,3 +1,5 @@ +apply plugin: ServicePlugin + dependencies { compile project(":common-swagger") compile project(":order-backend") @@ -8,7 +10,4 @@ dependencies { compile "org.springframework.boot:spring-boot-starter-actuator" } -apply plugin: 'org.springframework.boot' -apply plugin: "io.spring.dependency-management" - diff --git a/order-service/src/main/resources/application.properties b/order-service/src/main/resources/application.properties index a034d987..42af8f6e 100644 --- a/order-service/src/main/resources/application.properties +++ b/order-service/src/main/resources/application.properties @@ -9,3 +9,7 @@ spring.datasource.password=mysqlpw spring.datasource.driver-class-name=com.mysql.jdbc.Driver cdc.service.url: http://localhost:8099 + +spring.sleuth.enabled=true +spring.sleuth.sampler.probability=1 +spring.zipkin.base.url=http://${DOCKER_HOST_IP:localhost}:9411/ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0b1f9c74..db88eef4 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ UTF-8 - 14 + 1.8 0.24.0.RELEASE 0.4.0.RELEASE 2.2.6.RELEASE diff --git a/prepare-java-development-docker-image.sh b/prepare-java-development-docker-image.sh new file mode 100755 index 00000000..8a3f8b0c --- /dev/null +++ b/prepare-java-development-docker-image.sh @@ -0,0 +1,25 @@ +#! /bin/bash -e + +TARGET=java-development/build +rm -fr ${TARGET} +mkdir ${TARGET} + +#tar -cf - *gradle* */src/* */build.gradle | tar -C ${TARGET} -xf - +tar -cf - *gradle* */build.gradle buildSrc | tar -C ${TARGET} -xf - + +for main in $(find */src -name *Main.java) ; do + echo $main + mkdir -p ${TARGET}/$(dirname $main) + grep package $main > ${TARGET}/$main + CLASS=$(echo $main | sed -e 's?.*/??' -e 's/\.java//' ) + cat >> ${TARGET}/$main <