From cf649a0dc51c3c3ae53c1b508454aac5997f0e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 16:11:53 +0200 Subject: [PATCH 01/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- .github/workflows/publish.yml | 2 +- build.gradle | 20 ++++---- .../demo-postgres-kafka-reactive/build.gradle | 4 +- demo/demo-postgres-kafka/build.gradle | 2 +- .../com/example/demo/BankEventFormat.java | 2 +- sample/build.gradle | 12 ++--- .../thoth/sample/ThothSampleApplication.java | 2 +- .../thoth/sample/events/BankEventFormat.java | 2 +- .../sample/ThothSampleApplicationTests.java | 51 ++++--------------- settings.gradle | 6 +-- .../build.gradle | 24 +++++---- .../fr/maif/akka/AkkaExecutionContext.java | 2 +- .../concurrent/ExecutionContextBridge.scala | 0 .../java/fr/maif/akka/config/Configs.java | 0 .../eventsourcing/DefaultAggregateStore.java | 6 +-- .../eventsourcing/InMemoryEventStore.java | 12 ++--- .../eventsourcing/KafkaEventPublisher.java | 24 ++++----- .../java/fr/maif/akka/jdbc/Convertions.java | 6 +-- .../maif/akka/jdbc/JdbcExecutionContext.java | 2 +- .../src/main/java/fr/maif/akka/jdbc/Sql.java | 8 +-- .../jdbc/exceptions/ExceptionsHandler.java | 4 +- .../akka/jdbc/exceptions/SqlException.java | 0 .../jdbc/function/ResultSetExtractor.java | 0 .../java/fr/maif/akka/jdbc/query/Query.java | 0 .../akka/jdbc/query/SelectQueryBuilder.java | 10 ++-- .../fr/maif/akka/jdbc/query/SqlContext.java | 2 +- .../akka/jdbc/query/UpdateQueryBuilder.java | 10 ++-- .../akka/jdbc/stream/ResourcesHelper.java | 0 .../jdbc/stream/source/SelectQuerySource.java | 16 +++--- .../jdbc/stream/source/UpdateQuerySource.java | 16 +++--- .../UpdateQueryWithResultedIdSource.java | 16 +++--- .../fr/maif/akka/kafka/KafkaSettings.java | 6 +-- .../EventuallyConsistentProjection.java | 14 ++--- .../src/test/java/fr/maif/Helpers.java | 2 +- .../eventsourcing/EventProcessorTest.java | 10 ++-- .../impl/DefaultAggregateStoreTest.java | 8 +-- .../impl/JdbcTransactionManagerTest.java | 8 +-- .../impl/KafkaEventPublisherTest.java | 24 ++++----- .../src/test/java/fr/maif/jdbc/DbUtils.java | 0 .../src/test/java/fr/maif/jdbc/SqlTest.java | 8 +-- .../EventuallyConsistentProjectionTest.java | 10 ++-- thoth-core-reactor/build.gradle | 6 +-- .../src/test/java/fr/maif/Helpers.java | 2 +- .../KafkaEventPublisherTest.java | 2 +- .../EventuallyConsistentProjectionTest.java | 2 +- thoth-core/build.gradle | 13 +++-- .../format/JacksonEventFormat.java | 2 +- .../format/JacksonSimpleFormat.java | 2 +- .../vanilla/format/JacksonEventFormat.java | 2 +- .../vanilla/format/JacksonSimpleFormat.java | 2 +- .../java/fr/maif/json/EventEnvelopeJson.java | 26 +++------- .../fr/maif/json/EventEnvelopeJsonFormat.java | 4 +- .../java/fr/maif/json/MapperSingleton.java | 19 +++---- .../java/fr/maif/kafka/JsonSerializer.java | 2 +- thoth-core/src/test/java/fr/maif/Helpers.java | 2 +- thoth-core/src/test/java/fr/maif/Json.java | 38 ++++++-------- .../json/EventEnvelopeJsonFormatTest.java | 8 +-- .../maif/kafka/JsonSerDeserializerTest.java | 8 +-- .../build.gradle | 17 ++++--- .../readme.md | 0 .../ReactivePostgresEventStore.java | 18 +++---- .../ReactivePostgresKafkaEventProcessor.java | 4 +- ...ivePostgresKafkaEventProcessorBuilder.java | 4 +- .../ReactiveTransactionManager.java | 0 .../fr/maif/eventsourcing/TableNames.java | 0 .../AbstractPostgresEventStoreTest.java | 14 ++--- .../JdbcPostgresEventStoreTest.java | 0 .../ReactivePostgresEventStoreTest.java | 0 thoth-jooq-reactor/build.gradle | 4 +- .../ReactivePostgresEventStore.java | 6 +-- .../AbstractPostgresEventStoreTest.java | 4 +- thoth-jooq/build.gradle | 6 +-- .../impl/PostgresEventStore.java | 6 +-- .../impl/JooqKafkaTckImplementation.java | 10 ++-- .../impl/PostgresEventStoreTest.java | 14 ++--- thoth-kafka-consumer-akka/build.gradle | 22 -------- thoth-kafka-consumer-pekko/build.gradle | 24 +++++++++ .../consumer/ResilientKafkaConsumer.java | 34 ++++++------- .../java/fr/maif/kafka/consumer/Status.java | 0 .../consumer/ResilientKafkaConsumerTest.java | 22 ++++---- thoth-kafka-consumer-reactor/build.gradle | 15 +++--- .../consumer/ResilientKafkaConsumerTest.java | 8 +-- thoth-tck/build.gradle | 13 +++-- .../datastore/TestEventFormat.java | 2 +- .../datastore/InMemoryDataStoreTest.java | 6 +-- 85 files changed, 345 insertions(+), 399 deletions(-) rename {thoth-core-akka => thoth-core-pekko}/build.gradle (51%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/AkkaExecutionContext.java (98%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/concurrent/ExecutionContextBridge.scala (100%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/config/Configs.java (100%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java (91%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java (96%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java (95%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/Convertions.java (97%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java (89%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/Sql.java (95%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java (83%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/exceptions/SqlException.java (100%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/function/ResultSetExtractor.java (100%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/query/Query.java (100%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java (96%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java (89%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java (95%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/stream/ResourcesHelper.java (100%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java (89%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java (88%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java (89%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/kafka/KafkaSettings.java (98%) rename {thoth-core-akka => thoth-core-pekko}/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java (97%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/Helpers.java (99%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java (98%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java (96%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java (96%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java (96%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/jdbc/DbUtils.java (100%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/jdbc/SqlTest.java (94%) rename {thoth-core-akka => thoth-core-pekko}/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java (93%) rename {thoth-jooq-akka => thoth-jooq-pekko}/build.gradle (69%) rename {thoth-jooq-akka => thoth-jooq-pekko}/readme.md (100%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java (97%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java (98%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java (99%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/main/java/fr/maif/eventsourcing/ReactiveTransactionManager.java (100%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/main/java/fr/maif/eventsourcing/TableNames.java (100%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java (98%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/test/java/fr/maif/eventsourcing/JdbcPostgresEventStoreTest.java (100%) rename {thoth-jooq-akka => thoth-jooq-pekko}/src/test/java/fr/maif/eventsourcing/ReactivePostgresEventStoreTest.java (100%) delete mode 100644 thoth-kafka-consumer-akka/build.gradle create mode 100644 thoth-kafka-consumer-pekko/build.gradle rename {thoth-kafka-consumer-akka => thoth-kafka-consumer-pekko}/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java (96%) rename {thoth-kafka-consumer-akka => thoth-kafka-consumer-pekko}/src/main/java/fr/maif/kafka/consumer/Status.java (100%) rename {thoth-kafka-consumer-akka => thoth-kafka-consumer-pekko}/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java (94%) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 76434d45..1b803500 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,7 +1,7 @@ name: Publish on: push: - branches: [master] + branches: [master, support/*] jobs: publish: runs-on: ubuntu-latest diff --git a/build.gradle b/build.gradle index 8d22311f..65c284ff 100644 --- a/build.gradle +++ b/build.gradle @@ -28,20 +28,22 @@ subprojects { } ext { + lombokVersion = "1.18.44" scalaVersion = "2.13" - alpakkaKafkaVersion = "2.0.7" - jacksonVersion = "2.18.4" - akkaVersion = "2.6.14" - vavrVersion = "0.10.6" - vavrJacksonVersion = "0.10.3" - jooqVersion = "3.20.4" - jooqAsyncVersion = "2.4.0-rc1" - functionalJsonVersion = "1.0.5-rc1" + pekkoKafkaVersion = "1.1.0" + jacksonVersion = "3.1.0" + pekkoVersion = "1.4.0" + vavrVersion = "1.0.1" + vavrJacksonVersion = "1.0.0" + jooqVersion = "3.21.1" + jooqAsyncVersion = "3.0.0-RC1" + functionalJsonVersion = "2.0.0-RC1" kafkaVersion = "3.0.1" reactorKafkaVersion = "1.3.23" - reactorVersion = "3.7.7" + reactorVersion = "3.8.4" vertxSqlVersion = "5.0.0" testContainerVersion = "1.21.1" + jupiterVersion = "5.13.1" } test { diff --git a/demo/demo-postgres-kafka-reactive/build.gradle b/demo/demo-postgres-kafka-reactive/build.gradle index 847465f6..82d90dd3 100644 --- a/demo/demo-postgres-kafka-reactive/build.gradle +++ b/demo/demo-postgres-kafka-reactive/build.gradle @@ -23,9 +23,9 @@ dependencies { implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation project(':thoth-jooq-reactor') - implementation project(':thoth-kafka-consumer-akka') + implementation project(':thoth-kafka-consumer-pekko') implementation("io.vavr:vavr:$vavrVersion") - implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") + implementation("tools.jackson.core:jackson-databind:$jacksonVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") implementation("com.fasterxml.uuid:java-uuid-generator:4.0.1") implementation('org.postgresql:postgresql:42.7.7') diff --git a/demo/demo-postgres-kafka/build.gradle b/demo/demo-postgres-kafka/build.gradle index 2c49b8a8..7d693576 100644 --- a/demo/demo-postgres-kafka/build.gradle +++ b/demo/demo-postgres-kafka/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':thoth-core-reactor') implementation project(':thoth-jooq') implementation project(':thoth-kafka-consumer-reactor') - implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") + implementation("tools.jackson.core:jackson-databind:$jacksonVersion") implementation("io.projectreactor:reactor-core:$reactorVersion") implementation "io.projectreactor.kafka:reactor-kafka:$reactorKafkaVersion" implementation("io.vavr:vavr:$vavrVersion") diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java b/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java index b83b3f3e..360a59d3 100644 --- a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java +++ b/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java @@ -1,6 +1,6 @@ package com.example.demo; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.eventsourcing.Result; import fr.maif.eventsourcing.vanilla.format.JacksonEventFormat; import fr.maif.json.Json; diff --git a/sample/build.gradle b/sample/build.gradle index 07ca049c..56e9bcd2 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -3,10 +3,7 @@ tasks.withType(PublishToMavenRepository).configureEach { it.enabled = false } //project.tasks.publishToSonatype.enabled = false ext { - vavrVersion = "0.10.6" - jacksonVersion = "2.18.4" - lombokVersion = "1.18.38" - jupiterVersion = "5.13.1" + springBootVersion = "4.0.5" } dependencies { @@ -18,8 +15,9 @@ dependencies { implementation project(':thoth-kafka-consumer-reactor') implementation("io.vavr:vavr:$vavrVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") - implementation("org.springframework.boot:spring-boot-starter:3.4.5") - implementation("org.springframework.boot:spring-boot-starter-web:3.4.5") + implementation("org.springframework.boot:spring-boot-starter:$springBootVersion") + implementation("org.springframework.boot:spring-boot-starter-web:$springBootVersion") + implementation("org.springframework.boot:spring-boot-starter-jooq:$springBootVersion") implementation('org.postgresql:postgresql:42.7.7') implementation("io.projectreactor:reactor-core:$reactorVersion") implementation "io.projectreactor.kafka:reactor-kafka:$reactorKafkaVersion" @@ -32,7 +30,7 @@ dependencies { testImplementation("org.testcontainers:kafka:$testContainerVersion") testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") testImplementation("org.springframework.boot:spring-boot-starter-test:3.4.5") - testImplementation("org.assertj:assertj-core:3.19.0") + testImplementation('org.assertj:assertj-core:3.27.7') } diff --git a/sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java b/sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java index 0f525e76..030d5d1f 100644 --- a/sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java +++ b/sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java @@ -2,7 +2,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration; +import org.springframework.boot.jooq.autoconfigure.JooqAutoConfiguration; @SpringBootApplication(exclude = JooqAutoConfiguration.class) public class ThothSampleApplication { diff --git a/sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java b/sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java index 3e8a48b1..2f8dbf92 100644 --- a/sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java +++ b/sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java @@ -2,8 +2,8 @@ import static io.vavr.API.Case; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.json.Json; import fr.maif.json.JsonWrite; diff --git a/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java b/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java index 006fa951..e60ffa57 100644 --- a/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java +++ b/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java @@ -1,8 +1,5 @@ package fr.maif.thoth.sample; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.format.JacksonSimpleFormat; import fr.maif.json.EventEnvelopeJson; @@ -35,9 +32,9 @@ import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.utility.DockerImageName; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; -import java.io.IOException; -import java.io.UncheckedIOException; import java.math.BigDecimal; import java.sql.SQLException; import java.time.Duration; @@ -320,11 +317,7 @@ private AccountDTO readAccount(String id) { try { return restTemplate.getForEntity("/bank/api/" + id, AccountDTO.class).getBody(); } catch(HttpClientErrorException ex) { - try { - return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); - } catch (IOException e) { - throw ex; - } + return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); } } @@ -332,11 +325,7 @@ private AccountDTO createAccount(AccountDTO account) { try { return restTemplate.postForEntity("/bank/api/", account, AccountDTO.class).getBody(); } catch(HttpClientErrorException ex) { - try { - return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); - } catch (IOException e) { - throw ex; - } + return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); } } @@ -346,18 +335,10 @@ private Optional closeAccount(String id) { if(Objects.isNull(body)) { return Optional.empty(); } else { - try { - return Optional.ofNullable(mapper.readValue(body, AccountDTO.class).error); - } catch (JsonProcessingException e) { - return Optional.empty(); - } + return Optional.ofNullable(mapper.readValue(body, AccountDTO.class).error); } } catch(HttpClientErrorException ex) { - try { - return Optional.ofNullable(mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class).error); - } catch (IOException e) { - throw ex; - } + return Optional.ofNullable(mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class).error); } } @@ -367,11 +348,7 @@ private AccountDTO withdraw(String id, BigDecimal amount) { try { return restTemplate.postForEntity("/bank/api/" + id + "/_action/withdraw", request, AccountDTO.class).getBody(); } catch(HttpClientErrorException ex) { - try { - return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); - } catch (IOException e) { - throw ex; - } + return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); } } @@ -381,11 +358,7 @@ private AccountDTO deposit(String id, BigDecimal amount) { try { return restTemplate.postForEntity("/bank/api/" + id + "/_action/deposit", request, AccountDTO.class).getBody(); } catch(HttpClientErrorException ex) { - try { - return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); - } catch (IOException e) { - throw ex; - } + return mapper.readValue(ex.getResponseBodyAsString(), AccountDTO.class); } } @@ -399,11 +372,7 @@ private TransferResultDTO transfer(String source, String target, BigDecimal amou try { return restTemplate.postForEntity("/bank/api/_action/transfer", request, TransferResultDTO.class).getBody(); } catch(HttpClientErrorException ex) { - try { - return mapper.readValue(ex.getResponseBodyAsString(), TransferResultDTO.class); - } catch (IOException e) { - throw ex; - } + return mapper.readValue(ex.getResponseBodyAsString(), TransferResultDTO.class); } } @@ -509,8 +478,6 @@ public EventEnvelope parsEnvelope(String value) { future::complete ); return future.get(); - } catch (IOException e) { - throw new UncheckedIOException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } catch (ExecutionException e) { diff --git a/settings.gradle b/settings.gradle index 599595ae..4100e675 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,9 +11,9 @@ rootProject.name = 'thoth' include 'commons-events' include 'thoth-core' include 'thoth-jooq' -include 'thoth-core-akka' -include 'thoth-jooq-akka' -include 'thoth-kafka-consumer-akka' +include 'thoth-core-pekko' +include 'thoth-jooq-pekko' +include 'thoth-kafka-consumer-pekko' include 'thoth-core-reactor' include 'thoth-jooq-reactor' include 'thoth-kafka-consumer-reactor' diff --git a/thoth-core-akka/build.gradle b/thoth-core-pekko/build.gradle similarity index 51% rename from thoth-core-akka/build.gradle rename to thoth-core-pekko/build.gradle index 48eafb71..47db6b63 100644 --- a/thoth-core-akka/build.gradle +++ b/thoth-core-pekko/build.gradle @@ -2,22 +2,24 @@ dependencies { implementation project(':commons-events') implementation project(':thoth-core') - implementation project(':thoth-kafka-consumer-akka') + implementation project(':thoth-kafka-consumer-pekko') implementation("io.vavr:vavr:$vavrVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") - implementation("com.typesafe.akka:akka-stream_$scalaVersion:$akkaVersion") - implementation("com.typesafe.akka:akka-stream-kafka_$scalaVersion:$alpakkaKafkaVersion") + + implementation "org.apache.pekko:pekko-actor_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-slf4j_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-connectors-kafka_$scalaVersion:$pekkoKafkaVersion" + implementation 'org.scala-lang:scala-library:2.13.8' implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") - testImplementation("com.typesafe.akka:akka-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-kafka-testkit_$scalaVersion:$alpakkaKafkaVersion") - testImplementation("org.assertj:assertj-core:3.10.0") - testImplementation("com.h2database:h2:1.4.197") + testImplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" + testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") + implementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" + testImplementation('org.assertj:assertj-core:3.27.7') + testImplementation('com.h2database:h2:2.2.220') testImplementation("org.mockito:mockito-core:2.22.0") testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") testImplementation("org.junit.platform:junit-platform-commons:1.4.2") @@ -25,7 +27,7 @@ dependencies { testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") - testImplementation("org.testcontainers:kafka:1.15.3") + testImplementation("org.testcontainers:kafka:$testContainerVersion") } test { diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/AkkaExecutionContext.java b/thoth-core-pekko/src/main/java/fr/maif/akka/AkkaExecutionContext.java similarity index 98% rename from thoth-core-akka/src/main/java/fr/maif/akka/AkkaExecutionContext.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/AkkaExecutionContext.java index 84c7e928..696e28c1 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/AkkaExecutionContext.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/AkkaExecutionContext.java @@ -1,6 +1,6 @@ package fr.maif.akka; -import akka.actor.ActorSystem; +import org.apache.pekko.actor.ActorSystem; import scala.concurrent.ExecutionContext; import scala.concurrent.ExecutionContextExecutorService; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/concurrent/ExecutionContextBridge.scala b/thoth-core-pekko/src/main/java/fr/maif/akka/concurrent/ExecutionContextBridge.scala similarity index 100% rename from thoth-core-akka/src/main/java/fr/maif/akka/concurrent/ExecutionContextBridge.scala rename to thoth-core-pekko/src/main/java/fr/maif/akka/concurrent/ExecutionContextBridge.scala diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/config/Configs.java b/thoth-core-pekko/src/main/java/fr/maif/akka/config/Configs.java similarity index 100% rename from thoth-core-akka/src/main/java/fr/maif/akka/config/Configs.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/config/Configs.java diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java b/thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java similarity index 91% rename from thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java index 109765ce..4988c42f 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/DefaultAggregateStore.java @@ -1,8 +1,8 @@ package fr.maif.akka.eventsourcing; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.Source; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.eventsourcing.*; import fr.maif.eventsourcing.impl.AbstractDefaultAggregateStore; import org.reactivestreams.Publisher; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java b/thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java similarity index 96% rename from thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java index 4345d762..1ce8ee1c 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/InMemoryEventStore.java @@ -1,11 +1,11 @@ package fr.maif.akka.eventsourcing; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.japi.Pair; -import akka.stream.Materializer; -import akka.stream.OverflowStrategy; -import akka.stream.javadsl.*; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.japi.Pair; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.OverflowStrategy; +import org.apache.pekko.stream.javadsl.*; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java b/thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java similarity index 95% rename from thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java index f603e244..2156c829 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/eventsourcing/KafkaEventPublisher.java @@ -1,17 +1,17 @@ package fr.maif.akka.eventsourcing; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.japi.Pair; -import akka.kafka.ProducerMessage; -import akka.kafka.ProducerSettings; -import akka.kafka.javadsl.Producer; -import akka.stream.KillSwitches; -import akka.stream.Materializer; -import akka.stream.OverflowStrategy; -import akka.stream.RestartSettings; -import akka.stream.UniqueKillSwitch; -import akka.stream.javadsl.*; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.japi.Pair; +import org.apache.pekko.kafka.ProducerMessage; +import org.apache.pekko.kafka.ProducerSettings; +import org.apache.pekko.kafka.javadsl.Producer; +import org.apache.pekko.stream.KillSwitches; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.OverflowStrategy; +import org.apache.pekko.stream.RestartSettings; +import org.apache.pekko.stream.UniqueKillSwitch; +import org.apache.pekko.stream.javadsl.*; import fr.maif.eventsourcing.EventStore.ConcurrentReplayStrategy; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/Convertions.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/Convertions.java similarity index 97% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/Convertions.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/Convertions.java index 0ad66150..8fe13dd5 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/Convertions.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/Convertions.java @@ -1,8 +1,8 @@ package fr.maif.akka.jdbc; -import akka.japi.Pair; -import akka.japi.tuple.Tuple3; -import akka.japi.tuple.Tuple4; +import org.apache.pekko.japi.Pair; +import org.apache.pekko.japi.tuple.Tuple3; +import org.apache.pekko.japi.tuple.Tuple4; import fr.maif.akka.jdbc.function.ResultSetExtractor; import java.math.BigDecimal; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java similarity index 89% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java index 830623d9..16a3e560 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/JdbcExecutionContext.java @@ -1,6 +1,6 @@ package fr.maif.akka.jdbc; -import akka.actor.ActorSystem; +import org.apache.pekko.actor.ActorSystem; import fr.maif.akka.AkkaExecutionContext; public class JdbcExecutionContext extends AkkaExecutionContext { diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/Sql.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/Sql.java similarity index 95% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/Sql.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/Sql.java index c097960c..e7cd52b9 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/Sql.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/Sql.java @@ -1,9 +1,9 @@ package fr.maif.akka.jdbc; -import akka.Done; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.stream.javadsl.Source; +import org.apache.pekko.Done; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.akka.jdbc.query.SqlContext; import fr.maif.akka.jdbc.function.ResultSetExtractor; import fr.maif.akka.jdbc.query.SelectQueryBuilder; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java similarity index 83% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java index 297e5b78..2400c377 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/exceptions/ExceptionsHandler.java @@ -1,7 +1,7 @@ package fr.maif.akka.jdbc.exceptions; -import akka.japi.function.Creator; -import akka.japi.function.Effect; +import org.apache.pekko.japi.function.Creator; +import org.apache.pekko.japi.function.Effect; /** * Created by adelegue on 29/04/2016. diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/exceptions/SqlException.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/exceptions/SqlException.java similarity index 100% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/exceptions/SqlException.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/exceptions/SqlException.java diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/function/ResultSetExtractor.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/function/ResultSetExtractor.java similarity index 100% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/function/ResultSetExtractor.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/function/ResultSetExtractor.java diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/Query.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/Query.java similarity index 100% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/Query.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/Query.java diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java similarity index 96% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java index 4fe12f81..8ea0427a 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/SelectQueryBuilder.java @@ -1,10 +1,10 @@ package fr.maif.akka.jdbc.query; -import akka.NotUsed; -import akka.stream.ActorAttributes; -import akka.stream.Attributes; -import akka.stream.javadsl.Flow; -import akka.stream.javadsl.Source; +import org.apache.pekko.NotUsed; +import org.apache.pekko.stream.ActorAttributes; +import org.apache.pekko.stream.Attributes; +import org.apache.pekko.stream.javadsl.Flow; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.akka.jdbc.function.ResultSetExtractor; import fr.maif.akka.jdbc.stream.source.SelectQuerySource; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java similarity index 89% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java index 776e6963..3da94ae5 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/SqlContext.java @@ -1,6 +1,6 @@ package fr.maif.akka.jdbc.query; -import akka.actor.ActorSystem; +import org.apache.pekko.actor.ActorSystem; import java.sql.Connection; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java similarity index 95% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java index a0b06059..4c1b0f55 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/query/UpdateQueryBuilder.java @@ -1,10 +1,10 @@ package fr.maif.akka.jdbc.query; -import akka.NotUsed; -import akka.stream.ActorAttributes; -import akka.stream.Attributes; -import akka.stream.javadsl.Flow; -import akka.stream.javadsl.Source; +import org.apache.pekko.NotUsed; +import org.apache.pekko.stream.ActorAttributes; +import org.apache.pekko.stream.Attributes; +import org.apache.pekko.stream.javadsl.Flow; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.akka.jdbc.stream.source.UpdateQuerySource; import fr.maif.akka.jdbc.stream.source.UpdateQueryWithResultedIdSource; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/ResourcesHelper.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/ResourcesHelper.java similarity index 100% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/ResourcesHelper.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/ResourcesHelper.java diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java similarity index 89% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java index ae1a27c5..592d7c28 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/SelectQuerySource.java @@ -1,13 +1,13 @@ package fr.maif.akka.jdbc.stream.source; -import akka.event.Logging; -import akka.event.LoggingAdapter; -import akka.stream.Attributes; -import akka.stream.Outlet; -import akka.stream.SourceShape; -import akka.stream.stage.AbstractOutHandler; -import akka.stream.stage.GraphStage; -import akka.stream.stage.GraphStageLogic; +import org.apache.pekko.event.Logging; +import org.apache.pekko.event.LoggingAdapter; +import org.apache.pekko.stream.Attributes; +import org.apache.pekko.stream.Outlet; +import org.apache.pekko.stream.SourceShape; +import org.apache.pekko.stream.stage.AbstractOutHandler; +import org.apache.pekko.stream.stage.GraphStage; +import org.apache.pekko.stream.stage.GraphStageLogic; import fr.maif.akka.jdbc.function.ResultSetExtractor; import fr.maif.akka.jdbc.query.Query; import fr.maif.akka.jdbc.query.SqlContext; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java similarity index 88% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java index 227439f7..54d67601 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQuerySource.java @@ -1,13 +1,13 @@ package fr.maif.akka.jdbc.stream.source; -import akka.event.Logging; -import akka.event.LoggingAdapter; -import akka.stream.Attributes; -import akka.stream.Outlet; -import akka.stream.SourceShape; -import akka.stream.stage.AbstractOutHandler; -import akka.stream.stage.GraphStage; -import akka.stream.stage.GraphStageLogic; +import org.apache.pekko.event.Logging; +import org.apache.pekko.event.LoggingAdapter; +import org.apache.pekko.stream.Attributes; +import org.apache.pekko.stream.Outlet; +import org.apache.pekko.stream.SourceShape; +import org.apache.pekko.stream.stage.AbstractOutHandler; +import org.apache.pekko.stream.stage.GraphStage; +import org.apache.pekko.stream.stage.GraphStageLogic; import fr.maif.akka.jdbc.query.Query; import fr.maif.akka.jdbc.query.SqlContext; import fr.maif.akka.jdbc.stream.ResourcesHelper; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java similarity index 89% rename from thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java index bfc1bf3f..e35cb1e5 100755 --- a/thoth-core-akka/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/jdbc/stream/source/UpdateQueryWithResultedIdSource.java @@ -1,13 +1,13 @@ package fr.maif.akka.jdbc.stream.source; -import akka.event.Logging; -import akka.event.LoggingAdapter; -import akka.stream.Attributes; -import akka.stream.Outlet; -import akka.stream.SourceShape; -import akka.stream.stage.AbstractOutHandler; -import akka.stream.stage.GraphStage; -import akka.stream.stage.GraphStageLogic; +import org.apache.pekko.event.Logging; +import org.apache.pekko.event.LoggingAdapter; +import org.apache.pekko.stream.Attributes; +import org.apache.pekko.stream.Outlet; +import org.apache.pekko.stream.SourceShape; +import org.apache.pekko.stream.stage.AbstractOutHandler; +import org.apache.pekko.stream.stage.GraphStage; +import org.apache.pekko.stream.stage.GraphStageLogic; import fr.maif.akka.jdbc.query.Query; import fr.maif.akka.jdbc.query.SqlContext; import fr.maif.akka.jdbc.stream.ResourcesHelper; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/kafka/KafkaSettings.java b/thoth-core-pekko/src/main/java/fr/maif/akka/kafka/KafkaSettings.java similarity index 98% rename from thoth-core-akka/src/main/java/fr/maif/akka/kafka/KafkaSettings.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/kafka/KafkaSettings.java index 55645b96..dc0c7daa 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/kafka/KafkaSettings.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/kafka/KafkaSettings.java @@ -1,8 +1,8 @@ package fr.maif.akka.kafka; -import akka.actor.ActorSystem; -import akka.kafka.ConsumerSettings; -import akka.kafka.ProducerSettings; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ConsumerSettings; +import org.apache.pekko.kafka.ProducerSettings; import com.typesafe.config.Config; import fr.maif.akka.config.Configs; import io.vavr.Tuple; diff --git a/thoth-core-akka/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java b/thoth-core-pekko/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java similarity index 97% rename from thoth-core-akka/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java rename to thoth-core-pekko/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java index c245bf11..c53e9c32 100644 --- a/thoth-core-akka/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java +++ b/thoth-core-pekko/src/main/java/fr/maif/akka/projections/EventuallyConsistentProjection.java @@ -1,12 +1,12 @@ package fr.maif.akka.projections; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.kafka.ConsumerMessage; -import akka.kafka.ConsumerSettings; -import akka.kafka.Subscriptions; -import akka.stream.javadsl.Flow; -import akka.stream.scaladsl.Source; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ConsumerMessage; +import org.apache.pekko.kafka.ConsumerSettings; +import org.apache.pekko.kafka.Subscriptions; +import org.apache.pekko.stream.javadsl.Flow; +import org.apache.pekko.stream.scaladsl.Source; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.format.JacksonEventFormat; diff --git a/thoth-core-akka/src/test/java/fr/maif/Helpers.java b/thoth-core-pekko/src/test/java/fr/maif/Helpers.java similarity index 99% rename from thoth-core-akka/src/test/java/fr/maif/Helpers.java rename to thoth-core-pekko/src/test/java/fr/maif/Helpers.java index 169cb846..e641c52d 100644 --- a/thoth-core-akka/src/test/java/fr/maif/Helpers.java +++ b/thoth-core-pekko/src/test/java/fr/maif/Helpers.java @@ -1,6 +1,6 @@ package fr.maif; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Command; import fr.maif.eventsourcing.CommandHandler; diff --git a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java similarity index 98% rename from thoth-core-akka/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java rename to thoth-core-pekko/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java index 0da6f61f..74cf78ce 100644 --- a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/EventProcessorTest.java @@ -1,10 +1,10 @@ package fr.maif.eventsourcing; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; -import akka.testkit.javadsl.TestKit; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import org.apache.pekko.testkit.javadsl.TestKit; import fr.maif.akka.eventsourcing.DefaultAggregateStore; import io.vavr.Tuple; import io.vavr.Tuple0; diff --git a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java similarity index 96% rename from thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java rename to thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java index 74cb455e..b5e2778e 100644 --- a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/DefaultAggregateStoreTest.java @@ -1,9 +1,9 @@ package fr.maif.eventsourcing.impl; -import akka.actor.ActorSystem; -import akka.stream.javadsl.AsPublisher; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.javadsl.AsPublisher; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.Helpers; import fr.maif.Helpers.Viking; import fr.maif.Helpers.VikingEvent; diff --git a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java similarity index 96% rename from thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java rename to thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java index 2b4652b5..73f69d3b 100644 --- a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/JdbcTransactionManagerTest.java @@ -1,9 +1,9 @@ package fr.maif.eventsourcing.impl; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.Sink; -import akka.testkit.javadsl.TestKit; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.testkit.javadsl.TestKit; import fr.maif.concurrent.CompletionStages; import fr.maif.akka.jdbc.Convertions; import fr.maif.jdbc.DbUtils; diff --git a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java similarity index 96% rename from thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java rename to thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java index 10973566..10ea40f7 100644 --- a/thoth-core-akka/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java @@ -1,17 +1,17 @@ package fr.maif.eventsourcing.impl; -import akka.actor.ActorSystem; -import akka.kafka.ConsumerSettings; -import akka.kafka.ProducerSettings; -import akka.kafka.Subscriptions; -import akka.kafka.javadsl.Consumer; -import akka.kafka.testkit.javadsl.BaseKafkaTest; -import akka.stream.Materializer; -import akka.stream.javadsl.AsPublisher; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; -import akka.testkit.javadsl.TestKit; -import com.fasterxml.jackson.databind.JsonNode; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ConsumerSettings; +import org.apache.pekko.kafka.ProducerSettings; +import org.apache.pekko.kafka.Subscriptions; +import org.apache.pekko.kafka.javadsl.Consumer; +import org.apache.pekko.kafka.testkit.javadsl.BaseKafkaTest; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.AsPublisher; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import org.apache.pekko.testkit.javadsl.TestKit; +import tools.jackson.databind.JsonNode; import fr.maif.akka.eventsourcing.KafkaEventPublisher; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Event; diff --git a/thoth-core-akka/src/test/java/fr/maif/jdbc/DbUtils.java b/thoth-core-pekko/src/test/java/fr/maif/jdbc/DbUtils.java similarity index 100% rename from thoth-core-akka/src/test/java/fr/maif/jdbc/DbUtils.java rename to thoth-core-pekko/src/test/java/fr/maif/jdbc/DbUtils.java diff --git a/thoth-core-akka/src/test/java/fr/maif/jdbc/SqlTest.java b/thoth-core-pekko/src/test/java/fr/maif/jdbc/SqlTest.java similarity index 94% rename from thoth-core-akka/src/test/java/fr/maif/jdbc/SqlTest.java rename to thoth-core-pekko/src/test/java/fr/maif/jdbc/SqlTest.java index da16d7ae..7d9fa869 100644 --- a/thoth-core-akka/src/test/java/fr/maif/jdbc/SqlTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/jdbc/SqlTest.java @@ -1,9 +1,9 @@ package fr.maif.jdbc; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.Sink; -import akka.testkit.javadsl.TestKit; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.testkit.javadsl.TestKit; import fr.maif.akka.jdbc.Convertions; import fr.maif.akka.jdbc.Sql; import io.vavr.collection.HashMap; diff --git a/thoth-core-akka/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java b/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java similarity index 93% rename from thoth-core-akka/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java rename to thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java index c69f4510..d2759e27 100644 --- a/thoth-core-akka/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java @@ -1,10 +1,10 @@ package fr.maif.projections; -import akka.actor.ActorSystem; -import akka.kafka.testkit.javadsl.TestcontainersKafkaTest; -import akka.stream.Materializer; -import akka.testkit.javadsl.TestKit; -import com.fasterxml.jackson.databind.JsonNode; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.testkit.javadsl.TestcontainersKafkaTest; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.testkit.javadsl.TestKit; +import tools.jackson.databind.JsonNode; import fr.maif.Helpers; import fr.maif.Helpers.VikingEvent; import fr.maif.akka.projections.EventuallyConsistentProjection; diff --git a/thoth-core-reactor/build.gradle b/thoth-core-reactor/build.gradle index 1af95c83..4eeb5972 100644 --- a/thoth-core-reactor/build.gradle +++ b/thoth-core-reactor/build.gradle @@ -9,8 +9,6 @@ dependencies { implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") implementation('org.slf4j:slf4j-api:2.0.7') implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") testImplementation("org.assertj:assertj-core:3.10.0") @@ -22,8 +20,8 @@ dependencies { testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") - testImplementation("org.testcontainers:kafka:1.18.0") - testImplementation "org.testcontainers:junit-jupiter:1.18.0" + testImplementation("org.testcontainers:kafka:$testContainerVersion") + testImplementation "org.testcontainers:junit-jupiter:$testContainerVersion" testImplementation "ch.qos.logback:logback-classic:1.4.8" } diff --git a/thoth-core-reactor/src/test/java/fr/maif/Helpers.java b/thoth-core-reactor/src/test/java/fr/maif/Helpers.java index 66be7204..5925ebd9 100644 --- a/thoth-core-reactor/src/test/java/fr/maif/Helpers.java +++ b/thoth-core-reactor/src/test/java/fr/maif/Helpers.java @@ -1,6 +1,6 @@ package fr.maif; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Command; import fr.maif.eventsourcing.CommandHandler; diff --git a/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java b/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java index 0ab5ad1e..f91103ad 100644 --- a/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java +++ b/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java @@ -1,6 +1,6 @@ package fr.maif.reactor.eventsourcing; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; diff --git a/thoth-core-reactor/src/test/java/fr/maif/reactor/projections/EventuallyConsistentProjectionTest.java b/thoth-core-reactor/src/test/java/fr/maif/reactor/projections/EventuallyConsistentProjectionTest.java index 2261a02b..390b0e71 100644 --- a/thoth-core-reactor/src/test/java/fr/maif/reactor/projections/EventuallyConsistentProjectionTest.java +++ b/thoth-core-reactor/src/test/java/fr/maif/reactor/projections/EventuallyConsistentProjectionTest.java @@ -1,6 +1,6 @@ package fr.maif.reactor.projections; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.Helpers; import fr.maif.Helpers.VikingEvent; import fr.maif.concurrent.CompletionStages; diff --git a/thoth-core/build.gradle b/thoth-core/build.gradle index ca89f356..f50ef9bc 100644 --- a/thoth-core/build.gradle +++ b/thoth-core/build.gradle @@ -1,20 +1,19 @@ dependencies { implementation project(':commons-events') - implementation project(':thoth-kafka-consumer-akka') + implementation project(':thoth-kafka-consumer-pekko') implementation("io.vavr:vavr:$vavrVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") implementation("org.apache.kafka:kafka-clients:$kafkaVersion") implementation("org.reactivestreams:reactive-streams:1.0.4") implementation("org.slf4j:slf4j-api:1.7.36") - testImplementation("com.typesafe.akka:akka-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-kafka-testkit_$scalaVersion:$alpakkaKafkaVersion") + testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") + testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") + testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" + testImplementation("org.assertj:assertj-core:3.10.0") testImplementation("com.h2database:h2:1.4.197") testImplementation("org.mockito:mockito-core:2.22.0") @@ -24,7 +23,7 @@ dependencies { testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") - testImplementation("org.testcontainers:kafka:1.15.3") + testImplementation("org.testcontainers:kafka:$testContainerVersion") } test { diff --git a/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonEventFormat.java b/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonEventFormat.java index 571c3dd6..570ac99f 100644 --- a/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonEventFormat.java +++ b/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonEventFormat.java @@ -1,6 +1,6 @@ package fr.maif.eventsourcing.format; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; public interface JacksonEventFormat extends EventFormat { } diff --git a/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonSimpleFormat.java b/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonSimpleFormat.java index a3f8269a..20dd1aed 100644 --- a/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonSimpleFormat.java +++ b/thoth-core/src/main/java/fr/maif/eventsourcing/format/JacksonSimpleFormat.java @@ -1,6 +1,6 @@ package fr.maif.eventsourcing.format; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import io.vavr.control.Option; import java.util.function.Function; diff --git a/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonEventFormat.java b/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonEventFormat.java index f18eafbf..a290a758 100644 --- a/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonEventFormat.java +++ b/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonEventFormat.java @@ -1,6 +1,6 @@ package fr.maif.eventsourcing.vanilla.format; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import io.vavr.control.Either; public interface JacksonEventFormat extends EventFormat { diff --git a/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonSimpleFormat.java b/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonSimpleFormat.java index f6a5cb8c..95b01df7 100644 --- a/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonSimpleFormat.java +++ b/thoth-core/src/main/java/fr/maif/eventsourcing/vanilla/format/JacksonSimpleFormat.java @@ -1,6 +1,6 @@ package fr.maif.eventsourcing.vanilla.format; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import io.vavr.control.Option; import java.util.Optional; diff --git a/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJson.java b/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJson.java index dc0f919e..126ef127 100644 --- a/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJson.java +++ b/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJson.java @@ -1,11 +1,10 @@ package fr.maif.json; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.NullNode; +import tools.jackson.databind.node.ObjectNode; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.format.JacksonEventFormat; @@ -54,10 +53,7 @@ public static EventEnvelope d ObjectNode jsonNode = (ObjectNode) mapper.reader().readTree(event); return deserialize(jsonNode, format, metaFormat, contextFormat, onError, onSuccess); } catch (Exception e) { - try { - onError.accept(mapper.writer().writeValueAsString(event), e); - } catch (JsonProcessingException e1) { - } + onError.accept(mapper.writer().writeValueAsString(event), e); return null; } } @@ -82,10 +78,7 @@ public static EventEnvelope d }); Either read = format.read(eventEnvelope.eventType, eventEnvelope.version, eventNode); read.mapLeft(err -> { - try { - onError.accept(mapper.writer().writeValueAsString(event), err); - } catch (JsonProcessingException e) { - } + onError.accept(mapper.writer().writeValueAsString(event), err); return err; }); eventEnvelope.withEvent(read.getOrNull()); @@ -95,10 +88,7 @@ public static EventEnvelope d onSuccess.accept(build); return build; } catch (Exception e) { - try { - onError.accept(mapper.writer().writeValueAsString(event), e); - } catch (JsonProcessingException e1) { - } + onError.accept(mapper.writer().writeValueAsString(event), e); return null; } } diff --git a/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJsonFormat.java b/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJsonFormat.java index 6aee427e..4faa7b19 100644 --- a/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJsonFormat.java +++ b/thoth-core/src/main/java/fr/maif/json/EventEnvelopeJsonFormat.java @@ -1,7 +1,7 @@ package fr.maif.json; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.NullNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.NullNode; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.Type; diff --git a/thoth-core/src/main/java/fr/maif/json/MapperSingleton.java b/thoth-core/src/main/java/fr/maif/json/MapperSingleton.java index 57b89994..f88085fe 100644 --- a/thoth-core/src/main/java/fr/maif/json/MapperSingleton.java +++ b/thoth-core/src/main/java/fr/maif/json/MapperSingleton.java @@ -1,9 +1,10 @@ package fr.maif.json; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.SerializationFeature; +import tools.jackson.databind.cfg.DateTimeFeature; +import tools.jackson.databind.json.JsonMapper; public final class MapperSingleton { public final static ObjectMapper mapper = buildMapper(); @@ -16,11 +17,11 @@ public static ObjectMapper getInstance() { } private static ObjectMapper buildMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + ObjectMapper mapper = JsonMapper.builder() + .configure(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) + .build(); return mapper; } } diff --git a/thoth-core/src/main/java/fr/maif/kafka/JsonSerializer.java b/thoth-core/src/main/java/fr/maif/kafka/JsonSerializer.java index ed39adb7..aca224c7 100644 --- a/thoth-core/src/main/java/fr/maif/kafka/JsonSerializer.java +++ b/thoth-core/src/main/java/fr/maif/kafka/JsonSerializer.java @@ -1,6 +1,6 @@ package fr.maif.kafka; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.format.EventFormat; diff --git a/thoth-core/src/test/java/fr/maif/Helpers.java b/thoth-core/src/test/java/fr/maif/Helpers.java index 62bdcbd0..25b81a75 100644 --- a/thoth-core/src/test/java/fr/maif/Helpers.java +++ b/thoth-core/src/test/java/fr/maif/Helpers.java @@ -1,6 +1,6 @@ package fr.maif; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.*; import fr.maif.eventsourcing.format.JacksonEventFormat; diff --git a/thoth-core/src/test/java/fr/maif/Json.java b/thoth-core/src/test/java/fr/maif/Json.java index 4d0b60b7..ba14c0ae 100644 --- a/thoth-core/src/test/java/fr/maif/Json.java +++ b/thoth-core/src/test/java/fr/maif/Json.java @@ -1,24 +1,20 @@ package fr.maif; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.*; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import tools.jackson.databind.*; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; -import java.io.IOException; +import static tools.jackson.core.json.JsonWriteFeature.ESCAPE_NON_ASCII; public class Json { private static final ObjectMapper defaultObjectMapper = newDefaultMapper(); private static volatile ObjectMapper objectMapper = null; public static ObjectMapper newDefaultMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new Jdk8Module()); - mapper.registerModule(new JavaTimeModule()); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - return mapper; + return JsonMapper.builder() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .build(); } /** @@ -37,18 +33,14 @@ public static ObjectMapper mapper() { } private static String generateJson(Object o, boolean prettyPrint, boolean escapeNonASCII) { - try { - ObjectWriter writer = mapper().writer(); - if (prettyPrint) { - writer = writer.with(SerializationFeature.INDENT_OUTPUT); - } - if (escapeNonASCII) { - writer = writer.with(JsonGenerator.Feature.ESCAPE_NON_ASCII); - } - return writer.writeValueAsString(o); - } catch (IOException e) { - throw new RuntimeException(e); + ObjectWriter writer = mapper().writer(); + if (prettyPrint) { + writer = writer.with(SerializationFeature.INDENT_OUTPUT); + } + if (escapeNonASCII) { + writer = writer.with(ESCAPE_NON_ASCII); } + return writer.writeValueAsString(o); } /** diff --git a/thoth-core/src/test/java/fr/maif/json/EventEnvelopeJsonFormatTest.java b/thoth-core/src/test/java/fr/maif/json/EventEnvelopeJsonFormatTest.java index f3dbdf7d..25607569 100644 --- a/thoth-core/src/test/java/fr/maif/json/EventEnvelopeJsonFormatTest.java +++ b/thoth-core/src/test/java/fr/maif/json/EventEnvelopeJsonFormatTest.java @@ -1,12 +1,12 @@ package fr.maif.json; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import fr.maif.Helpers; -import io.vavr.Tuple0; import fr.maif.eventsourcing.EventEnvelope; +import io.vavr.Tuple0; import io.vavr.control.Either; import org.junit.jupiter.api.Test; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import java.time.LocalDateTime; import java.util.UUID; @@ -184,7 +184,7 @@ public void jsonSchema() { @Test public void legacyMethod() { - Either read = eventReader.jacksonEventFormat(seq -> seq.map(e -> e.message).mkString(", ")).read(VikingCreatedV1.name(), VikingCreatedV1.version(), eventJson); + Either read = eventReader.jacksonEventFormat(seq -> seq.map(JsResult.Error::message).mkString(", ")).read(VikingCreatedV1.name(), VikingCreatedV1.version(), eventJson); assertThat(read).isEqualTo(Either.right(event)); } } \ No newline at end of file diff --git a/thoth-core/src/test/java/fr/maif/kafka/JsonSerDeserializerTest.java b/thoth-core/src/test/java/fr/maif/kafka/JsonSerDeserializerTest.java index 11ff07c4..00eb0e1e 100644 --- a/thoth-core/src/test/java/fr/maif/kafka/JsonSerDeserializerTest.java +++ b/thoth-core/src/test/java/fr/maif/kafka/JsonSerDeserializerTest.java @@ -1,7 +1,7 @@ package fr.maif.kafka; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.TextNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.StringNode; import fr.maif.Helpers; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.format.JacksonSimpleFormat; @@ -30,8 +30,8 @@ public void test() { .withVersion(Helpers.VikingEvent.VikingCreatedV1.version()) .withTotalMessageInTransaction(1) .withNumMessageInTransaction(1) - .withContext(new TextNode("context")) - .withMetadata(new TextNode("metadata")) + .withContext(new StringNode("context")) + .withMetadata(new StringNode("metadata")) .withTransactionId("1") .withEvent(new Helpers.VikingEvent.VikingCreated("1", "ragnar")) .build(); diff --git a/thoth-jooq-akka/build.gradle b/thoth-jooq-pekko/build.gradle similarity index 69% rename from thoth-jooq-akka/build.gradle rename to thoth-jooq-pekko/build.gradle index 970af205..76d04d69 100644 --- a/thoth-jooq-akka/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -3,25 +3,26 @@ dependencies { implementation project(':commons-events') implementation project(':thoth-core') - implementation project(':thoth-core-akka') + implementation project(':thoth-core-pekko') implementation("io.vavr:vavr:$vavrVersion") implementation("org.jooq:jooq:$jooqVersion") implementation("fr.maif:jooq-async-api:$jooqAsyncVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") - implementation("com.typesafe.akka:akka-stream_$scalaVersion:$akkaVersion") - implementation("com.typesafe.akka:akka-stream-kafka_$scalaVersion:$alpakkaKafkaVersion") + + implementation "org.apache.pekko:pekko-actor_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-slf4j_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-connectors-kafka_$scalaVersion:$pekkoKafkaVersion" + implementation("io.vertx:vertx-pg-client:$vertxSqlVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") - testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation('org.assertj:assertj-core:3.27.7') testImplementation('org.postgresql:postgresql:42.7.7') testImplementation("org.mockito:mockito-all:1.10.19") testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.4.2' testImplementation "org.testcontainers:junit-jupiter:$testContainerVersion" testImplementation "org.testcontainers:testcontainers:$testContainerVersion" testImplementation "org.testcontainers:postgresql:$testContainerVersion" diff --git a/thoth-jooq-akka/readme.md b/thoth-jooq-pekko/readme.md similarity index 100% rename from thoth-jooq-akka/readme.md rename to thoth-jooq-pekko/readme.md diff --git a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java similarity index 97% rename from thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java rename to thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java index 6254b105..ccf58a5b 100644 --- a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java +++ b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java @@ -1,14 +1,14 @@ package fr.maif.eventsourcing; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.AsPublisher; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.AsPublisher; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.NullNode; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.eventsourcing.format.JacksonSimpleFormat; import fr.maif.jooq.PgAsyncPool; diff --git a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java similarity index 98% rename from thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java rename to thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java index cef96301..8d42ba32 100644 --- a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java +++ b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessor.java @@ -1,7 +1,7 @@ package fr.maif.eventsourcing; -import akka.actor.ActorSystem; -import akka.kafka.ProducerSettings; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ProducerSettings; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.eventsourcing.format.JacksonSimpleFormat; import fr.maif.akka.eventsourcing.DefaultAggregateStore; diff --git a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java similarity index 99% rename from thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java rename to thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java index 47df8389..a7b6ae42 100644 --- a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java +++ b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactivePostgresKafkaEventProcessorBuilder.java @@ -1,7 +1,7 @@ package fr.maif.eventsourcing; -import akka.actor.ActorSystem; -import akka.kafka.ProducerSettings; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ProducerSettings; import fr.maif.eventsourcing.EventStore.ConcurrentReplayStrategy; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.eventsourcing.format.JacksonSimpleFormat; diff --git a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactiveTransactionManager.java b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactiveTransactionManager.java similarity index 100% rename from thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/ReactiveTransactionManager.java rename to thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/ReactiveTransactionManager.java diff --git a/thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/TableNames.java b/thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/TableNames.java similarity index 100% rename from thoth-jooq-akka/src/main/java/fr/maif/eventsourcing/TableNames.java rename to thoth-jooq-pekko/src/main/java/fr/maif/eventsourcing/TableNames.java diff --git a/thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java b/thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java similarity index 98% rename from thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java rename to thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java index eb8396fe..345c7eef 100644 --- a/thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java +++ b/thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java @@ -1,12 +1,12 @@ package fr.maif.eventsourcing; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.eventsourcing.format.JacksonSimpleFormat; import fr.maif.jooq.PgAsyncPool; diff --git a/thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/JdbcPostgresEventStoreTest.java b/thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/JdbcPostgresEventStoreTest.java similarity index 100% rename from thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/JdbcPostgresEventStoreTest.java rename to thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/JdbcPostgresEventStoreTest.java diff --git a/thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/ReactivePostgresEventStoreTest.java b/thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/ReactivePostgresEventStoreTest.java similarity index 100% rename from thoth-jooq-akka/src/test/java/fr/maif/eventsourcing/ReactivePostgresEventStoreTest.java rename to thoth-jooq-pekko/src/test/java/fr/maif/eventsourcing/ReactivePostgresEventStoreTest.java diff --git a/thoth-jooq-reactor/build.gradle b/thoth-jooq-reactor/build.gradle index 09c55090..50e143da 100644 --- a/thoth-jooq-reactor/build.gradle +++ b/thoth-jooq-reactor/build.gradle @@ -14,8 +14,6 @@ dependencies { implementation("io.vertx:vertx-pg-client:$vertxSqlVersion") implementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") implementation("org.scala-lang:scala-library:2.13.16") testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") @@ -24,7 +22,7 @@ dependencies { testImplementation('org.postgresql:postgresql:42.7.7') testImplementation("org.mockito:mockito-all:1.10.19") testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.4.2' testImplementation "org.testcontainers:junit-jupiter:$testContainerVersion" testImplementation "org.testcontainers:testcontainers:$testContainerVersion" testImplementation "org.testcontainers:postgresql:$testContainerVersion" diff --git a/thoth-jooq-reactor/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java b/thoth-jooq-reactor/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java index 61e17689..9eb05359 100644 --- a/thoth-jooq-reactor/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java +++ b/thoth-jooq-reactor/src/main/java/fr/maif/eventsourcing/ReactivePostgresEventStore.java @@ -1,8 +1,8 @@ package fr.maif.eventsourcing; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.NullNode; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.eventsourcing.format.JacksonSimpleFormat; import fr.maif.jooq.PgAsyncPool; diff --git a/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java b/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java index daecc48b..eed786de 100644 --- a/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java +++ b/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/AbstractPostgresEventStoreTest.java @@ -1,7 +1,7 @@ package fr.maif.eventsourcing; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.eventsourcing.format.JacksonSimpleFormat; import fr.maif.jooq.PgAsyncPool; diff --git a/thoth-jooq/build.gradle b/thoth-jooq/build.gradle index 1743a4e2..b8a5313c 100644 --- a/thoth-jooq/build.gradle +++ b/thoth-jooq/build.gradle @@ -11,12 +11,10 @@ dependencies { implementation("org.jooq:jooq:$jooqVersion") implementation("javax.annotation:jsr250-api:1.0") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") testImplementation project(':thoth-tck') - testImplementation("com.typesafe.akka:akka-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-testkit_$scalaVersion:$akkaVersion") + testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") + testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation("com.zaxxer:HikariCP:4.0.3") testImplementation("org.assertj:assertj-core:3.10.0") testImplementation('com.h2database:h2:2.2.220') diff --git a/thoth-jooq/src/main/java/fr/maif/eventsourcing/impl/PostgresEventStore.java b/thoth-jooq/src/main/java/fr/maif/eventsourcing/impl/PostgresEventStore.java index 06f44697..aa097843 100644 --- a/thoth-jooq/src/main/java/fr/maif/eventsourcing/impl/PostgresEventStore.java +++ b/thoth-jooq/src/main/java/fr/maif/eventsourcing/impl/PostgresEventStore.java @@ -1,8 +1,8 @@ package fr.maif.eventsourcing.impl; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.NullNode; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Event; import fr.maif.eventsourcing.EventEnvelope; diff --git a/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java b/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java index 0ed0c6b4..3af8e94e 100644 --- a/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java +++ b/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java @@ -15,8 +15,8 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.eventsourcing.EventStore; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; @@ -33,10 +33,10 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; -import akka.actor.ActorSystem; +import org.apache.pekko.actor.ActorSystem; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.eventsourcing.EventProcessorImpl; import fr.maif.eventsourcing.PostgresKafkaEventProcessor; diff --git a/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/PostgresEventStoreTest.java b/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/PostgresEventStoreTest.java index 07e8d21f..ffc6aa74 100644 --- a/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/PostgresEventStoreTest.java +++ b/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/PostgresEventStoreTest.java @@ -1,12 +1,12 @@ package fr.maif.eventsourcing.impl; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.stream.Materializer; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import fr.maif.eventsourcing.*; diff --git a/thoth-kafka-consumer-akka/build.gradle b/thoth-kafka-consumer-akka/build.gradle deleted file mode 100644 index 617c392e..00000000 --- a/thoth-kafka-consumer-akka/build.gradle +++ /dev/null @@ -1,22 +0,0 @@ - -dependencies { - implementation("com.typesafe.akka:akka-stream_$scalaVersion:$akkaVersion") - implementation("com.typesafe.akka:akka-stream-kafka_$scalaVersion:$alpakkaKafkaVersion") - - testImplementation("com.typesafe.akka:akka-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-kafka-testkit_$scalaVersion:$alpakkaKafkaVersion") - testImplementation("org.assertj:assertj-core:3.10.0") - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") - testImplementation("net.aichler:jupiter-interface:0.9.1") - testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") - testImplementation("org.testcontainers:kafka:1.15.1") - -} - -test { - useJUnitPlatform() -} \ No newline at end of file diff --git a/thoth-kafka-consumer-pekko/build.gradle b/thoth-kafka-consumer-pekko/build.gradle new file mode 100644 index 00000000..a018b75d --- /dev/null +++ b/thoth-kafka-consumer-pekko/build.gradle @@ -0,0 +1,24 @@ + +dependencies { + implementation "org.apache.pekko:pekko-actor_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-slf4j_$scalaVersion:$pekkoVersion" + implementation "org.apache.pekko:pekko-connectors-kafka_$scalaVersion:$pekkoKafkaVersion" + + testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") + testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") + testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" + testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") + testImplementation("org.junit.platform:junit-platform-commons:1.4.2") + testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") + testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") + testImplementation("net.aichler:jupiter-interface:0.9.1") + testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") + testImplementation("org.testcontainers:kafka:$testContainerVersion") + +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/thoth-kafka-consumer-akka/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java b/thoth-kafka-consumer-pekko/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java similarity index 96% rename from thoth-kafka-consumer-akka/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java rename to thoth-kafka-consumer-pekko/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java index 4d41ce8a..18bb524c 100644 --- a/thoth-kafka-consumer-akka/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java +++ b/thoth-kafka-consumer-pekko/src/main/java/fr/maif/kafka/consumer/ResilientKafkaConsumer.java @@ -1,21 +1,21 @@ package fr.maif.kafka.consumer; -import akka.Done; -import akka.NotUsed; -import akka.actor.ActorSystem; -import akka.japi.Pair; -import akka.kafka.AutoSubscription; -import akka.kafka.CommitterSettings; -import akka.kafka.ConsumerMessage; -import akka.kafka.ConsumerSettings; -import akka.kafka.javadsl.Committer; -import akka.kafka.javadsl.Consumer; -import akka.stream.Materializer; -import akka.stream.javadsl.Flow; -import akka.stream.javadsl.FlowWithContext; -import akka.stream.javadsl.RestartSource; -import akka.stream.javadsl.Sink; -import akka.stream.javadsl.Source; +import org.apache.pekko.Done; +import org.apache.pekko.NotUsed; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.japi.Pair; +import org.apache.pekko.kafka.AutoSubscription; +import org.apache.pekko.kafka.CommitterSettings; +import org.apache.pekko.kafka.ConsumerMessage; +import org.apache.pekko.kafka.ConsumerSettings; +import org.apache.pekko.kafka.javadsl.Committer; +import org.apache.pekko.kafka.javadsl.Consumer; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Flow; +import org.apache.pekko.stream.javadsl.FlowWithContext; +import org.apache.pekko.stream.javadsl.RestartSource; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +33,7 @@ import java.util.function.Function; import java.util.function.Supplier; -import static akka.Done.done; +import static org.apache.pekko.Done.done; import static java.util.function.Function.identity; public abstract class ResilientKafkaConsumer { diff --git a/thoth-kafka-consumer-akka/src/main/java/fr/maif/kafka/consumer/Status.java b/thoth-kafka-consumer-pekko/src/main/java/fr/maif/kafka/consumer/Status.java similarity index 100% rename from thoth-kafka-consumer-akka/src/main/java/fr/maif/kafka/consumer/Status.java rename to thoth-kafka-consumer-pekko/src/main/java/fr/maif/kafka/consumer/Status.java diff --git a/thoth-kafka-consumer-akka/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java similarity index 94% rename from thoth-kafka-consumer-akka/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java rename to thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java index 469fd4ec..83365407 100644 --- a/thoth-kafka-consumer-akka/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java +++ b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java @@ -1,16 +1,16 @@ package fr.maif.kafka.consumer; -import akka.Done; -import akka.actor.ActorSystem; -import akka.kafka.ConsumerMessage.CommittableMessage; -import akka.kafka.ConsumerMessage.CommittableOffset; -import akka.kafka.ConsumerSettings; -import akka.kafka.Subscriptions; -import akka.kafka.testkit.javadsl.TestcontainersKafkaTest; -import akka.stream.Materializer; -import akka.stream.javadsl.Flow; -import akka.stream.javadsl.FlowWithContext; -import akka.testkit.javadsl.TestKit; +import org.apache.pekko.Done; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ConsumerMessage.CommittableMessage; +import org.apache.pekko.kafka.ConsumerMessage.CommittableOffset; +import org.apache.pekko.kafka.ConsumerSettings; +import org.apache.pekko.kafka.Subscriptions; +import org.apache.pekko.kafka.testkit.javadsl.TestcontainersKafkaTest; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.Flow; +import org.apache.pekko.stream.javadsl.FlowWithContext; +import org.apache.pekko.testkit.javadsl.TestKit; import org.apache.kafka.common.serialization.StringDeserializer; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; diff --git a/thoth-kafka-consumer-reactor/build.gradle b/thoth-kafka-consumer-reactor/build.gradle index 3c4a8992..93fb9866 100644 --- a/thoth-kafka-consumer-reactor/build.gradle +++ b/thoth-kafka-consumer-reactor/build.gradle @@ -3,20 +3,19 @@ dependencies { implementation "io.projectreactor.kafka:reactor-kafka:$reactorKafkaVersion" implementation "io.vavr:vavr:$vavrVersion" implementation('org.slf4j:slf4j-api:2.0.7') - - testImplementation("com.typesafe.akka:akka-stream_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-kafka_$scalaVersion:$alpakkaKafkaVersion") - testImplementation("com.typesafe.akka:akka-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-testkit_$scalaVersion:$akkaVersion") - testImplementation("com.typesafe.akka:akka-stream-kafka-testkit_$scalaVersion:$alpakkaKafkaVersion") - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.apache.pekko:pekko-actor_$scalaVersion:$pekkoVersion") + testImplementation("org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion") + testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") + testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") + testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" + testImplementation('org.assertj:assertj-core:3.27.7') testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") testImplementation("org.junit.platform:junit-platform-commons:1.4.2") testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") - testImplementation("org.testcontainers:kafka:1.15.1") + testImplementation("org.testcontainers:kafka:$testContainerVersion") testImplementation 'ch.qos.logback:logback-classic:1.4.1' } diff --git a/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java b/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java index 83f18eef..7943db4d 100644 --- a/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java +++ b/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java @@ -1,9 +1,9 @@ package fr.maif.kafka.consumer; -import akka.actor.ActorSystem; -import akka.kafka.testkit.javadsl.TestcontainersKafkaTest; -import akka.stream.Materializer; -import akka.testkit.javadsl.TestKit; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.testkit.javadsl.TestcontainersKafkaTest; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.testkit.javadsl.TestKit; import fr.maif.kafka.reactor.consumer.ResilientKafkaConsumer; import fr.maif.kafka.reactor.consumer.Status; import org.apache.kafka.clients.consumer.ConsumerConfig; diff --git a/thoth-tck/build.gradle b/thoth-tck/build.gradle index 6667f47a..1a4933d5 100644 --- a/thoth-tck/build.gradle +++ b/thoth-tck/build.gradle @@ -2,15 +2,15 @@ dependencies { implementation project(':commons-events') implementation project(':thoth-core') - implementation("org.assertj:assertj-core:3.10.0") - implementation("org.testng:testng:6.3") + implementation('org.assertj:assertj-core:3.27.7') + implementation('org.testng:testng:7.7.0') implementation("io.vavr:vavr:$vavrVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") + implementation("tools.jackson.core:jackson-databind:$jacksonVersion") + implementation("com.fasterxml.jackson.core:jackson-annotations:2.21") - testImplementation project(':thoth-core-akka') - testImplementation("com.typesafe.akka:akka-stream_$scalaVersion:$akkaVersion") + testImplementation project(':thoth-core-pekko') + testImplementation("org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion") testImplementation("org.mockito:mockito-core:3.6.28") } @@ -20,4 +20,3 @@ test { suites 'src/test/resources/testng.xml' //location of our suite.xml } } - diff --git a/thoth-tck/src/main/java/fr/maif/eventsourcing/datastore/TestEventFormat.java b/thoth-tck/src/main/java/fr/maif/eventsourcing/datastore/TestEventFormat.java index 8182a191..a92aedff 100644 --- a/thoth-tck/src/main/java/fr/maif/eventsourcing/datastore/TestEventFormat.java +++ b/thoth-tck/src/main/java/fr/maif/eventsourcing/datastore/TestEventFormat.java @@ -1,6 +1,6 @@ package fr.maif.eventsourcing.datastore; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import fr.maif.eventsourcing.format.JacksonEventFormat; import fr.maif.json.Json; import fr.maif.json.JsonWrite; diff --git a/thoth-tck/src/test/java/fr/maif/eventsourcing/datastore/InMemoryDataStoreTest.java b/thoth-tck/src/test/java/fr/maif/eventsourcing/datastore/InMemoryDataStoreTest.java index 70db1dac..1f9f1979 100644 --- a/thoth-tck/src/test/java/fr/maif/eventsourcing/datastore/InMemoryDataStoreTest.java +++ b/thoth-tck/src/test/java/fr/maif/eventsourcing/datastore/InMemoryDataStoreTest.java @@ -5,14 +5,14 @@ import java.util.concurrent.ExecutionException; import java.util.function.Function; -import akka.stream.javadsl.Source; +import org.apache.pekko.stream.javadsl.Source; import fr.maif.akka.eventsourcing.DefaultAggregateStore; import fr.maif.eventsourcing.*; import org.mockito.Mockito; import org.testng.annotations.BeforeMethod; -import akka.actor.ActorSystem; -import akka.stream.javadsl.Sink; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.stream.javadsl.Sink; import fr.maif.akka.eventsourcing.InMemoryEventStore; import io.vavr.Tuple; import io.vavr.Tuple0; From 289dfe3017843884afd007d8a0b7f79d402a2cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 16:27:02 +0200 Subject: [PATCH 02/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- sample/build.gradle | 5 ++++- .../fr/maif/thoth/sample/ThothSampleApplicationTests.java | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sample/build.gradle b/sample/build.gradle index 56e9bcd2..bc0d4b3b 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -18,6 +18,7 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter:$springBootVersion") implementation("org.springframework.boot:spring-boot-starter-web:$springBootVersion") implementation("org.springframework.boot:spring-boot-starter-jooq:$springBootVersion") + implementation("org.springframework.boot:spring-boot-starter-restclient:$springBootVersion") implementation('org.postgresql:postgresql:42.7.7') implementation("io.projectreactor:reactor-core:$reactorVersion") implementation "io.projectreactor.kafka:reactor-kafka:$reactorKafkaVersion" @@ -29,7 +30,9 @@ dependencies { testImplementation("org.testcontainers:postgresql:$testContainerVersion") testImplementation("org.testcontainers:kafka:$testContainerVersion") testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") - testImplementation("org.springframework.boot:spring-boot-starter-test:3.4.5") + testImplementation("org.springframework.boot:spring-boot-starter-test:$springBootVersion") + testImplementation("org.springframework.boot:spring-boot-starter-restclient-test:$springBootVersion") + testImplementation("org.springframework.boot:spring-boot-resttestclient:$springBootVersion") testImplementation('org.assertj:assertj-core:3.27.7') } diff --git a/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java b/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java index e60ffa57..d6bac90f 100644 --- a/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java +++ b/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java @@ -20,8 +20,9 @@ import org.junit.jupiter.api.*; import org.postgresql.ds.PGSimpleDataSource; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.http.HttpMethod; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.DynamicPropertyRegistry; @@ -48,6 +49,7 @@ @ActiveProfiles("test") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @TestInstance(TestInstance.Lifecycle.PER_CLASS) +@AutoConfigureTestRestTemplate @Testcontainers public class ThothSampleApplicationTests { @@ -60,9 +62,9 @@ public class ThothSampleApplicationTests { private BankEventFormat eventFormat; @Container - private static PostgreSQLContainer postgres = new PostgreSQLContainer<>(DockerImageName.parse("postgres").withTag("11.2")); + private static final PostgreSQLContainer postgres = new PostgreSQLContainer<>(DockerImageName.parse("postgres").withTag("11.2")); @Container - private static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka").withTag("6.0.1")); + private static final KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka").withTag("6.0.1")); private PGSimpleDataSource pgDataSource; static { From 654a7798f6463680f07b240255b6855f6dc0a941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 16:50:51 +0200 Subject: [PATCH 03/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- thoth-core-pekko/build.gradle | 3 +- .../EventuallyConsistentProjectionTest.java | 25 ++--- .../maif/projections/KafkaContainerTest.java | 95 +++++++++++++++++++ .../impl/JooqKafkaTckImplementation.java | 2 - thoth-kafka-consumer-pekko/build.gradle | 2 + .../kafka/consumer/KafkaContainerTest.java | 94 ++++++++++++++++++ .../consumer/ResilientKafkaConsumerTest.java | 31 +++--- thoth-kafka-consumer-reactor/build.gradle | 1 + .../kafka/consumer/KafkaContainerTest.java | 94 ++++++++++++++++++ .../consumer/ResilientKafkaConsumerTest.java | 30 +++--- 10 files changed, 323 insertions(+), 54 deletions(-) create mode 100644 thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java create mode 100644 thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java create mode 100644 thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java diff --git a/thoth-core-pekko/build.gradle b/thoth-core-pekko/build.gradle index 47db6b63..45f364e7 100644 --- a/thoth-core-pekko/build.gradle +++ b/thoth-core-pekko/build.gradle @@ -15,6 +15,8 @@ dependencies { implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") implementation("fr.maif:functional-json:$functionalJsonVersion") + testImplementation("org.testcontainers:kafka:$testContainerVersion") + testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") testImplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") implementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" @@ -27,7 +29,6 @@ dependencies { testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") - testImplementation("org.testcontainers:kafka:$testContainerVersion") } test { diff --git a/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java b/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java index d2759e27..ef1ff066 100644 --- a/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java @@ -1,45 +1,40 @@ package fr.maif.projections; -import org.apache.pekko.actor.ActorSystem; -import org.apache.pekko.kafka.testkit.javadsl.TestcontainersKafkaTest; -import org.apache.pekko.stream.Materializer; -import org.apache.pekko.testkit.javadsl.TestKit; -import tools.jackson.databind.JsonNode; import fr.maif.Helpers; import fr.maif.Helpers.VikingEvent; import fr.maif.akka.projections.EventuallyConsistentProjection; +import fr.maif.akka.projections.EventuallyConsistentProjection.Config; import fr.maif.eventsourcing.EventEnvelope; import fr.maif.json.Json; import fr.maif.json.JsonFormat; -import fr.maif.akka.projections.EventuallyConsistentProjection.Config; import io.vavr.API; import io.vavr.Tuple; import io.vavr.Tuple0; import io.vavr.concurrent.Future; import io.vavr.control.Option; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.testkit.javadsl.TestKit; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import tools.jackson.databind.JsonNode; import java.time.LocalDateTime; import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; -import static io.vavr.API.Case; import static io.vavr.API.Match; import static io.vavr.API.println; import static org.assertj.core.api.Assertions.assertThat; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -class EventuallyConsistentProjectionTest extends TestcontainersKafkaTest { +@Testcontainers +class EventuallyConsistentProjectionTest implements KafkaContainerTest { private static JsonFormat> vikingEventJsonFormat = new Helpers.VikingEventJsonFormat(); private static final ActorSystem system = ActorSystem.create("test"); - public EventuallyConsistentProjectionTest() { - super(system, Materializer.createMaterializer(system)); - } - @Test void consumer() throws Exception { @@ -62,9 +57,9 @@ void consumer() throws Exception { ); Thread.sleep(3000); - resultOf(produceString(topic, stringEvent(new VikingEvent.VikingCreated("1", "Lodbrock")))); - resultOf(produceString(topic, stringEvent(new VikingEvent.VikingCreated("2", "Lagerta")))); - resultOf(produceString(topic, stringEvent(new VikingEvent.VikingUpdated("1", "Lodbrok")))); + produceString(topic, stringEvent(new VikingEvent.VikingCreated("1", "Lodbrock"))); + produceString(topic, stringEvent(new VikingEvent.VikingCreated("2", "Lagerta"))); + produceString(topic, stringEvent(new VikingEvent.VikingUpdated("1", "Lodbrok"))); Thread.sleep(1000); diff --git a/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java b/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java new file mode 100644 index 00000000..1854254a --- /dev/null +++ b/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java @@ -0,0 +1,95 @@ +package fr.maif.projections; + +import org.apache.kafka.clients.admin.Admin; +import org.apache.kafka.clients.admin.AdminClientConfig; +import org.apache.kafka.clients.admin.CreateTopicsResult; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringSerializer; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; + +import static io.vavr.API.println; + +@Testcontainers +public interface KafkaContainerTest { + + AtomicInteger counter = new AtomicInteger(0); + + @Container + KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) + .withStartupAttempts(2); + + static void startContainer() { + kafkaContainer.start(); + } + + default String bootstrapServers() { + return kafkaContainer.getBootstrapServers(); + } + + default Admin adminClient() { + return Admin.create(Map.of( + AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + )); + } + + default String createTopic() { + return createTopic("topic-"+counter.incrementAndGet(), 3, 1); + } + + default String createTopic(String name, int partitions, int replication) { + try { + CreateTopicsResult createTopicsResult = adminClient().createTopics(java.util.List.of(new NewTopic(name, partitions, (short) replication))); + createTopicsResult.all().get(10, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException("Unable to create topic with name " + name, e); + } + return name; + } + + default void deleteTopics() { + try { + Set topics = adminClient().listTopics().names().get(5, TimeUnit.SECONDS); + if (!topics.isEmpty()) { + println("Deleting " + String.join(",", topics)); + adminClient().deleteTopics(topics).all().get(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + default KafkaProducer producer() { + return new KafkaProducer<>(Map.of( + ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + ), new StringSerializer(), new StringSerializer()); + } + + default void produceString(String topic, String event) { + CompletableFuture completableFuture = new CompletableFuture<>(); + producer().send(new ProducerRecord<>( + topic, event + ), (recordMetadata, e) -> { + if (e != null) { + completableFuture.completeExceptionally(e); + } else { + completableFuture.complete(recordMetadata.topic()); + } + }); + completableFuture.join(); + } + +} diff --git a/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java b/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java index 3af8e94e..04abe040 100644 --- a/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java +++ b/thoth-jooq/src/test/java/fr/maif/eventsourcing/impl/JooqKafkaTckImplementation.java @@ -273,8 +273,6 @@ public EventEnvelope parsEnvelope(String value) { future::complete ); return future.get(); - } catch (IOException e) { - throw new UncheckedIOException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } catch (ExecutionException e) { diff --git a/thoth-kafka-consumer-pekko/build.gradle b/thoth-kafka-consumer-pekko/build.gradle index a018b75d..c775b1db 100644 --- a/thoth-kafka-consumer-pekko/build.gradle +++ b/thoth-kafka-consumer-pekko/build.gradle @@ -5,6 +5,8 @@ dependencies { implementation "org.apache.pekko:pekko-slf4j_$scalaVersion:$pekkoVersion" implementation "org.apache.pekko:pekko-connectors-kafka_$scalaVersion:$pekkoKafkaVersion" + testImplementation("org.testcontainers:kafka:$testContainerVersion") + testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" diff --git a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java new file mode 100644 index 00000000..618c4f8a --- /dev/null +++ b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java @@ -0,0 +1,94 @@ +package fr.maif.kafka.consumer; + +import org.apache.kafka.clients.admin.Admin; +import org.apache.kafka.clients.admin.AdminClientConfig; +import org.apache.kafka.clients.admin.CreateTopicsResult; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringSerializer; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; + + +@Testcontainers +public interface KafkaContainerTest { + + AtomicInteger counter = new AtomicInteger(0); + + @Container + KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) + .withStartupAttempts(2); + + static void startContainer() { + kafkaContainer.start(); + } + + default String bootstrapServers() { + return kafkaContainer.getBootstrapServers(); + } + + default Admin adminClient() { + return Admin.create(Map.of( + AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + )); + } + + default String createTopic() { + return createTopic("topic-"+counter.incrementAndGet(), 3, 1); + } + + default String createTopic(String name, int partitions, int replication) { + try { + CreateTopicsResult createTopicsResult = adminClient().createTopics(java.util.List.of(new NewTopic(name, partitions, (short) replication))); + createTopicsResult.all().get(10, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException("Unable to create topic with name " + name, e); + } + return name; + } + + default void deleteTopics() { + try { + Set topics = adminClient().listTopics().names().get(5, TimeUnit.SECONDS); + if (!topics.isEmpty()) { + System.out.println("Deleting " + String.join(",", topics)); + adminClient().deleteTopics(topics).all().get(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + default KafkaProducer producer() { + return new KafkaProducer<>(Map.of( + ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + ), new StringSerializer(), new StringSerializer()); + } + + default void produceString(String topic, String event) { + CompletableFuture completableFuture = new CompletableFuture<>(); + producer().send(new ProducerRecord<>( + topic, event + ), (recordMetadata, e) -> { + if (e != null) { + completableFuture.completeExceptionally(e); + } else { + completableFuture.complete(recordMetadata.topic()); + } + }); + completableFuture.join(); + } + +} diff --git a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java index 83365407..16a7dc5e 100644 --- a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java +++ b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java @@ -6,7 +6,6 @@ import org.apache.pekko.kafka.ConsumerMessage.CommittableOffset; import org.apache.pekko.kafka.ConsumerSettings; import org.apache.pekko.kafka.Subscriptions; -import org.apache.pekko.kafka.testkit.javadsl.TestcontainersKafkaTest; import org.apache.pekko.stream.Materializer; import org.apache.pekko.stream.javadsl.Flow; import org.apache.pekko.stream.javadsl.FlowWithContext; @@ -26,13 +25,9 @@ import static org.assertj.core.api.Assertions.assertThat; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -class ResilientKafkaConsumerTest extends TestcontainersKafkaTest { +class ResilientKafkaConsumerTest implements KafkaContainerTest { private static final ActorSystem system = ActorSystem.create("test"); - public ResilientKafkaConsumerTest() { - super(system, Materializer.createMaterializer(system)); - } - @Test void consumer() throws Exception { @@ -61,9 +56,9 @@ void consumer() throws Exception { Thread.sleep(3000); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(10000); @@ -101,9 +96,9 @@ void contexteAkkastreamApi() throws Exception { ); Thread.sleep(3000); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(10000); @@ -152,9 +147,9 @@ void crash() throws Exception { ); Thread.sleep(4000); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(60000); @@ -222,9 +217,9 @@ void consumerLifecycle() throws Exception { assertThat(resilientKafkaConsumer.status()).isIn(Status.Started); assertThat(isStarted.get()).isTrue(); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(10000); diff --git a/thoth-kafka-consumer-reactor/build.gradle b/thoth-kafka-consumer-reactor/build.gradle index 93fb9866..19f8f0b5 100644 --- a/thoth-kafka-consumer-reactor/build.gradle +++ b/thoth-kafka-consumer-reactor/build.gradle @@ -16,6 +16,7 @@ dependencies { testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") testImplementation("org.testcontainers:kafka:$testContainerVersion") + testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") testImplementation 'ch.qos.logback:logback-classic:1.4.1' } diff --git a/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java b/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java new file mode 100644 index 00000000..618c4f8a --- /dev/null +++ b/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/KafkaContainerTest.java @@ -0,0 +1,94 @@ +package fr.maif.kafka.consumer; + +import org.apache.kafka.clients.admin.Admin; +import org.apache.kafka.clients.admin.AdminClientConfig; +import org.apache.kafka.clients.admin.CreateTopicsResult; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringSerializer; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; + + +@Testcontainers +public interface KafkaContainerTest { + + AtomicInteger counter = new AtomicInteger(0); + + @Container + KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) + .withStartupAttempts(2); + + static void startContainer() { + kafkaContainer.start(); + } + + default String bootstrapServers() { + return kafkaContainer.getBootstrapServers(); + } + + default Admin adminClient() { + return Admin.create(Map.of( + AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + )); + } + + default String createTopic() { + return createTopic("topic-"+counter.incrementAndGet(), 3, 1); + } + + default String createTopic(String name, int partitions, int replication) { + try { + CreateTopicsResult createTopicsResult = adminClient().createTopics(java.util.List.of(new NewTopic(name, partitions, (short) replication))); + createTopicsResult.all().get(10, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException("Unable to create topic with name " + name, e); + } + return name; + } + + default void deleteTopics() { + try { + Set topics = adminClient().listTopics().names().get(5, TimeUnit.SECONDS); + if (!topics.isEmpty()) { + System.out.println("Deleting " + String.join(",", topics)); + adminClient().deleteTopics(topics).all().get(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + default KafkaProducer producer() { + return new KafkaProducer<>(Map.of( + ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + ), new StringSerializer(), new StringSerializer()); + } + + default void produceString(String topic, String event) { + CompletableFuture completableFuture = new CompletableFuture<>(); + producer().send(new ProducerRecord<>( + topic, event + ), (recordMetadata, e) -> { + if (e != null) { + completableFuture.completeExceptionally(e); + } else { + completableFuture.complete(recordMetadata.topic()); + } + }); + completableFuture.join(); + } + +} diff --git a/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java b/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java index 7943db4d..7adbd93a 100644 --- a/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java +++ b/thoth-kafka-consumer-reactor/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java @@ -1,13 +1,11 @@ package fr.maif.kafka.consumer; -import org.apache.pekko.actor.ActorSystem; -import org.apache.pekko.kafka.testkit.javadsl.TestcontainersKafkaTest; -import org.apache.pekko.stream.Materializer; -import org.apache.pekko.testkit.javadsl.TestKit; import fr.maif.kafka.reactor.consumer.ResilientKafkaConsumer; import fr.maif.kafka.reactor.consumer.Status; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.common.serialization.StringDeserializer; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.testkit.javadsl.TestKit; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,14 +24,10 @@ import static org.assertj.core.api.Assertions.assertThat; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -class ResilientKafkaConsumerTest extends TestcontainersKafkaTest { +class ResilientKafkaConsumerTest implements KafkaContainerTest { private static final ActorSystem system = ActorSystem.create("test"); private ReceiverOptions receiverOptions; - public ResilientKafkaConsumerTest() { - super(system, Materializer.createMaterializer(system)); - } - @BeforeEach public void init() { Map props = new HashMap<>(); @@ -69,9 +63,9 @@ void consumer() throws Exception { Thread.sleep(3000); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(10000); @@ -110,9 +104,9 @@ void crash() throws Exception { ); Thread.sleep(4000); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(60000); @@ -171,9 +165,9 @@ void consumerLifecycle() throws Exception { assertThat(resilientKafkaConsumer.status()).isIn(Status.Started); assertThat(isStarted.get()).isTrue(); - resultOf(produceString(topic, "event-1")); - resultOf(produceString(topic, "event-2")); - resultOf(produceString(topic, "event-3")); + produceString(topic, "event-1"); + produceString(topic, "event-2"); + produceString(topic, "event-3"); Thread.sleep(10000); From 287129a43c143f3b7d7e0413f71321a9ba976768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 16:53:57 +0200 Subject: [PATCH 04/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- settings.gradle | 12 ++++++------ .../build.gradle | 0 {commons-events => thoth-commons-events}/readme.md | 0 .../src/main/java/fr/maif/eventsourcing/Event.java | 0 .../java/fr/maif/eventsourcing/EventEnvelope.java | 0 .../src/main/java/fr/maif/eventsourcing/Lazy.java | 0 .../src/main/java/fr/maif/eventsourcing/Result.java | 0 .../src/main/java/fr/maif/eventsourcing/Type.java | 0 .../src/main/java/fr/maif/eventsourcing/Unit.java | 0 thoth-core-pekko/build.gradle | 2 +- thoth-core-reactor/build.gradle | 2 +- thoth-core/build.gradle | 2 +- {demo => thoth-demo}/build.gradle | 0 .../demo-in-memory-vanilla/build.gradle | 2 +- .../src/main/java/com/example/demo/Account.java | 0 .../src/main/java/com/example/demo/Bank.java | 0 .../src/main/java/com/example/demo/BankCommand.java | 0 .../java/com/example/demo/BankCommandHandler.java | 0 .../src/main/java/com/example/demo/BankEvent.java | 0 .../main/java/com/example/demo/BankEventHandler.java | 0 .../main/java/com/example/demo/DemoApplication.java | 0 .../src/main/resources/application.properties | 0 {demo => thoth-demo}/demo-in-memory/build.gradle | 2 +- .../src/main/java/com/example/demo/Account.java | 0 .../src/main/java/com/example/demo/Bank.java | 0 .../src/main/java/com/example/demo/BankCommand.java | 0 .../java/com/example/demo/BankCommandHandler.java | 0 .../src/main/java/com/example/demo/BankEvent.java | 0 .../main/java/com/example/demo/BankEventHandler.java | 0 .../main/java/com/example/demo/DemoApplication.java | 0 .../src/main/resources/application.properties | 0 .../demo-postgres-kafka-reactive/build.gradle | 2 +- .../src/main/java/com/example/demo/Account.java | 0 .../src/main/java/com/example/demo/Bank.java | 0 .../src/main/java/com/example/demo/BankCommand.java | 0 .../java/com/example/demo/BankCommandHandler.java | 0 .../src/main/java/com/example/demo/BankEvent.java | 0 .../main/java/com/example/demo/BankEventFormat.java | 0 .../main/java/com/example/demo/BankEventHandler.java | 0 .../main/java/com/example/demo/DemoApplication.java | 0 .../com/example/demo/WithdrawByMonthProjection.java | 0 .../demo-postgres-kafka/build.gradle | 2 +- .../src/main/java/com/example/demo/Account.java | 0 .../src/main/java/com/example/demo/Bank.java | 0 .../java/com/example/demo/BankAggregateStore.java | 0 .../src/main/java/com/example/demo/BankCommand.java | 0 .../java/com/example/demo/BankCommandHandler.java | 0 .../src/main/java/com/example/demo/BankEvent.java | 0 .../main/java/com/example/demo/BankEventFormat.java | 0 .../main/java/com/example/demo/BankEventHandler.java | 0 .../main/java/com/example/demo/DemoApplication.java | 0 .../com/example/demo/MeanWithdrawProjection.java | 0 .../src/main/resources/application.properties | 0 thoth-jooq-pekko/build.gradle | 2 +- thoth-jooq-reactor/build.gradle | 2 +- thoth-jooq/build.gradle | 2 +- {sample => thoth-sample}/.gitignore | 0 .../Thoth.postman_collection.json | 0 {sample => thoth-sample}/build.gradle | 2 +- {sample => thoth-sample}/docker-compose-kafka.yml | 0 {sample => thoth-sample}/docker-compose-postgres.yml | 0 {sample => thoth-sample}/init.sql | 0 .../fr/maif/thoth/sample/ThothSampleApplication.java | 0 .../java/fr/maif/thoth/sample/api/AccountDTO.java | 0 .../java/fr/maif/thoth/sample/api/BalanceDTO.java | 0 .../fr/maif/thoth/sample/api/BankController.java | 0 .../java/fr/maif/thoth/sample/api/TransferDTO.java | 0 .../fr/maif/thoth/sample/api/TransferResultDTO.java | 0 .../fr/maif/thoth/sample/commands/BankCommand.java | 0 .../thoth/sample/commands/BankCommandHandler.java | 0 .../sample/configuration/BankConfiguration.java | 0 .../java/fr/maif/thoth/sample/events/BankEvent.java | 0 .../fr/maif/thoth/sample/events/BankEventFormat.java | 0 .../maif/thoth/sample/events/BankEventHandler.java | 0 .../eventualyconsistent/MeanWithdrawProjection.java | 0 .../transactional/GlobalBalanceProjection.java | 0 .../java/fr/maif/thoth/sample/state/Account.java | 0 .../src/main/resources/application.properties | 0 .../thoth/sample/ThothSampleApplicationTests.java | 0 thoth-tck/build.gradle | 2 +- 80 files changed, 18 insertions(+), 18 deletions(-) rename {commons-events => thoth-commons-events}/build.gradle (100%) rename {commons-events => thoth-commons-events}/readme.md (100%) rename {commons-events => thoth-commons-events}/src/main/java/fr/maif/eventsourcing/Event.java (100%) rename {commons-events => thoth-commons-events}/src/main/java/fr/maif/eventsourcing/EventEnvelope.java (100%) rename {commons-events => thoth-commons-events}/src/main/java/fr/maif/eventsourcing/Lazy.java (100%) rename {commons-events => thoth-commons-events}/src/main/java/fr/maif/eventsourcing/Result.java (100%) rename {commons-events => thoth-commons-events}/src/main/java/fr/maif/eventsourcing/Type.java (100%) rename {commons-events => thoth-commons-events}/src/main/java/fr/maif/eventsourcing/Unit.java (100%) rename {demo => thoth-demo}/build.gradle (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/build.gradle (93%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/Account.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/Bank.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommand.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommandHandler.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEvent.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEventHandler.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/java/com/example/demo/DemoApplication.java (100%) rename {demo => thoth-demo}/demo-in-memory-vanilla/src/main/resources/application.properties (100%) rename {demo => thoth-demo}/demo-in-memory/build.gradle (93%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/Account.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/Bank.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/BankCommand.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/BankCommandHandler.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/BankEvent.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/BankEventHandler.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/java/com/example/demo/DemoApplication.java (100%) rename {demo => thoth-demo}/demo-in-memory/src/main/resources/application.properties (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/build.gradle (96%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Account.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Bank.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommand.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommandHandler.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEvent.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventFormat.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventHandler.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/DemoApplication.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka-reactive/src/main/java/com/example/demo/WithdrawByMonthProjection.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/build.gradle (95%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/Account.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/Bank.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/BankAggregateStore.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/BankCommand.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/BankCommandHandler.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/BankEvent.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/BankEventHandler.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/DemoApplication.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/java/com/example/demo/MeanWithdrawProjection.java (100%) rename {demo => thoth-demo}/demo-postgres-kafka/src/main/resources/application.properties (100%) rename {sample => thoth-sample}/.gitignore (100%) rename {sample => thoth-sample}/Thoth.postman_collection.json (100%) rename {sample => thoth-sample}/build.gradle (97%) rename {sample => thoth-sample}/docker-compose-kafka.yml (100%) rename {sample => thoth-sample}/docker-compose-postgres.yml (100%) rename {sample => thoth-sample}/init.sql (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/api/AccountDTO.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/api/BalanceDTO.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/api/BankController.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/api/TransferDTO.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/api/TransferResultDTO.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/commands/BankCommand.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/commands/BankCommandHandler.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/configuration/BankConfiguration.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/events/BankEvent.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/events/BankEventHandler.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/projections/eventualyconsistent/MeanWithdrawProjection.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/projections/transactional/GlobalBalanceProjection.java (100%) rename {sample => thoth-sample}/src/main/java/fr/maif/thoth/sample/state/Account.java (100%) rename {sample => thoth-sample}/src/main/resources/application.properties (100%) rename {sample => thoth-sample}/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java (100%) diff --git a/settings.gradle b/settings.gradle index 4100e675..863a6636 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,7 +8,7 @@ */ rootProject.name = 'thoth' -include 'commons-events' +include 'thoth-commons-events' include 'thoth-core' include 'thoth-jooq' include 'thoth-core-pekko' @@ -18,8 +18,8 @@ include 'thoth-core-reactor' include 'thoth-jooq-reactor' include 'thoth-kafka-consumer-reactor' include 'thoth-tck' -include 'sample' -include 'demo:demo-in-memory' -include 'demo:demo-in-memory-vanilla' -include 'demo:demo-postgres-kafka' -include 'demo:demo-postgres-kafka-reactive' \ No newline at end of file +include 'thoth-sample' +include 'thoth-demo:demo-in-memory' +include 'thoth-demo:demo-in-memory-vanilla' +include 'thoth-demo:demo-postgres-kafka' +include 'thoth-demo:demo-postgres-kafka-reactive' \ No newline at end of file diff --git a/commons-events/build.gradle b/thoth-commons-events/build.gradle similarity index 100% rename from commons-events/build.gradle rename to thoth-commons-events/build.gradle diff --git a/commons-events/readme.md b/thoth-commons-events/readme.md similarity index 100% rename from commons-events/readme.md rename to thoth-commons-events/readme.md diff --git a/commons-events/src/main/java/fr/maif/eventsourcing/Event.java b/thoth-commons-events/src/main/java/fr/maif/eventsourcing/Event.java similarity index 100% rename from commons-events/src/main/java/fr/maif/eventsourcing/Event.java rename to thoth-commons-events/src/main/java/fr/maif/eventsourcing/Event.java diff --git a/commons-events/src/main/java/fr/maif/eventsourcing/EventEnvelope.java b/thoth-commons-events/src/main/java/fr/maif/eventsourcing/EventEnvelope.java similarity index 100% rename from commons-events/src/main/java/fr/maif/eventsourcing/EventEnvelope.java rename to thoth-commons-events/src/main/java/fr/maif/eventsourcing/EventEnvelope.java diff --git a/commons-events/src/main/java/fr/maif/eventsourcing/Lazy.java b/thoth-commons-events/src/main/java/fr/maif/eventsourcing/Lazy.java similarity index 100% rename from commons-events/src/main/java/fr/maif/eventsourcing/Lazy.java rename to thoth-commons-events/src/main/java/fr/maif/eventsourcing/Lazy.java diff --git a/commons-events/src/main/java/fr/maif/eventsourcing/Result.java b/thoth-commons-events/src/main/java/fr/maif/eventsourcing/Result.java similarity index 100% rename from commons-events/src/main/java/fr/maif/eventsourcing/Result.java rename to thoth-commons-events/src/main/java/fr/maif/eventsourcing/Result.java diff --git a/commons-events/src/main/java/fr/maif/eventsourcing/Type.java b/thoth-commons-events/src/main/java/fr/maif/eventsourcing/Type.java similarity index 100% rename from commons-events/src/main/java/fr/maif/eventsourcing/Type.java rename to thoth-commons-events/src/main/java/fr/maif/eventsourcing/Type.java diff --git a/commons-events/src/main/java/fr/maif/eventsourcing/Unit.java b/thoth-commons-events/src/main/java/fr/maif/eventsourcing/Unit.java similarity index 100% rename from commons-events/src/main/java/fr/maif/eventsourcing/Unit.java rename to thoth-commons-events/src/main/java/fr/maif/eventsourcing/Unit.java diff --git a/thoth-core-pekko/build.gradle b/thoth-core-pekko/build.gradle index 45f364e7..f978de57 100644 --- a/thoth-core-pekko/build.gradle +++ b/thoth-core-pekko/build.gradle @@ -1,6 +1,6 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-kafka-consumer-pekko') implementation("io.vavr:vavr:$vavrVersion") diff --git a/thoth-core-reactor/build.gradle b/thoth-core-reactor/build.gradle index 4eeb5972..001afe79 100644 --- a/thoth-core-reactor/build.gradle +++ b/thoth-core-reactor/build.gradle @@ -1,6 +1,6 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-kafka-consumer-reactor') implementation("io.projectreactor:reactor-core:$reactorVersion") diff --git a/thoth-core/build.gradle b/thoth-core/build.gradle index f50ef9bc..50fe8a5c 100644 --- a/thoth-core/build.gradle +++ b/thoth-core/build.gradle @@ -1,6 +1,6 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-kafka-consumer-pekko') implementation("io.vavr:vavr:$vavrVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") diff --git a/demo/build.gradle b/thoth-demo/build.gradle similarity index 100% rename from demo/build.gradle rename to thoth-demo/build.gradle diff --git a/demo/demo-in-memory-vanilla/build.gradle b/thoth-demo/demo-in-memory-vanilla/build.gradle similarity index 93% rename from demo/demo-in-memory-vanilla/build.gradle rename to thoth-demo/demo-in-memory-vanilla/build.gradle index 6a61d218..f3f1fc90 100644 --- a/demo/demo-in-memory-vanilla/build.gradle +++ b/thoth-demo/demo-in-memory-vanilla/build.gradle @@ -15,7 +15,7 @@ compileTestJava { dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation project(':thoth-kafka-consumer-reactor') diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Account.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Account.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Account.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Account.java diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Bank.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Bank.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Bank.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/Bank.java diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommand.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommand.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommand.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommand.java diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommandHandler.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommandHandler.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommandHandler.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankCommandHandler.java diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEvent.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEvent.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEvent.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEvent.java diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEventHandler.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEventHandler.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEventHandler.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/BankEventHandler.java diff --git a/demo/demo-in-memory-vanilla/src/main/java/com/example/demo/DemoApplication.java b/thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/DemoApplication.java similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/java/com/example/demo/DemoApplication.java rename to thoth-demo/demo-in-memory-vanilla/src/main/java/com/example/demo/DemoApplication.java diff --git a/demo/demo-in-memory-vanilla/src/main/resources/application.properties b/thoth-demo/demo-in-memory-vanilla/src/main/resources/application.properties similarity index 100% rename from demo/demo-in-memory-vanilla/src/main/resources/application.properties rename to thoth-demo/demo-in-memory-vanilla/src/main/resources/application.properties diff --git a/demo/demo-in-memory/build.gradle b/thoth-demo/demo-in-memory/build.gradle similarity index 93% rename from demo/demo-in-memory/build.gradle rename to thoth-demo/demo-in-memory/build.gradle index 6a61d218..f3f1fc90 100644 --- a/demo/demo-in-memory/build.gradle +++ b/thoth-demo/demo-in-memory/build.gradle @@ -15,7 +15,7 @@ compileTestJava { dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation project(':thoth-kafka-consumer-reactor') diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/Account.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/Account.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/Account.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/Account.java diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/Bank.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/Bank.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/Bank.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/Bank.java diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/BankCommand.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankCommand.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/BankCommand.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankCommand.java diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/BankCommandHandler.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankCommandHandler.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/BankCommandHandler.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankCommandHandler.java diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/BankEvent.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankEvent.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/BankEvent.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankEvent.java diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/BankEventHandler.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankEventHandler.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/BankEventHandler.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/BankEventHandler.java diff --git a/demo/demo-in-memory/src/main/java/com/example/demo/DemoApplication.java b/thoth-demo/demo-in-memory/src/main/java/com/example/demo/DemoApplication.java similarity index 100% rename from demo/demo-in-memory/src/main/java/com/example/demo/DemoApplication.java rename to thoth-demo/demo-in-memory/src/main/java/com/example/demo/DemoApplication.java diff --git a/demo/demo-in-memory/src/main/resources/application.properties b/thoth-demo/demo-in-memory/src/main/resources/application.properties similarity index 100% rename from demo/demo-in-memory/src/main/resources/application.properties rename to thoth-demo/demo-in-memory/src/main/resources/application.properties diff --git a/demo/demo-postgres-kafka-reactive/build.gradle b/thoth-demo/demo-postgres-kafka-reactive/build.gradle similarity index 96% rename from demo/demo-postgres-kafka-reactive/build.gradle rename to thoth-demo/demo-postgres-kafka-reactive/build.gradle index 82d90dd3..e537cda9 100644 --- a/demo/demo-postgres-kafka-reactive/build.gradle +++ b/thoth-demo/demo-postgres-kafka-reactive/build.gradle @@ -19,7 +19,7 @@ tasks.withType(Javadoc) { dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation project(':thoth-jooq-reactor') diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Account.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Account.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Account.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Account.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Bank.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Bank.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Bank.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/Bank.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommand.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommand.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommand.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommand.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommandHandler.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommandHandler.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommandHandler.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankCommandHandler.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEvent.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEvent.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEvent.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEvent.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventFormat.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventFormat.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventFormat.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventFormat.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventHandler.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventHandler.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventHandler.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/BankEventHandler.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/DemoApplication.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/DemoApplication.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/DemoApplication.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/DemoApplication.java diff --git a/demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/WithdrawByMonthProjection.java b/thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/WithdrawByMonthProjection.java similarity index 100% rename from demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/WithdrawByMonthProjection.java rename to thoth-demo/demo-postgres-kafka-reactive/src/main/java/com/example/demo/WithdrawByMonthProjection.java diff --git a/demo/demo-postgres-kafka/build.gradle b/thoth-demo/demo-postgres-kafka/build.gradle similarity index 95% rename from demo/demo-postgres-kafka/build.gradle rename to thoth-demo/demo-postgres-kafka/build.gradle index 7d693576..987ae1ec 100644 --- a/demo/demo-postgres-kafka/build.gradle +++ b/thoth-demo/demo-postgres-kafka/build.gradle @@ -14,7 +14,7 @@ compileTestJava { dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation project(':thoth-jooq') diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/Account.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/Account.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/Account.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/Account.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/Bank.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/Bank.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/Bank.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/Bank.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankAggregateStore.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankAggregateStore.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/BankAggregateStore.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankAggregateStore.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommand.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommand.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommand.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommand.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommandHandler.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommandHandler.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommandHandler.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankCommandHandler.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEvent.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEvent.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEvent.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEvent.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventFormat.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventHandler.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventHandler.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventHandler.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/BankEventHandler.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/DemoApplication.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/DemoApplication.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/DemoApplication.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/DemoApplication.java diff --git a/demo/demo-postgres-kafka/src/main/java/com/example/demo/MeanWithdrawProjection.java b/thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/MeanWithdrawProjection.java similarity index 100% rename from demo/demo-postgres-kafka/src/main/java/com/example/demo/MeanWithdrawProjection.java rename to thoth-demo/demo-postgres-kafka/src/main/java/com/example/demo/MeanWithdrawProjection.java diff --git a/demo/demo-postgres-kafka/src/main/resources/application.properties b/thoth-demo/demo-postgres-kafka/src/main/resources/application.properties similarity index 100% rename from demo/demo-postgres-kafka/src/main/resources/application.properties rename to thoth-demo/demo-postgres-kafka/src/main/resources/application.properties diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index 76d04d69..356fa675 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -1,7 +1,7 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-pekko') implementation("io.vavr:vavr:$vavrVersion") diff --git a/thoth-jooq-reactor/build.gradle b/thoth-jooq-reactor/build.gradle index 50e143da..05de5128 100644 --- a/thoth-jooq-reactor/build.gradle +++ b/thoth-jooq-reactor/build.gradle @@ -1,7 +1,7 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation("io.vavr:vavr:$vavrVersion") diff --git a/thoth-jooq/build.gradle b/thoth-jooq/build.gradle index b8a5313c..d1d9e174 100644 --- a/thoth-jooq/build.gradle +++ b/thoth-jooq/build.gradle @@ -1,6 +1,6 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation("io.vavr:vavr:$vavrVersion") diff --git a/sample/.gitignore b/thoth-sample/.gitignore similarity index 100% rename from sample/.gitignore rename to thoth-sample/.gitignore diff --git a/sample/Thoth.postman_collection.json b/thoth-sample/Thoth.postman_collection.json similarity index 100% rename from sample/Thoth.postman_collection.json rename to thoth-sample/Thoth.postman_collection.json diff --git a/sample/build.gradle b/thoth-sample/build.gradle similarity index 97% rename from sample/build.gradle rename to thoth-sample/build.gradle index bc0d4b3b..31e377cd 100644 --- a/sample/build.gradle +++ b/thoth-sample/build.gradle @@ -8,7 +8,7 @@ ext { dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation project(':thoth-core-reactor') implementation project(':thoth-jooq') diff --git a/sample/docker-compose-kafka.yml b/thoth-sample/docker-compose-kafka.yml similarity index 100% rename from sample/docker-compose-kafka.yml rename to thoth-sample/docker-compose-kafka.yml diff --git a/sample/docker-compose-postgres.yml b/thoth-sample/docker-compose-postgres.yml similarity index 100% rename from sample/docker-compose-postgres.yml rename to thoth-sample/docker-compose-postgres.yml diff --git a/sample/init.sql b/thoth-sample/init.sql similarity index 100% rename from sample/init.sql rename to thoth-sample/init.sql diff --git a/sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/ThothSampleApplication.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/api/AccountDTO.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/api/AccountDTO.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/api/AccountDTO.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/api/AccountDTO.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/api/BalanceDTO.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/api/BalanceDTO.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/api/BalanceDTO.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/api/BalanceDTO.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/api/BankController.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/api/BankController.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/api/BankController.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/api/BankController.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/api/TransferDTO.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/api/TransferDTO.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/api/TransferDTO.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/api/TransferDTO.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/api/TransferResultDTO.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/api/TransferResultDTO.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/api/TransferResultDTO.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/api/TransferResultDTO.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/commands/BankCommand.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/commands/BankCommand.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/commands/BankCommand.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/commands/BankCommand.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/commands/BankCommandHandler.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/commands/BankCommandHandler.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/commands/BankCommandHandler.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/commands/BankCommandHandler.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/configuration/BankConfiguration.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/configuration/BankConfiguration.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/configuration/BankConfiguration.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/configuration/BankConfiguration.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/events/BankEvent.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/events/BankEvent.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/events/BankEvent.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/events/BankEvent.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/events/BankEventFormat.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/events/BankEventHandler.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/events/BankEventHandler.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/events/BankEventHandler.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/events/BankEventHandler.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/projections/eventualyconsistent/MeanWithdrawProjection.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/projections/eventualyconsistent/MeanWithdrawProjection.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/projections/eventualyconsistent/MeanWithdrawProjection.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/projections/eventualyconsistent/MeanWithdrawProjection.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/projections/transactional/GlobalBalanceProjection.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/projections/transactional/GlobalBalanceProjection.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/projections/transactional/GlobalBalanceProjection.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/projections/transactional/GlobalBalanceProjection.java diff --git a/sample/src/main/java/fr/maif/thoth/sample/state/Account.java b/thoth-sample/src/main/java/fr/maif/thoth/sample/state/Account.java similarity index 100% rename from sample/src/main/java/fr/maif/thoth/sample/state/Account.java rename to thoth-sample/src/main/java/fr/maif/thoth/sample/state/Account.java diff --git a/sample/src/main/resources/application.properties b/thoth-sample/src/main/resources/application.properties similarity index 100% rename from sample/src/main/resources/application.properties rename to thoth-sample/src/main/resources/application.properties diff --git a/sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java b/thoth-sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java similarity index 100% rename from sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java rename to thoth-sample/src/test/java/fr/maif/thoth/sample/ThothSampleApplicationTests.java diff --git a/thoth-tck/build.gradle b/thoth-tck/build.gradle index 1a4933d5..2b2a4cbc 100644 --- a/thoth-tck/build.gradle +++ b/thoth-tck/build.gradle @@ -1,6 +1,6 @@ dependencies { - implementation project(':commons-events') + implementation project(':thoth-commons-events') implementation project(':thoth-core') implementation('org.assertj:assertj-core:3.27.7') implementation('org.testng:testng:7.7.0') From ffa74682ae775c3043a27315a41fc9534722b63b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 19:00:10 +0200 Subject: [PATCH 05/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- thoth-jooq-pekko/build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index 356fa675..c11671b1 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -13,9 +13,12 @@ dependencies { implementation "org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion" implementation "org.apache.pekko:pekko-slf4j_$scalaVersion:$pekkoVersion" implementation "org.apache.pekko:pekko-connectors-kafka_$scalaVersion:$pekkoKafkaVersion" - implementation("io.vertx:vertx-pg-client:$vertxSqlVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") + + testimplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" + testimplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" + testimplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation('org.assertj:assertj-core:3.27.7') From 9989fe7eb244198f6e970cf5bbe08894b1ba3dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 19:06:43 +0200 Subject: [PATCH 06/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- build.gradle | 2 +- thoth-jooq-pekko/build.gradle | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 65c284ff..71e4540a 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ subprojects { kafkaVersion = "3.0.1" reactorKafkaVersion = "1.3.23" reactorVersion = "3.8.4" - vertxSqlVersion = "5.0.0" + vertxSqlVersion = "5.0.10" testContainerVersion = "1.21.1" jupiterVersion = "5.13.1" } diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index c11671b1..7896c6fa 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -18,7 +18,6 @@ dependencies { testimplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" testimplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" - testimplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation('org.assertj:assertj-core:3.27.7') From 56d36ba7e5246ebf4df1dcb078102d09f4294b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 19:10:29 +0200 Subject: [PATCH 07/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- thoth-jooq-pekko/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index 7896c6fa..dd16f621 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -16,8 +16,8 @@ dependencies { implementation("io.vertx:vertx-pg-client:$vertxSqlVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") - testimplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" - testimplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" + testImplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" + testImplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation('org.assertj:assertj-core:3.27.7') From 27d56cab75d23619e9936d7efec3e4beb097e9ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 19:53:44 +0200 Subject: [PATCH 08/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- .../fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java index 16a7dc5e..62df2982 100644 --- a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java +++ b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java @@ -71,7 +71,7 @@ void consumer() throws Exception { @Test void contexteAkkastreamApi() throws Exception { - String topic = createTopic(); + String topic = createTopic("topic-"+counter.incrementAndGet(), 1, 1); String groupId = "test-group-id-3"; AtomicReference names = new AtomicReference<>(""); @@ -90,6 +90,7 @@ void contexteAkkastreamApi() throws Exception { .grouped(3) .map(messages -> { String collectedMessages = messages.stream().map(m -> m.record().value()).collect(Collectors.joining(" ")); + System.out.println(collectedMessages); names.set(collectedMessages); return Done.done(); }) From 65a9e1325c8ed63cf6bab340e3eaa129b9c24705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 20:24:22 +0200 Subject: [PATCH 09/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- .../java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java index 62df2982..77d04b53 100644 --- a/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java +++ b/thoth-kafka-consumer-pekko/src/test/java/fr/maif/kafka/consumer/ResilientKafkaConsumerTest.java @@ -113,7 +113,7 @@ void contexteAkkastreamApi() throws Exception { @Test void crash() throws Exception { - String topic = createTopic(); + String topic = createTopic("topic-"+counter.incrementAndGet(), 1, 1); String groupId = "test-group-id-3"; AtomicReference names = new AtomicReference<>(""); From 46b6062410a57f204a0da6f5593972397580a180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 20:39:36 +0200 Subject: [PATCH 10/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- .github/workflows/test.yml | 2 +- build.gradle | 3 ++- thoth-core-pekko/build.gradle | 2 +- thoth-core-reactor/build.gradle | 2 +- thoth-core/build.gradle | 2 +- thoth-jooq-pekko/build.gradle | 2 +- thoth-jooq-reactor/build.gradle | 2 +- thoth-jooq/build.gradle | 2 +- thoth-kafka-consumer-pekko/build.gradle | 2 +- thoth-kafka-consumer-reactor/build.gradle | 2 +- thoth-sample/build.gradle | 2 +- thoth-tck/build.gradle | 2 +- 12 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6b65ae58..988b140e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: - name: Stop docker run: docker compose -f docker-compose.test.yml down - name: Run sample application test - run: ./gradlew :sample:test + run: ./gradlew :thoth-sample:test - name: Publish Unit Test Results uses: EnricoMi/publish-unit-test-result-action@v1 if: always() diff --git a/build.gradle b/build.gradle index 71e4540a..bb167b81 100644 --- a/build.gradle +++ b/build.gradle @@ -38,12 +38,13 @@ subprojects { jooqVersion = "3.21.1" jooqAsyncVersion = "3.0.0-RC1" functionalJsonVersion = "2.0.0-RC1" - kafkaVersion = "3.0.1" + kafkaVersion = "4.2.0" reactorKafkaVersion = "1.3.23" reactorVersion = "3.8.4" vertxSqlVersion = "5.0.10" testContainerVersion = "1.21.1" jupiterVersion = "5.13.1" + assertJVersion = "3.27.7" } test { diff --git a/thoth-core-pekko/build.gradle b/thoth-core-pekko/build.gradle index f978de57..2d5be0b7 100644 --- a/thoth-core-pekko/build.gradle +++ b/thoth-core-pekko/build.gradle @@ -20,7 +20,7 @@ dependencies { testImplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") implementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" - testImplementation('org.assertj:assertj-core:3.27.7') + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('com.h2database:h2:2.2.220') testImplementation("org.mockito:mockito-core:2.22.0") testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") diff --git a/thoth-core-reactor/build.gradle b/thoth-core-reactor/build.gradle index 001afe79..def573ad 100644 --- a/thoth-core-reactor/build.gradle +++ b/thoth-core-reactor/build.gradle @@ -11,7 +11,7 @@ dependencies { implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") implementation("fr.maif:functional-json:$functionalJsonVersion") - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation("com.h2database:h2:1.4.197") testImplementation("org.mockito:mockito-core:2.22.0") testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") diff --git a/thoth-core/build.gradle b/thoth-core/build.gradle index 50fe8a5c..dfa8ddb6 100644 --- a/thoth-core/build.gradle +++ b/thoth-core/build.gradle @@ -14,7 +14,7 @@ dependencies { testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation("com.h2database:h2:1.4.197") testImplementation("org.mockito:mockito-core:2.22.0") testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index dd16f621..e828c8d4 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -20,7 +20,7 @@ dependencies { testImplementation "org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion" testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") - testImplementation('org.assertj:assertj-core:3.27.7') + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('org.postgresql:postgresql:42.7.7') testImplementation("org.mockito:mockito-all:1.10.19") testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") diff --git a/thoth-jooq-reactor/build.gradle b/thoth-jooq-reactor/build.gradle index 05de5128..fdde5401 100644 --- a/thoth-jooq-reactor/build.gradle +++ b/thoth-jooq-reactor/build.gradle @@ -18,7 +18,7 @@ dependencies { testImplementation("fr.maif:jooq-async-jdbc:$jooqAsyncVersion") testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('org.postgresql:postgresql:42.7.7') testImplementation("org.mockito:mockito-all:1.10.19") testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") diff --git a/thoth-jooq/build.gradle b/thoth-jooq/build.gradle index d1d9e174..f1fdc0b1 100644 --- a/thoth-jooq/build.gradle +++ b/thoth-jooq/build.gradle @@ -16,7 +16,7 @@ dependencies { testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation("com.zaxxer:HikariCP:4.0.3") - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('com.h2database:h2:2.2.220') testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") testImplementation("org.junit.platform:junit-platform-commons:1.4.2") diff --git a/thoth-kafka-consumer-pekko/build.gradle b/thoth-kafka-consumer-pekko/build.gradle index c775b1db..6e7b53b3 100644 --- a/thoth-kafka-consumer-pekko/build.gradle +++ b/thoth-kafka-consumer-pekko/build.gradle @@ -10,7 +10,7 @@ dependencies { testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" - testImplementation("org.assertj:assertj-core:3.10.0") + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") testImplementation("org.junit.platform:junit-platform-commons:1.4.2") testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") diff --git a/thoth-kafka-consumer-reactor/build.gradle b/thoth-kafka-consumer-reactor/build.gradle index 19f8f0b5..b639b7d8 100644 --- a/thoth-kafka-consumer-reactor/build.gradle +++ b/thoth-kafka-consumer-reactor/build.gradle @@ -8,7 +8,7 @@ dependencies { testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion") testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" - testImplementation('org.assertj:assertj-core:3.27.7') + testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") testImplementation("org.junit.platform:junit-platform-commons:1.4.2") testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") diff --git a/thoth-sample/build.gradle b/thoth-sample/build.gradle index 31e377cd..b00b0d40 100644 --- a/thoth-sample/build.gradle +++ b/thoth-sample/build.gradle @@ -33,7 +33,7 @@ dependencies { testImplementation("org.springframework.boot:spring-boot-starter-test:$springBootVersion") testImplementation("org.springframework.boot:spring-boot-starter-restclient-test:$springBootVersion") testImplementation("org.springframework.boot:spring-boot-resttestclient:$springBootVersion") - testImplementation('org.assertj:assertj-core:3.27.7') + testImplementation("org.assertj:assertj-core:$assertJVersion") } diff --git a/thoth-tck/build.gradle b/thoth-tck/build.gradle index 2b2a4cbc..76ba3e55 100644 --- a/thoth-tck/build.gradle +++ b/thoth-tck/build.gradle @@ -2,7 +2,7 @@ dependencies { implementation project(':thoth-commons-events') implementation project(':thoth-core') - implementation('org.assertj:assertj-core:3.27.7') + implementation("org.assertj:assertj-core:$assertJVersion") implementation('org.testng:testng:7.7.0') implementation("io.vavr:vavr:$vavrVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") From 09bda0c3765e1b14c44db3252d8957c1fcfd5090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Tue, 31 Mar 2026 21:04:29 +0200 Subject: [PATCH 11/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- build.gradle | 6 ++++-- thoth-core-pekko/build.gradle | 13 +++++-------- thoth-core-reactor/build.gradle | 14 ++++++-------- thoth-core/build.gradle | 13 +++++++------ thoth-jooq-pekko/build.gradle | 9 +++++---- thoth-jooq-reactor/build.gradle | 9 +++++---- thoth-jooq/build.gradle | 10 ++++------ thoth-kafka-consumer-pekko/build.gradle | 8 +++----- thoth-kafka-consumer-reactor/build.gradle | 8 +++----- thoth-tck/build.gradle | 2 +- 10 files changed, 43 insertions(+), 49 deletions(-) diff --git a/build.gradle b/build.gradle index bb167b81..dba9cec7 100644 --- a/build.gradle +++ b/build.gradle @@ -43,8 +43,10 @@ subprojects { reactorVersion = "3.8.4" vertxSqlVersion = "5.0.10" testContainerVersion = "1.21.1" - jupiterVersion = "5.13.1" - assertJVersion = "3.27.7" + jupiterVersion = "6.0.3" + assertJVersion = "3.27.7" + mockitoCoreVersion = "5.18.0" + mockitoAllVersion = "1.10.19" } test { diff --git a/thoth-core-pekko/build.gradle b/thoth-core-pekko/build.gradle index 2d5be0b7..e6cf2d84 100644 --- a/thoth-core-pekko/build.gradle +++ b/thoth-core-pekko/build.gradle @@ -19,16 +19,13 @@ dependencies { testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") testImplementation "org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion" testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") - implementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" + testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('com.h2database:h2:2.2.220') - testImplementation("org.mockito:mockito-core:2.22.0") - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") - testImplementation("net.aichler:jupiter-interface:0.9.1") - testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } test { diff --git a/thoth-core-reactor/build.gradle b/thoth-core-reactor/build.gradle index def573ad..625832bc 100644 --- a/thoth-core-reactor/build.gradle +++ b/thoth-core-reactor/build.gradle @@ -8,21 +8,19 @@ dependencies { implementation("io.vavr:vavr:$vavrVersion") implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") implementation('org.slf4j:slf4j-api:2.0.7') - implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") + implementation("com.fasterxml.uuid:java-uuid-generator:5.2.0") implementation("fr.maif:functional-json:$functionalJsonVersion") testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation("com.h2database:h2:1.4.197") - testImplementation("org.mockito:mockito-core:2.22.0") - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") - testImplementation("net.aichler:jupiter-interface:0.9.1") + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") testImplementation("org.testcontainers:kafka:$testContainerVersion") testImplementation "org.testcontainers:junit-jupiter:$testContainerVersion" - testImplementation "ch.qos.logback:logback-classic:1.4.8" + testImplementation 'ch.qos.logback:logback-classic:1.5.13' } test { diff --git a/thoth-core/build.gradle b/thoth-core/build.gradle index dfa8ddb6..29fae390 100644 --- a/thoth-core/build.gradle +++ b/thoth-core/build.gradle @@ -15,12 +15,13 @@ dependencies { testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" testImplementation("org.assertj:assertj-core:$assertJVersion") - testImplementation("com.h2database:h2:1.4.197") - testImplementation("org.mockito:mockito-core:2.22.0") - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") + testImplementation('com.h2database:h2:2.2.220') + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.platform:junit-platform-launcher") + testImplementation("org.junit.platform:junit-platform-commons") + testImplementation("org.junit.jupiter:junit-jupiter-engine") + testImplementation("org.junit.vintage:junit-vintage-engine") testImplementation("net.aichler:jupiter-interface:0.9.1") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") testImplementation("org.testcontainers:kafka:$testContainerVersion") diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index e828c8d4..e8fb63b3 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -22,13 +22,14 @@ dependencies { testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('org.postgresql:postgresql:42.7.7') - testImplementation("org.mockito:mockito-all:1.10.19") - testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") - testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.4.2' + testImplementation("org.mockito:mockito-all:$mockitoAllVersion") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation "org.testcontainers:junit-jupiter:$testContainerVersion" testImplementation "org.testcontainers:testcontainers:$testContainerVersion" testImplementation "org.testcontainers:postgresql:$testContainerVersion" - testImplementation 'org.mockito:mockito-core:5.18.0' + testImplementation "org.mockito:mockito-core:$mockitoCoreVersion" } test { diff --git a/thoth-jooq-reactor/build.gradle b/thoth-jooq-reactor/build.gradle index fdde5401..8f74bff0 100644 --- a/thoth-jooq-reactor/build.gradle +++ b/thoth-jooq-reactor/build.gradle @@ -20,13 +20,14 @@ dependencies { testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('org.postgresql:postgresql:42.7.7') - testImplementation("org.mockito:mockito-all:1.10.19") - testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") - testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.4.2' + testImplementation("org.mockito:mockito-all:$mockitoAllVersion") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation "org.testcontainers:junit-jupiter:$testContainerVersion" testImplementation "org.testcontainers:testcontainers:$testContainerVersion" testImplementation "org.testcontainers:postgresql:$testContainerVersion" - testImplementation 'org.mockito:mockito-core:5.18.0' + testImplementation "org.mockito:mockito-core:$mockitoCoreVersion" } test { diff --git a/thoth-jooq/build.gradle b/thoth-jooq/build.gradle index f1fdc0b1..d5133d8c 100644 --- a/thoth-jooq/build.gradle +++ b/thoth-jooq/build.gradle @@ -18,12 +18,10 @@ dependencies { testImplementation("com.zaxxer:HikariCP:4.0.3") testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('com.h2database:h2:2.2.220') - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") - testImplementation("net.aichler:jupiter-interface:0.9.1") - testImplementation("org.mockito:mockito-core:2.22.0") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") testImplementation('org.testng:testng:7.7.0') testImplementation("org.testcontainers:postgresql:$testContainerVersion") testImplementation("org.testcontainers:kafka:$testContainerVersion") diff --git a/thoth-kafka-consumer-pekko/build.gradle b/thoth-kafka-consumer-pekko/build.gradle index 6e7b53b3..7761ff55 100644 --- a/thoth-kafka-consumer-pekko/build.gradle +++ b/thoth-kafka-consumer-pekko/build.gradle @@ -11,11 +11,9 @@ dependencies { testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" testImplementation("org.assertj:assertj-core:$assertJVersion") - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") - testImplementation("net.aichler:jupiter-interface:0.9.1") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") testImplementation("org.testcontainers:kafka:$testContainerVersion") diff --git a/thoth-kafka-consumer-reactor/build.gradle b/thoth-kafka-consumer-reactor/build.gradle index b639b7d8..f254e6a5 100644 --- a/thoth-kafka-consumer-reactor/build.gradle +++ b/thoth-kafka-consumer-reactor/build.gradle @@ -9,11 +9,9 @@ dependencies { testImplementation("org.apache.pekko:pekko-stream-testkit_$scalaVersion:$pekkoVersion") testImplementation "org.apache.pekko:pekko-connectors-kafka-testkit_$scalaVersion:$pekkoKafkaVersion" testImplementation("org.assertj:assertj-core:$assertJVersion") - testImplementation("org.junit.platform:junit-platform-launcher:1.4.2") - testImplementation("org.junit.platform:junit-platform-commons:1.4.2") - testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2") - testImplementation("org.junit.vintage:junit-vintage-engine:5.4.2") - testImplementation("net.aichler:jupiter-interface:0.9.1") + testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") testImplementation("org.testcontainers:kafka:$testContainerVersion") testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion") diff --git a/thoth-tck/build.gradle b/thoth-tck/build.gradle index 76ba3e55..603b4eff 100644 --- a/thoth-tck/build.gradle +++ b/thoth-tck/build.gradle @@ -11,7 +11,7 @@ dependencies { testImplementation project(':thoth-core-pekko') testImplementation("org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion") - testImplementation("org.mockito:mockito-core:3.6.28") + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") } test { From 4419763bdb4a8fd2855585a8a7851ef8cf92be39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 1 Apr 2026 09:17:17 +0200 Subject: [PATCH 12/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- .../eventsourcing/KafkaContainerTest.java | 94 +++++++++++++++++++ .../impl/KafkaEventPublisherTest.java | 42 ++------- .../maif/projections/KafkaContainerTest.java | 11 +++ .../fr/maif/reactor/KafkaContainerTest.java | 6 +- .../KafkaEventPublisherTest.java | 6 -- thoth-core/build.gradle | 7 +- 6 files changed, 117 insertions(+), 49 deletions(-) create mode 100644 thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java diff --git a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java new file mode 100644 index 00000000..37e718b8 --- /dev/null +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java @@ -0,0 +1,94 @@ +package fr.maif.eventsourcing; + +import org.apache.kafka.clients.admin.Admin; +import org.apache.kafka.clients.admin.AdminClientConfig; +import org.apache.kafka.clients.admin.CreateTopicsResult; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringSerializer; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; + + +@Testcontainers +public interface KafkaContainerTest { + + AtomicInteger counter = new AtomicInteger(0); + + @Container + KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) + .withStartupAttempts(2); + + static void startContainer() { + kafkaContainer.start(); + } + + default String bootstrapServers() { + return kafkaContainer.getBootstrapServers(); + } + + default Admin adminClient() { + return Admin.create(Map.of( + AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + )); + } + + default String createTopic() { + return createTopic("topic-"+counter.incrementAndGet(), 3, 1); + } + + default String createTopic(String name, int partitions, int replication) { + try { + CreateTopicsResult createTopicsResult = adminClient().createTopics(java.util.List.of(new NewTopic(name, partitions, (short) replication))); + createTopicsResult.all().get(10, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException("Unable to create topic with name " + name, e); + } + return name; + } + + default void deleteTopics() { + try { + Set topics = adminClient().listTopics().names().get(5, TimeUnit.SECONDS); + if (!topics.isEmpty()) { + System.out.println("Deleting " + String.join(",", topics)); + adminClient().deleteTopics(topics).all().get(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + default KafkaProducer producer() { + return new KafkaProducer<>(Map.of( + ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() + ), new StringSerializer(), new StringSerializer()); + } + + default void produceString(String topic, String event) { + CompletableFuture completableFuture = new CompletableFuture<>(); + producer().send(new ProducerRecord<>( + topic, event + ), (recordMetadata, e) -> { + if (e != null) { + completableFuture.completeExceptionally(e); + } else { + completableFuture.complete(recordMetadata.topic()); + } + }); + completableFuture.join(); + } + +} diff --git a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java index 10ea40f7..75d226e4 100644 --- a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java @@ -1,5 +1,6 @@ package fr.maif.eventsourcing.impl; +import fr.maif.projections.KafkaContainerTest; import org.apache.pekko.actor.ActorSystem; import org.apache.pekko.kafka.ConsumerSettings; import org.apache.pekko.kafka.ProducerSettings; @@ -69,38 +70,11 @@ import static org.mockito.Mockito.when; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class KafkaEventPublisherTest extends BaseKafkaTest { +public class KafkaEventPublisherTest implements KafkaContainerTest { private static final ActorSystem sys = ActorSystem.create("KafkaEventPublisherTest"); private static final Materializer mat = Materializer.createMaterializer(sys); - KafkaEventPublisherTest() { - super(sys, mat, "localhost:29097"); - } - - @BeforeEach - void cleanUpInit() throws ExecutionException, InterruptedException, TimeoutException { - setUpAdminClient(); - try { - Set topics = adminClient().listTopics().names().get(5, TimeUnit.SECONDS); - if (!topics.isEmpty()) { - println("Deleting "+ String.join(",", topics)); - adminClient().deleteTopics(topics).all().get(); - } - } catch (Exception e) {} - } - - @AfterEach - void cleanUpAfter() { - try { - - Set topics = adminClient().listTopics().names().get(); - println("Deleting "+ String.join(",", topics)); - adminClient().deleteTopics(topics).all().get(); - } catch (Exception e) {} - cleanUpAdminClient(); - } - @AfterAll static void afterClass() { TestKit.shutdownActorSystem(sys); @@ -110,7 +84,7 @@ static void afterClass() { @SuppressWarnings("unchecked") public void eventConsumption() throws IOException, InterruptedException { - String topic = createTopic(11, 5, 1); + String topic = createTopic("test"+11, 5, 1); KafkaEventPublisher publisher = createPublisher(topic); EventStore eventStore = mock(EventStore.class); @@ -128,7 +102,7 @@ public void eventConsumption() throws IOException, InterruptedException { Thread.sleep(200); - CompletionStage>> results = Consumer.plainSource(consumerDefaults().withGroupId("test1"), Subscriptions.topics(topic)) + CompletionStage>> results = Consumer.plainSource(consumerDefaults(sys).withGroupId("test1"), Subscriptions.topics(topic)) .map(ConsumerRecord::value) .map(KafkaEventPublisherTest::deserialize) .take(3) @@ -168,7 +142,7 @@ private Publisher txStream(T... values) { @Test @SuppressWarnings("unchecked") public void eventConsumptionWithEventFromDb() throws IOException { - String topic = createTopic(12, 5, 1); + String topic = createTopic("test"+12, 5, 1); KafkaEventPublisher publisher = createPublisher(topic); EventStore eventStore = mock(EventStore.class); when(eventStore.openTransaction()).thenReturn(CompletionStages.successful(Tuple.empty())); @@ -185,7 +159,7 @@ public void eventConsumptionWithEventFromDb() throws IOException { publisher.start(eventStore, NO_STRATEGY); - CompletionStage> results = Consumer.plainSource(consumerDefaults().withGroupId("test2"), Subscriptions.topics(topic)) + CompletionStage> results = Consumer.plainSource(consumerDefaults(sys).withGroupId("test2"), Subscriptions.topics(topic)) .map(ConsumerRecord::value) .take(6) .idleTimeout(Duration.of(5, ChronoUnit.SECONDS)) @@ -215,7 +189,7 @@ public void eventConsumptionWithEventFromDb() throws IOException { @SuppressWarnings("unchecked") public void testRestart() throws IOException { AtomicBoolean failed = new AtomicBoolean(false); - String topic = createTopic(13, 5, 1); + String topic = createTopic("test"+13, 5, 1); KafkaEventPublisher publisher = createPublisher(topic); EventStore eventStore = mock(EventStore.class); when(eventStore.openTransaction()).thenReturn(CompletionStages.successful(Tuple.empty())); @@ -238,7 +212,7 @@ public void testRestart() throws IOException { publisher.start(eventStore, SKIP); - CompletionStage>> results = Consumer.plainSource(consumerDefaults().withGroupId("test3"), Subscriptions.topics(topic)) + CompletionStage>> results = Consumer.plainSource(consumerDefaults(sys).withGroupId("test3"), Subscriptions.topics(topic)) .map(ConsumerRecord::value) .map(KafkaEventPublisherTest::deserialize) .take(6) diff --git a/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java b/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java index 1854254a..f449c48b 100644 --- a/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java @@ -7,7 +7,10 @@ import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ConsumerSettings; import org.testcontainers.containers.KafkaContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -22,6 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger; import static io.vavr.API.println; +import static org.apache.kafka.clients.consumer.ConsumerConfig.AUTO_OFFSET_RESET_CONFIG; @Testcontainers public interface KafkaContainerTest { @@ -72,6 +76,13 @@ default void deleteTopics() { } } + default ConsumerSettings consumerDefaults(ActorSystem actorSystem) { + return ConsumerSettings.create(actorSystem, new StringDeserializer(), new StringDeserializer()) + .withBootstrapServers(kafkaContainer.getBootstrapServers()) + .withGroupId("test-group-id") + .withProperty(AUTO_OFFSET_RESET_CONFIG, "earliest"); + } + default KafkaProducer producer() { return new KafkaProducer<>(Map.of( ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() diff --git a/thoth-core-reactor/src/test/java/fr/maif/reactor/KafkaContainerTest.java b/thoth-core-reactor/src/test/java/fr/maif/reactor/KafkaContainerTest.java index b8b34f37..28acc38a 100644 --- a/thoth-core-reactor/src/test/java/fr/maif/reactor/KafkaContainerTest.java +++ b/thoth-core-reactor/src/test/java/fr/maif/reactor/KafkaContainerTest.java @@ -10,6 +10,7 @@ import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.utility.DockerImageName; import reactor.core.publisher.Mono; @@ -32,13 +33,10 @@ public interface KafkaContainerTest { AtomicInteger counter = new AtomicInteger(0); + @Container KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) .withStartupAttempts(2); - static void startContainer() { - kafkaContainer.start(); - } - default String bootstrapServers() { return kafkaContainer.getBootstrapServers(); } diff --git a/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java b/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java index f91103ad..30db42ea 100644 --- a/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java +++ b/thoth-core-reactor/src/test/java/fr/maif/reactor/eventsourcing/KafkaEventPublisherTest.java @@ -55,12 +55,6 @@ @Testcontainers public class KafkaEventPublisherTest implements KafkaContainerTest { - - @BeforeAll - public static void setUp() { - KafkaContainerTest.startContainer(); - } - @BeforeEach @AfterEach void cleanUpInit() { diff --git a/thoth-core/build.gradle b/thoth-core/build.gradle index 29fae390..73cda37c 100644 --- a/thoth-core/build.gradle +++ b/thoth-core/build.gradle @@ -18,11 +18,8 @@ dependencies { testImplementation('com.h2database:h2:2.2.220') testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) - testImplementation("org.junit.platform:junit-platform-launcher") - testImplementation("org.junit.platform:junit-platform-commons") - testImplementation("org.junit.jupiter:junit-jupiter-engine") - testImplementation("org.junit.vintage:junit-vintage-engine") - testImplementation("net.aichler:jupiter-interface:0.9.1") + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") testImplementation("org.scalatest:scalatest_$scalaVersion:3.0.8") testImplementation("org.testcontainers:kafka:$testContainerVersion") } From 8ab90ff2754cf0449916022b42d6c84ce95ec4cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 1 Apr 2026 09:28:34 +0200 Subject: [PATCH 13/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- thoth-core-pekko/build.gradle | 1 + .../{projections => }/KafkaContainerTest.java | 2 +- .../eventsourcing/KafkaContainerTest.java | 94 ------------------- .../impl/KafkaEventPublisherTest.java | 40 +++----- .../EventuallyConsistentProjectionTest.java | 3 +- 5 files changed, 17 insertions(+), 123 deletions(-) rename thoth-core-pekko/src/test/java/fr/maif/{projections => }/KafkaContainerTest.java (99%) delete mode 100644 thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java diff --git a/thoth-core-pekko/build.gradle b/thoth-core-pekko/build.gradle index e6cf2d84..a5b4c992 100644 --- a/thoth-core-pekko/build.gradle +++ b/thoth-core-pekko/build.gradle @@ -13,6 +13,7 @@ dependencies { implementation 'org.scala-lang:scala-library:2.13.8' implementation("com.fasterxml.uuid:java-uuid-generator:3.1.5") + implementation("tools.jackson.core:jackson-databind:$jacksonVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") testImplementation("org.testcontainers:kafka:$testContainerVersion") diff --git a/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java b/thoth-core-pekko/src/test/java/fr/maif/KafkaContainerTest.java similarity index 99% rename from thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java rename to thoth-core-pekko/src/test/java/fr/maif/KafkaContainerTest.java index f449c48b..5c341656 100644 --- a/thoth-core-pekko/src/test/java/fr/maif/projections/KafkaContainerTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/KafkaContainerTest.java @@ -1,4 +1,4 @@ -package fr.maif.projections; +package fr.maif; import org.apache.kafka.clients.admin.Admin; import org.apache.kafka.clients.admin.AdminClientConfig; diff --git a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java deleted file mode 100644 index 37e718b8..00000000 --- a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/KafkaContainerTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package fr.maif.eventsourcing; - -import org.apache.kafka.clients.admin.Admin; -import org.apache.kafka.clients.admin.AdminClientConfig; -import org.apache.kafka.clients.admin.CreateTopicsResult; -import org.apache.kafka.clients.admin.NewTopic; -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.common.serialization.StringSerializer; -import org.testcontainers.containers.KafkaContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.DockerImageName; - -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicInteger; - - -@Testcontainers -public interface KafkaContainerTest { - - AtomicInteger counter = new AtomicInteger(0); - - @Container - KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) - .withStartupAttempts(2); - - static void startContainer() { - kafkaContainer.start(); - } - - default String bootstrapServers() { - return kafkaContainer.getBootstrapServers(); - } - - default Admin adminClient() { - return Admin.create(Map.of( - AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() - )); - } - - default String createTopic() { - return createTopic("topic-"+counter.incrementAndGet(), 3, 1); - } - - default String createTopic(String name, int partitions, int replication) { - try { - CreateTopicsResult createTopicsResult = adminClient().createTopics(java.util.List.of(new NewTopic(name, partitions, (short) replication))); - createTopicsResult.all().get(10, TimeUnit.SECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - throw new RuntimeException("Unable to create topic with name " + name, e); - } - return name; - } - - default void deleteTopics() { - try { - Set topics = adminClient().listTopics().names().get(5, TimeUnit.SECONDS); - if (!topics.isEmpty()) { - System.out.println("Deleting " + String.join(",", topics)); - adminClient().deleteTopics(topics).all().get(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - default KafkaProducer producer() { - return new KafkaProducer<>(Map.of( - ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaContainer.getBootstrapServers() - ), new StringSerializer(), new StringSerializer()); - } - - default void produceString(String topic, String event) { - CompletableFuture completableFuture = new CompletableFuture<>(); - producer().send(new ProducerRecord<>( - topic, event - ), (recordMetadata, e) -> { - if (e != null) { - completableFuture.completeExceptionally(e); - } else { - completableFuture.complete(recordMetadata.topic()); - } - }); - completableFuture.join(); - } - -} diff --git a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java index 75d226e4..604b7896 100644 --- a/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/eventsourcing/impl/KafkaEventPublisherTest.java @@ -1,18 +1,6 @@ package fr.maif.eventsourcing.impl; -import fr.maif.projections.KafkaContainerTest; -import org.apache.pekko.actor.ActorSystem; -import org.apache.pekko.kafka.ConsumerSettings; -import org.apache.pekko.kafka.ProducerSettings; -import org.apache.pekko.kafka.Subscriptions; -import org.apache.pekko.kafka.javadsl.Consumer; -import org.apache.pekko.kafka.testkit.javadsl.BaseKafkaTest; -import org.apache.pekko.stream.Materializer; -import org.apache.pekko.stream.javadsl.AsPublisher; -import org.apache.pekko.stream.javadsl.Sink; -import org.apache.pekko.stream.javadsl.Source; -import org.apache.pekko.testkit.javadsl.TestKit; -import tools.jackson.databind.JsonNode; +import fr.maif.KafkaContainerTest; import fr.maif.akka.eventsourcing.KafkaEventPublisher; import fr.maif.concurrent.CompletionStages; import fr.maif.eventsourcing.Event; @@ -32,27 +20,32 @@ import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.kafka.ConsumerSettings; +import org.apache.pekko.kafka.ProducerSettings; +import org.apache.pekko.kafka.Subscriptions; +import org.apache.pekko.kafka.javadsl.Consumer; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.javadsl.AsPublisher; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import org.apache.pekko.testkit.javadsl.TestKit; import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.mockito.Mockito; import org.reactivestreams.Publisher; +import tools.jackson.databind.JsonNode; import java.io.IOException; import java.time.Duration; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.Objects; -import java.util.Set; import java.util.StringJoiner; import java.util.UUID; import java.util.concurrent.CompletionStage; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; @@ -60,14 +53,7 @@ import static fr.maif.eventsourcing.EventStore.ConcurrentReplayStrategy.SKIP; import static io.vavr.API.println; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.atMost; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class KafkaEventPublisherTest implements KafkaContainerTest { diff --git a/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java b/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java index ef1ff066..5d68a0d8 100644 --- a/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java +++ b/thoth-core-pekko/src/test/java/fr/maif/projections/EventuallyConsistentProjectionTest.java @@ -2,6 +2,7 @@ import fr.maif.Helpers; import fr.maif.Helpers.VikingEvent; +import fr.maif.KafkaContainerTest; import fr.maif.akka.projections.EventuallyConsistentProjection; import fr.maif.akka.projections.EventuallyConsistentProjection.Config; import fr.maif.eventsourcing.EventEnvelope; @@ -38,7 +39,7 @@ class EventuallyConsistentProjectionTest implements KafkaContainerTest { @Test void consumer() throws Exception { - String topic = createTopic(); + String topic = createTopic("topic-"+counter.incrementAndGet(), 1, 1); String groupId = "test-group-id"; AtomicReference names = new AtomicReference<>(""); From bfe5f23216c655b84097b025f46e982ea2fe544c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 1 Apr 2026 09:35:17 +0200 Subject: [PATCH 14/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- thoth-core-reactor/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/thoth-core-reactor/build.gradle b/thoth-core-reactor/build.gradle index 625832bc..d661a6b4 100644 --- a/thoth-core-reactor/build.gradle +++ b/thoth-core-reactor/build.gradle @@ -9,6 +9,7 @@ dependencies { implementation("io.vavr:vavr-jackson:$vavrJacksonVersion") implementation('org.slf4j:slf4j-api:2.0.7') implementation("com.fasterxml.uuid:java-uuid-generator:5.2.0") + implementation("tools.jackson.core:jackson-databind:$jacksonVersion") implementation("fr.maif:functional-json:$functionalJsonVersion") testImplementation("org.assertj:assertj-core:$assertJVersion") From 83fc7209284d45ad79d7200215ad22a62b6e1b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 1 Apr 2026 20:32:22 +0200 Subject: [PATCH 15/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- build.gradle | 2 +- thoth-jooq-pekko/build.gradle | 2 +- thoth-jooq-reactor/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index dba9cec7..195b504c 100644 --- a/build.gradle +++ b/build.gradle @@ -38,7 +38,7 @@ subprojects { jooqVersion = "3.21.1" jooqAsyncVersion = "3.0.0-RC1" functionalJsonVersion = "2.0.0-RC1" - kafkaVersion = "4.2.0" + kafkaVersion = "3.9.2" reactorKafkaVersion = "1.3.23" reactorVersion = "3.8.4" vertxSqlVersion = "5.0.10" diff --git a/thoth-jooq-pekko/build.gradle b/thoth-jooq-pekko/build.gradle index e8fb63b3..51392324 100644 --- a/thoth-jooq-pekko/build.gradle +++ b/thoth-jooq-pekko/build.gradle @@ -22,7 +22,7 @@ dependencies { testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('org.postgresql:postgresql:42.7.7') - testImplementation("org.mockito:mockito-all:$mockitoAllVersion") + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly 'org.junit.platform:junit-platform-launcher' diff --git a/thoth-jooq-reactor/build.gradle b/thoth-jooq-reactor/build.gradle index 8f74bff0..6b040e08 100644 --- a/thoth-jooq-reactor/build.gradle +++ b/thoth-jooq-reactor/build.gradle @@ -20,7 +20,7 @@ dependencies { testImplementation("fr.maif:jooq-async-reactive:$jooqAsyncVersion") testImplementation("org.assertj:assertj-core:$assertJVersion") testImplementation('org.postgresql:postgresql:42.7.7') - testImplementation("org.mockito:mockito-all:$mockitoAllVersion") + testImplementation("org.mockito:mockito-core:$mockitoCoreVersion") testImplementation(platform("org.junit:junit-bom:$jupiterVersion")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly 'org.junit.platform:junit-platform-launcher' From 459d58ef1bd6d979546278132e2b41e24ad7cd5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Del=C3=A8gue?= Date: Wed, 1 Apr 2026 20:35:49 +0200 Subject: [PATCH 16/16] Migration to : * jackson 3 * jooq 3.21 Remove akka for pekko --- build.gradle | 1 - .../fr/maif/eventsourcing/DefaultReactorAggregateStoreTest.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 195b504c..5a52ad27 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,6 @@ subprojects { jupiterVersion = "6.0.3" assertJVersion = "3.27.7" mockitoCoreVersion = "5.18.0" - mockitoAllVersion = "1.10.19" } test { diff --git a/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/DefaultReactorAggregateStoreTest.java b/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/DefaultReactorAggregateStoreTest.java index 44a80273..375396e1 100644 --- a/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/DefaultReactorAggregateStoreTest.java +++ b/thoth-jooq-reactor/src/test/java/fr/maif/eventsourcing/DefaultReactorAggregateStoreTest.java @@ -16,7 +16,7 @@ import static fr.maif.eventsourcing.AbstractPostgresEventStoreTest.eventEnvelope; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when;