diff --git a/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/catalog/CatalogJpaAdapter.java b/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/catalog/CatalogJpaAdapter.java index a957550..c99bd38 100644 --- a/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/catalog/CatalogJpaAdapter.java +++ b/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/catalog/CatalogJpaAdapter.java @@ -9,6 +9,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; +import java.time.Duration; import java.util.UUID; @Component @@ -31,6 +32,7 @@ public class CatalogJpaAdapter implements CatalogPort { public Flux getAll() { return Mono.fromCallable(catalogJpaRepository::findAll) .subscribeOn(Schedulers.boundedElastic()) + .delayElement(Duration.ofSeconds(1)) .flatMapMany(Flux::fromIterable) .map(CatalogJpaEntity::toDomain); } diff --git a/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/item/ItemJpaAdapter.java b/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/item/ItemJpaAdapter.java index fc55501..e4b1fb1 100644 --- a/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/item/ItemJpaAdapter.java +++ b/reactor-app/src/main/java/com/zeenea/experiments/virtualthreads/reactorapp/infrastructure/item/ItemJpaAdapter.java @@ -9,6 +9,9 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; +import java.time.Duration; + + @Component public class ItemJpaAdapter implements ItemPort { private final ItemJpaRepository itemJpaRepository; @@ -21,6 +24,7 @@ public class ItemJpaAdapter implements ItemPort { public Flux getAll() { return Mono.fromCallable(itemJpaRepository::findAll) .subscribeOn(Schedulers.boundedElastic()) + .delayElement(Duration.ofSeconds(1)) .flatMapMany(Flux::fromIterable) .map(ItemJpaEntity::toDomain); } diff --git a/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/catalog/CatalogJpaAdapter.java b/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/catalog/CatalogJpaAdapter.java index f625e38..529feaf 100644 --- a/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/catalog/CatalogJpaAdapter.java +++ b/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/catalog/CatalogJpaAdapter.java @@ -10,6 +10,8 @@ import java.util.List; import java.util.Optional; import java.util.UUID; +import static com.zeenea.experiments.virtualthreads.virtualthreadsapp.utils.LatencyUtils.sleepOneSec; + @Component public class CatalogJpaAdapter implements CatalogPort { private final CatalogJpaRepository catalogJpaRepository; @@ -26,6 +28,7 @@ public class CatalogJpaAdapter implements CatalogPort { @Override public List getAll() { + sleepOneSec(); return catalogJpaRepository.findAll() .stream() .map(CatalogJpaEntity::toDomain) diff --git a/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/item/ItemJpaAdapter.java b/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/item/ItemJpaAdapter.java index 453211c..cf093c0 100644 --- a/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/item/ItemJpaAdapter.java +++ b/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/infrastructure/item/ItemJpaAdapter.java @@ -8,6 +8,8 @@ import org.springframework.stereotype.Component; import java.util.List; +import static com.zeenea.experiments.virtualthreads.virtualthreadsapp.utils.LatencyUtils.sleepOneSec; + @Component public class ItemJpaAdapter implements ItemPort { private final ItemJpaRepository itemJpaRepository; @@ -18,6 +20,7 @@ public class ItemJpaAdapter implements ItemPort { @Override public List getAll() { + sleepOneSec(); return itemJpaRepository.findAll() .stream() .map(ItemJpaEntity::toDomain) diff --git a/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/utils/LatencyUtils.java b/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/utils/LatencyUtils.java new file mode 100644 index 0000000..793e6d6 --- /dev/null +++ b/virtual-threads-app/src/main/java/com/zeenea/experiments/virtualthreads/virtualthreadsapp/utils/LatencyUtils.java @@ -0,0 +1,15 @@ +package com.zeenea.experiments.virtualthreads.virtualthreadsapp.utils; + +public class LatencyUtils { + public static void sleep(int millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public static void sleepOneSec() { + sleep(1000); + } +}