resources) {
@Override
public String toString() {
- return "classes: "
+ return "main: "
+ classes.stream().map(Path::toString).collect(joining(File.pathSeparator))
+ "\nresources: "
+ resources.stream().map(Path::toString).collect(joining(File.pathSeparator))
diff --git a/modules/jooby-run/src/main/java/io/jooby/internal/run/JoobyMultiModuleFinder.java b/modules/jooby-run/src/main/java/io/jooby/internal/run/JoobyMultiModuleFinder.java
index 64fb89378a..cfe643e832 100644
--- a/modules/jooby-run/src/main/java/io/jooby/internal/run/JoobyMultiModuleFinder.java
+++ b/modules/jooby-run/src/main/java/io/jooby/internal/run/JoobyMultiModuleFinder.java
@@ -16,7 +16,11 @@
/**
* The new class loader since 3.x. It creates 3 modules with their own classloader:
*
- * - classes: project classes - resources: project resources - jars: project dependencies
+ *
+ * - classes: project classes
+ *
- resources: project resources
+ *
- jars: project dependencies
+ *
*
* This approach reduce memory footprint allowing fast restart.
*/
diff --git a/modules/jooby-rxjava3/pom.xml b/modules/jooby-rxjava3/pom.xml
index 4efb13bfed..570a716a9b 100644
--- a/modules/jooby-rxjava3/pom.xml
+++ b/modules/jooby-rxjava3/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-rxjava3
jooby-rxjava3
diff --git a/modules/jooby-stork/pom.xml b/modules/jooby-stork/pom.xml
index aecb5d83fa..65ec0180e0 100644
--- a/modules/jooby-stork/pom.xml
+++ b/modules/jooby-stork/pom.xml
@@ -4,7 +4,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-stork
diff --git a/modules/jooby-swagger-ui/pom.xml b/modules/jooby-swagger-ui/pom.xml
index e7851afd2e..219978b5bc 100644
--- a/modules/jooby-swagger-ui/pom.xml
+++ b/modules/jooby-swagger-ui/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-swagger-ui
jooby-swagger-ui
diff --git a/modules/jooby-test/pom.xml b/modules/jooby-test/pom.xml
index fa070f19a7..aa7e0c6bb4 100644
--- a/modules/jooby-test/pom.xml
+++ b/modules/jooby-test/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-test
jooby-test
diff --git a/modules/jooby-thymeleaf/pom.xml b/modules/jooby-thymeleaf/pom.xml
index 4abdea010e..d289477549 100644
--- a/modules/jooby-thymeleaf/pom.xml
+++ b/modules/jooby-thymeleaf/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-thymeleaf
jooby-thymeleaf
diff --git a/modules/jooby-undertow/pom.xml b/modules/jooby-undertow/pom.xml
index 9971abe61b..240b99004c 100644
--- a/modules/jooby-undertow/pom.xml
+++ b/modules/jooby-undertow/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-undertow
jooby-undertow
diff --git a/modules/jooby-whoops/pom.xml b/modules/jooby-whoops/pom.xml
index a4f8ff7e9c..e64b84b746 100644
--- a/modules/jooby-whoops/pom.xml
+++ b/modules/jooby-whoops/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-whoops
jooby-whoops
diff --git a/modules/jooby-yasson/pom.xml b/modules/jooby-yasson/pom.xml
index c583aa5a1c..018fbb2f94 100644
--- a/modules/jooby-yasson/pom.xml
+++ b/modules/jooby-yasson/pom.xml
@@ -6,7 +6,7 @@
io.jooby
modules
- 3.11.3
+ 3.11.4
jooby-yasson
jooby-yasson
diff --git a/modules/pom.xml b/modules/pom.xml
index 274f9c3c1f..0e6162ecf2 100644
--- a/modules/pom.xml
+++ b/modules/pom.xml
@@ -4,7 +4,7 @@
io.jooby
jooby-project
- 3.11.3
+ 3.11.4
modules
diff --git a/pom.xml b/pom.xml
index caf4f779a2..47c4ca5ac9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
io.jooby
jooby-project
- 3.11.3
+ 3.11.4
pom
jooby-project
@@ -72,9 +72,9 @@
6.3.3
1.2
- 6.6.22.Final
+ 6.6.33.Final
15.11.0
- 3.49.5
+ 3.49.6
11.14.0
24.1
6.7.1.RELEASE
@@ -82,13 +82,13 @@
4.0.0
3.2.2
- 1.4.4
+ 1.4.5
7.0.0
- 1.5.19
+ 1.5.20
2.25.1
2.0.17
@@ -99,18 +99,18 @@
4.2.37
- 2.1.6.Final
+ 2.2.0.Final
- 9.8
+ 9.9
- 2.3.18.Final
+ 2.3.20.Final
12.1.2
- 4.2.6.Final
+ 4.2.7.Final
- 2.2.34
+ 2.2.39
2.1.31
2.0.0-rc.20
@@ -126,11 +126,11 @@
2.0.1.MR
3.1.1
4.0.0
- 4.9.6
+ 4.9.8
- 5.1.0
- 0.12.6
+ 5.2.1
+ 0.13.0
6.2.2
2.5.0
9.2.1
@@ -154,7 +154,7 @@
5.20.0
33.5.0-jre
- 0.21.0
+ 0.23.0
1.4.5
@@ -207,7 +207,7 @@
false
yyyy-MM-dd HH:mm:ssa
- 2025-10-14T00:05:09Z
+ 2025-10-20T12:43:04Z
UTF-8
etc${file.separator}source${file.separator}formatter.sh
diff --git a/tests/pom.xml b/tests/pom.xml
index 189835603c..b1e42a4ae1 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -6,7 +6,7 @@
io.jooby
jooby-project
- 3.11.3
+ 3.11.4
tests
tests
diff --git a/tests/src/test/java/io/jooby/i2806/Issue2806.java b/tests/src/test/java/io/jooby/i2806/Issue2806.java
index 3b5ff321e5..208af9a784 100644
--- a/tests/src/test/java/io/jooby/i2806/Issue2806.java
+++ b/tests/src/test/java/io/jooby/i2806/Issue2806.java
@@ -5,9 +5,9 @@
*/
package io.jooby.i2806;
+import static io.jooby.test.TestUtil._19kb;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import java.util.Arrays;
import java.util.Map;
import com.google.common.collect.ImmutableMap;
@@ -22,9 +22,6 @@ public class Issue2806 {
@ServerTest
public void renderShouldWorkFromErrorHandlerWhenLargeRequestAreSent(ServerTestRunner runner) {
- char[] chars = new char[19 * 1024];
- Arrays.fill(chars, 'S');
- String _19kb = new String(chars);
runner
.define(
app -> {
@@ -43,20 +40,32 @@ public void renderShouldWorkFromErrorHandlerWhenLargeRequestAreSent(ServerTestRu
ctx.render(map);
});
- app.post("/2806", ctx -> ctx.body().value(""));
+ app.post(
+ "/2806",
+ ctx -> {
+ return ctx.body().value("");
+ });
app.get("/2806", ctx -> ctx.body().value(""));
})
.ready(
client -> {
// Exceeds
- client.post(
- "/2806",
- RequestBody.create(_19kb, MediaType.get("text/plain")),
- rsp -> {
- assertEquals(413, rsp.code());
- assertEquals("{\"router\":true,\"route\":true}", rsp.body().string());
- });
+ client
+ .post("/2806", RequestBody.create(_19kb, MediaType.get("text/plain")))
+ .execute(
+ rsp -> {
+ assertEquals(413, rsp.code());
+ assertEquals("{\"router\":true,\"route\":true}", rsp.body().string());
+ });
+
+ client
+ .get("/2806")
+ .execute(
+ rsp -> {
+ assertEquals(200, rsp.code());
+ assertEquals("", rsp.body().string());
+ });
});
}
}
diff --git a/tests/src/test/java/io/jooby/test/WebClient.java b/tests/src/test/java/io/jooby/test/WebClient.java
index 93d622b98e..93607e41ed 100644
--- a/tests/src/test/java/io/jooby/test/WebClient.java
+++ b/tests/src/test/java/io/jooby/test/WebClient.java
@@ -14,10 +14,7 @@
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@@ -142,17 +139,46 @@ public void close() {
public class Request {
private final okhttp3.Request.Builder req;
+ private SneakyThrows.Consumer configurer;
public Request(okhttp3.Request.Builder req) {
this.req = req;
}
public Request prepare(SneakyThrows.Consumer configurer) {
- configurer.accept(req);
+ this.configurer = configurer;
return this;
}
public void execute(SneakyThrows.Consumer callback) {
+ execute(1, callback);
+ }
+
+ public void execute(int concurrency, SneakyThrows.Consumer callback) {
+ if (configurer != null) {
+ configurer.accept(req);
+ }
+ if (concurrency > 1) {
+ var futures = new ArrayList>();
+ for (var i = 0; i < concurrency; i++) {
+ futures.add(
+ CompletableFuture.supplyAsync(
+ () -> {
+ executeCall(callback);
+ return "success";
+ }));
+ try {
+ CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
+ } catch (CompletionException x) {
+ throw SneakyThrows.propagate(x.getCause());
+ }
+ }
+ } else {
+ executeCall(callback);
+ }
+ }
+
+ private void executeCall(SneakyThrows.Consumer callback) {
okhttp3.Request r = req.build();
try (Response rsp = client.newCall(r).execute()) {
callback.accept(rsp);