diff --git a/frameworks/Clojure/ring-http-exchange/benchmark_config.json b/frameworks/Clojure/ring-http-exchange/benchmark_config.json
index bca6c16a2cb..4c943e97b3f 100755
--- a/frameworks/Clojure/ring-http-exchange/benchmark_config.json
+++ b/frameworks/Clojure/ring-http-exchange/benchmark_config.json
@@ -40,8 +40,50 @@
"database_os": "Linux",
"display_name": "ring-http-exchange-robaho",
"notes": "",
+ "versus": "httpserver-robaho"
+ }
+ },
+ {
+ "graalvm": {
+ "json_url": "/json",
+ "plaintext_url": "/plaintext",
+ "port": 8080,
+ "approach": "Realistic",
+ "classification": "Platform",
+ "database": "None",
+ "framework": "None",
+ "language": "Clojure",
+ "flavor": "None",
+ "orm": "None",
+ "platform": "None",
+ "webserver": "None",
+ "os": "Linux",
+ "database_os": "Linux",
+ "display_name": "ring-http-exchange-graalvm",
+ "notes": "",
"versus": "ring-http-exchange"
}
+ },
+ {
+ "robaho-graalvm": {
+ "json_url": "/json",
+ "plaintext_url": "/plaintext",
+ "port": 8080,
+ "approach": "Realistic",
+ "classification": "Platform",
+ "database": "None",
+ "framework": "None",
+ "language": "Clojure",
+ "flavor": "None",
+ "orm": "None",
+ "platform": "None",
+ "webserver": "None",
+ "os": "Linux",
+ "database_os": "Linux",
+ "display_name": "ring-http-exchange-robaho-graalvm",
+ "notes": "",
+ "versus": "ring-http-exchange-robaho"
+ }
}
]
}
diff --git a/frameworks/Clojure/ring-http-exchange/config.toml b/frameworks/Clojure/ring-http-exchange/config.toml
new file mode 100644
index 00000000000..48ba799aef5
--- /dev/null
+++ b/frameworks/Clojure/ring-http-exchange/config.toml
@@ -0,0 +1,55 @@
+[framework]
+name = "ring-http-exchange"
+
+[main]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver"
+
+
+[graalvm]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver-graalvm"
+
+[robaho]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver-robaho"
+
+[robaho-graalvm]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver-robaho-graalvm"
diff --git a/frameworks/Clojure/ring-http-exchange/ring-http-exchange-graalvm.dockerfile b/frameworks/Clojure/ring-http-exchange/ring-http-exchange-graalvm.dockerfile
new file mode 100644
index 00000000000..f2aed8bf3d7
--- /dev/null
+++ b/frameworks/Clojure/ring-http-exchange/ring-http-exchange-graalvm.dockerfile
@@ -0,0 +1,13 @@
+FROM maven:3-eclipse-temurin-24-alpine as maven
+WORKDIR /ring-http-exchange
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn clean clojure:compile package
+
+FROM ghcr.io/graalvm/graalvm-community:24
+WORKDIR /ring-http-exchange
+COPY --from=maven /ring-http-exchange/target/ring-http-server-1.0.0-jar-with-dependencies.jar app.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
diff --git a/frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-graalvm.dockerfile b/frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-graalvm.dockerfile
new file mode 100644
index 00000000000..1783b1878eb
--- /dev/null
+++ b/frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-graalvm.dockerfile
@@ -0,0 +1,13 @@
+FROM maven:3-eclipse-temurin-24-alpine as maven
+WORKDIR /ring-http-exchange
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn clean clojure:compile -P robaho package
+
+FROM ghcr.io/graalvm/graalvm-community:24
+WORKDIR /ring-http-exchange
+COPY --from=maven /ring-http-exchange/target/ring-http-server-1.0.0-jar-with-dependencies.jar app.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
diff --git a/frameworks/Java/httpserver-robaho/README.md b/frameworks/Java/httpserver-robaho/README.md
deleted file mode 100755
index 9317e30ce2d..00000000000
--- a/frameworks/Java/httpserver-robaho/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# httpserver Benchmarking Test
-
-This is an alternative version of the [httpserver benchmarking test suite](../httpserver)
-
-Package [robaho.net.httpserver](https://github.com/robaho/httpserver) provides an implementation of `com.sun.net.httpserver` designed for virtual threads, thus requiring JDK21+.
-
-It can be used with platform threads using a `cached thread pool` which configures a thread per task, which is more efficient for a small number of clients (embedded systems).
-
-### Test Type Implementation Source Code
-
-* [JSON](src/main/java/benchmarks/Server.java)
-* [Plaintext](src/main/java/benchmarks/Server.java)
-* [Fortunes](src/main/java/benchmarks/Server.java)
-
-## Important Libraries
-The tests were run with:
-* [Jackson](https://github.com/FasterXML/jackson)
-* [HikariCP](https://github.com/brettwooldridge/HikariCP)
-* [HTTL](https://httl.github.io/en/)
-
-## Test URLs
-### JSON
-
-http://localhost:8080/json
-
-### Plaintext
-
-http://localhost:8080/plaintext
-
-### Fortunes
-
-http://localhost:8080/fortunes
diff --git a/frameworks/Java/httpserver-robaho/benchmark_config.json b/frameworks/Java/httpserver-robaho/benchmark_config.json
deleted file mode 100755
index e3a66134723..00000000000
--- a/frameworks/Java/httpserver-robaho/benchmark_config.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "framework": "httpserver-robaho",
- "tests": [
- {
- "default": {
- "json_url": "/json",
- "plaintext_url": "/plaintext",
- "port": 8080,
- "approach": "Realistic",
- "classification": "Platform",
- "database": "None",
- "framework": "None",
- "language": "Java",
- "flavor": "None",
- "orm": "Raw",
- "platform": "httpserver",
- "webserver": "None",
- "os": "Linux",
- "database_os": "Linux",
- "display_name": "httpserver-robaho",
- "notes": "",
- "versus": ""
- },
- "postgres": {
- "fortune_url": "/fortunes",
- "port": 8080,
- "approach": "Realistic",
- "classification": "Platform",
- "database": "Postgres",
- "framework": "None",
- "language": "Java",
- "flavor": "None",
- "orm": "Raw",
- "platform": "httpserver",
- "webserver": "None",
- "os": "Linux",
- "database_os": "Linux",
- "display_name": "httpserver-robaho-postgres",
- "notes": "",
- "versus": ""
- }
- }
- ]
-}
diff --git a/frameworks/Java/httpserver-robaho/config.toml b/frameworks/Java/httpserver-robaho/config.toml
deleted file mode 100644
index e69305d162c..00000000000
--- a/frameworks/Java/httpserver-robaho/config.toml
+++ /dev/null
@@ -1,27 +0,0 @@
-[framework]
-name = "httpserver-robaho"
-
-[main]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
-approach = "Realistic"
-classification = "Platform"
-database = "None"
-database_os = "Linux"
-os = "Linux"
-orm = "Raw"
-platform = "httpserver"
-webserver = "None"
-versus = ""
-
-[postgres]
-urls.fortune = "/fortunes"
-approach = "Realistic"
-classification = "Platform"
-database = "Postgres"
-database_os = "Linux"
-os = "Linux"
-orm = "Raw"
-platform = "httpserver"
-webserver = "None"
-versus = ""
diff --git a/frameworks/Java/httpserver-robaho/pom.xml b/frameworks/Java/httpserver-robaho/pom.xml
deleted file mode 100644
index 550fcab5118..00000000000
--- a/frameworks/Java/httpserver-robaho/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
- 4.0.0
- com.techempower
- httpserver-robaho
- 1.0
- jar
-
- UTF-8
- 23
- 23
- 23
-
-
-
- com.googlecode.json-simple
- json-simple
- 1.1.1
-
-
- org.postgresql
- postgresql
- 42.7.2
-
-
- com.zaxxer
- HikariCP
- 3.3.1
-
-
- com.github.httl
- httl
- 1.0.11
-
-
- org.slf4j
- slf4j-simple
- 1.7.25
-
-
- io.github.robaho
- httpserver
- 1.0.23
- compile
-
-
-
-
-
- true
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.0
-
- false
-
-
-
- maven-assembly-plugin
- 3.1.0
-
-
-
- benchmarks.Server
-
-
-
- jar-with-dependencies
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
-
-
diff --git a/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Fortune.java b/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Fortune.java
deleted file mode 100644
index 2b420fb4764..00000000000
--- a/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Fortune.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package benchmarks;
-
-public class Fortune implements Comparable {
-
- private final int id;
- private final String message;
-
- public Fortune(int id, String message) {
- this.id = id;
- this.message = message;
- }
-
- public int getId() {
- return id;
- }
-
- public String getMessage() {
- return message;
- }
-
- @Override
- public int compareTo(Fortune other) {
- return message.compareTo(other.message);
- }
-}
diff --git a/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Message.java b/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Message.java
deleted file mode 100755
index 4c1ad6dc031..00000000000
--- a/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Message.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package benchmarks;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-
-import org.json.simple.JSONStreamAware;
-import org.json.simple.JSONValue;
-
-public class Message implements JSONStreamAware {
-
- private final String message;
-
- public Message(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
- @Override
- public void writeJSONString(Writer out) throws IOException {
- JSONValue.writeJSONString(Map.of("message",message), out);
- }
-}
diff --git a/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Server.java b/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Server.java
deleted file mode 100755
index 338200488d0..00000000000
--- a/frameworks/Java/httpserver-robaho/src/main/java/benchmarks/Server.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package benchmarks;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.net.InetSocketAddress;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.Executors;
-
-import javax.sql.DataSource;
-
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpServer;
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
-
-import httl.Engine;
-import httl.Template;
-
-public class Server {
-
- private static final String HELLO_TEXT = "Hello, World!";
- private static final byte[] HELLO_BYTES = HELLO_TEXT.getBytes();
- private static final int HELLO_LENGTH = HELLO_BYTES.length;
- private static final String SERVER_NAME = "httpserver-robaho";
-
- private static List queryFortunes(DataSource ds) throws SQLException {
- List fortunes = new ArrayList<>();
- try (Connection conn = ds.getConnection();
- PreparedStatement statement = conn.prepareStatement("SELECT id, message FROM fortune");
- ResultSet resultSet = statement.executeQuery()) {
- while (resultSet.next())
- fortunes.add(new Fortune(resultSet.getInt(1), resultSet.getString(2)));
- }
- return fortunes;
- }
-
- private static DataSource createPostgresDataSource() throws ClassNotFoundException {
- Class.forName("org.postgresql.Driver");
- HikariConfig config = new HikariConfig();
- config.setJdbcUrl("jdbc:postgresql://tfb-database:5432/hello_world");
- config.setUsername("benchmarkdbuser");
- config.setPassword("benchmarkdbpass");
- config.setMaximumPoolSize(512);
- return new HikariDataSource(config);
- }
-
- private static Template loadTemplate(String filename) throws IOException, ParseException {
- Properties props = new Properties();
- props.put("import.packages", "java.util," + Fortune.class.getPackage().getName());
- props.put("input.encoding", "UTF-8");
- props.put("output.encoding", "UTF-8");
- props.put("precompiled", "false");
- Engine engine = Engine.getEngine(props);
- return engine.getTemplate(filename);
- }
-
- private static HttpHandler createPlaintextHandler() {
- return t -> {
- t.getResponseHeaders().add("Content-Type", "text/plain");
- t.getResponseHeaders().add("Server", SERVER_NAME);
- t.sendResponseHeaders(200, HELLO_LENGTH);
- t.getResponseBody().write(HELLO_BYTES);
- t.getResponseBody().close();
- };
- }
-
- private static HttpHandler createJSONHandler() {
- return t -> {
- Message m = new Message(HELLO_TEXT);
- t.getResponseHeaders().add("Content-Type", "application/json");
- t.getResponseHeaders().add("Server", SERVER_NAME);
- var bos = new ByteArrayOutputStream();
- OutputStreamWriter w = new OutputStreamWriter(bos);
- m.writeJSONString(w);
- w.flush();
- t.sendResponseHeaders(200, bos.size());
- bos.writeTo(t.getResponseBody());
- t.getResponseBody().close();
- };
- }
-
- private static HttpHandler createFortunesHandler(DataSource ds) throws IOException, ParseException {
- Template template = loadTemplate("/fortunes.template.httl");
- return t -> {
- try {
- // query db
- List fortunes = queryFortunes(ds);
- fortunes.add(new Fortune(0, "Additional fortune added at request time."));
- Collections.sort(fortunes);
- // render template
- Map context = new HashMap<>(1);
- context.put("fortunes", fortunes);
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- template.render(context, out);
- byte[] bytes = out.toByteArray();
- // send response
- t.getResponseHeaders().add("Content-Type", "text/html; charset=utf-8");
- t.getResponseHeaders().add("Server", SERVER_NAME);
- t.sendResponseHeaders(200, bytes.length);
- t.getResponseBody().write(bytes);
- t.getResponseBody().close();
- } catch (SQLException | ParseException e) {
- throw new IOException(e);
- }
- };
- }
-
- public static void main(String[] args) throws Exception {
- // parse arguments
- String settings = args.length > 0 ? args[0] : "";
- int port = args.length > 1 ? Integer.parseInt(args[1]) : 8080;
- if (settings.contains("debug"))
- System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "DEBUG");
- // create server
- HttpServer server = HttpServer.create(new InetSocketAddress(port), 1024 * 8);
- server.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
- // server.setExecutor(Executors.newCachedThreadPool());
- // add context handlers
- server.createContext("/plaintext", createPlaintextHandler());
- server.createContext("/json", createJSONHandler());
- if (settings.contains("postgres")) {
- DataSource ds = createPostgresDataSource();
- server.createContext("/fortunes", createFortunesHandler(ds));
- }
- // start server
- server.start();
- }
-}
diff --git a/frameworks/Java/httpserver-robaho/src/main/resources/fortunes.template.httl b/frameworks/Java/httpserver-robaho/src/main/resources/fortunes.template.httl
deleted file mode 100644
index 4d87b47658a..00000000000
--- a/frameworks/Java/httpserver-robaho/src/main/resources/fortunes.template.httl
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-Fortunes
-
-
-| id | message |
-
-| ${fortune.id} | ${fortune.message} |
-
-
-
-
diff --git a/frameworks/Java/httpserver/README.md b/frameworks/Java/httpserver/README.md
index 881dcb4f97e..fae36815472 100755
--- a/frameworks/Java/httpserver/README.md
+++ b/frameworks/Java/httpserver/README.md
@@ -1,26 +1,30 @@
-# httpserver Benchmarking Test
-
-This is the com.sun.net.httpserver portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
+# Benchmarking Test
+## httpserver
+This is the com.sun.net.httpserver portion of a [benchmarking test suite](../) comparing a variety of web development
+platforms.
Package [com.sun.net.httpserver](https://docs.oracle.com/javase/8/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpServer.html)
provides a simple high-level Http server API, which can be used to build embedded HTTP servers.
It is built-in to the Oracle JDK and OpenJDK (but is not part of the Java standard
and is not available in other JDKs).
-
-
+## Robaho httpserver
+This is an alternative version of the [com.sun.net.httpserver](https://docs.oracle.com/javase/8/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpServer.html)
+Package [robaho.net.httpserver](https://github.com/robaho/httpserver) provides an implementation of `com.sun.net.httpserver` designed for virtual threads, thus requiring JDK21+.
### Test Type Implementation Source Code
-
* [JSON](src/main/java/benchmarks/Server.java)
* [Plaintext](src/main/java/benchmarks/Server.java)
* [Fortunes](src/main/java/benchmarks/Server.java)
## Important Libraries
+
The tests were run with:
+
* [Jackson](https://github.com/FasterXML/jackson)
* [HikariCP](https://github.com/brettwooldridge/HikariCP)
* [HTTL](https://httl.github.io/en/)
+* [Robaho httpserver](https://github.com/robaho/httpserver)
## Test URLs
### JSON
diff --git a/frameworks/Java/httpserver/benchmark_config.json b/frameworks/Java/httpserver/benchmark_config.json
index 99f040ca11b..305564d55a8 100755
--- a/frameworks/Java/httpserver/benchmark_config.json
+++ b/frameworks/Java/httpserver/benchmark_config.json
@@ -38,6 +38,83 @@
"display_name": "httpserver-postgres",
"notes": "",
"versus": ""
+ },
+ "graalvm": {
+ "json_url": "/json",
+ "plaintext_url": "/plaintext",
+ "port": 8080,
+ "approach": "Realistic",
+ "classification": "Platform",
+ "database": "None",
+ "framework": "None",
+ "language": "Java",
+ "flavor": "None",
+ "orm": "Raw",
+ "platform": "httpserver",
+ "webserver": "None",
+ "os": "Linux",
+ "database_os": "Linux",
+ "display_name": "httpserver-graalvm",
+ "notes": "",
+ "versus": "httpserver"
+ }
+ },
+ {
+ "robaho": {
+ "json_url": "/json",
+ "plaintext_url": "/plaintext",
+ "port": 8080,
+ "approach": "Realistic",
+ "classification": "Platform",
+ "database": "None",
+ "framework": "None",
+ "language": "Java",
+ "flavor": "None",
+ "orm": "Raw",
+ "platform": "httpserver",
+ "webserver": "None",
+ "os": "Linux",
+ "database_os": "Linux",
+ "display_name": "httpserver-robaho",
+ "notes": "",
+ "versus": ""
+ },
+ "robaho-postgres": {
+ "fortune_url": "/fortunes",
+ "port": 8080,
+ "approach": "Realistic",
+ "classification": "Platform",
+ "database": "Postgres",
+ "framework": "None",
+ "language": "Java",
+ "flavor": "None",
+ "orm": "Raw",
+ "platform": "httpserver",
+ "webserver": "None",
+ "os": "Linux",
+ "database_os": "Linux",
+ "display_name": "httpserver-robaho-postgres",
+ "notes": "",
+ "versus": ""
+ },
+ "robaho-graalvm": {
+ "json_url": "/json",
+ "plaintext_url": "/plaintext",
+ "port": 8080,
+ "approach": "Realistic",
+ "classification": "Platform",
+ "database": "None",
+ "framework": "None",
+ "language": "Java",
+ "flavor": "None",
+ "orm": "Raw",
+ "platform": "httpserver",
+ "webserver": "None",
+ "os": "Linux",
+ "database_os": "Linux",
+ "display_name": "httpserver-robaho-graalvm",
+ "notes": "",
+ "versus": "httpserver-robaho"
}
}
]
diff --git a/frameworks/Java/httpserver/config.toml b/frameworks/Java/httpserver/config.toml
index 72dd4414ff3..3531b9e5e9f 100644
--- a/frameworks/Java/httpserver/config.toml
+++ b/frameworks/Java/httpserver/config.toml
@@ -25,3 +25,58 @@ orm = "Raw"
platform = "httpserver"
webserver = "None"
versus = ""
+
+
+[graalvm]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver"
+
+
+[robaho]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver"
+
+
+[robaho-postgres]
+urls.fortune = "/fortunes"
+approach = "Realistic"
+classification = "Platform"
+database = "Postgres"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = ""
+
+
+[robaho-graalvm]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "httpserver"
+webserver = "None"
+versus = "httpserver-robaho"
diff --git a/frameworks/Java/httpserver/httpserver-graalvm.dockerfile b/frameworks/Java/httpserver/httpserver-graalvm.dockerfile
new file mode 100644
index 00000000000..b1d4e09e3d0
--- /dev/null
+++ b/frameworks/Java/httpserver/httpserver-graalvm.dockerfile
@@ -0,0 +1,13 @@
+FROM maven:3-eclipse-temurin-24-alpine as maven
+WORKDIR /httpserver
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn compile assembly:single -q
+
+FROM ghcr.io/graalvm/graalvm-community:24
+WORKDIR /httpserver
+COPY --from=maven /httpserver/target/httpserver-1.0-jar-with-dependencies.jar app.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar"]
diff --git a/frameworks/Java/httpserver/httpserver-robaho-graalvm.dockerfile b/frameworks/Java/httpserver/httpserver-robaho-graalvm.dockerfile
new file mode 100644
index 00000000000..ee9651eb6fe
--- /dev/null
+++ b/frameworks/Java/httpserver/httpserver-robaho-graalvm.dockerfile
@@ -0,0 +1,13 @@
+FROM jelastic/maven:3.9.9-openjdk-23.0.1-almalinux-9 as maven
+WORKDIR /httpserver-robaho
+COPY pom.xml pom.xml
+COPY src src
+RUN mvn compile -P robaho assembly:single -q
+
+FROM ghcr.io/graalvm/graalvm-community:24
+WORKDIR /httpserver-robaho
+COPY --from=maven /httpserver-robaho/target/httpserver-1.0-jar-with-dependencies.jar app.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-jar", "app.jar"]
diff --git a/frameworks/Java/httpserver-robaho/httpserver-robaho-postgres.dockerfile b/frameworks/Java/httpserver/httpserver-robaho-postgres.dockerfile
similarity index 63%
rename from frameworks/Java/httpserver-robaho/httpserver-robaho-postgres.dockerfile
rename to frameworks/Java/httpserver/httpserver-robaho-postgres.dockerfile
index b97d3eb5d2e..8fc18df235d 100644
--- a/frameworks/Java/httpserver-robaho/httpserver-robaho-postgres.dockerfile
+++ b/frameworks/Java/httpserver/httpserver-robaho-postgres.dockerfile
@@ -2,11 +2,11 @@ FROM jelastic/maven:3.9.9-openjdk-23.0.1-almalinux-9 as maven
WORKDIR /httpserver-robaho
COPY pom.xml pom.xml
COPY src src
-RUN mvn compile assembly:single -q
+RUN mvn compile -P robaho assembly:single -q
FROM openjdk:23-jdk-slim
WORKDIR /httpserver-robaho
-COPY --from=maven /httpserver-robaho/target/httpserver-robaho-1.0-jar-with-dependencies.jar app.jar
+COPY --from=maven /httpserver-robaho/target/httpserver-1.0-jar-with-dependencies.jar app.jar
EXPOSE 8080
diff --git a/frameworks/Java/httpserver-robaho/httpserver-robaho.dockerfile b/frameworks/Java/httpserver/httpserver-robaho.dockerfile
similarity index 62%
rename from frameworks/Java/httpserver-robaho/httpserver-robaho.dockerfile
rename to frameworks/Java/httpserver/httpserver-robaho.dockerfile
index f12f0bbdfeb..1ccaff150eb 100644
--- a/frameworks/Java/httpserver-robaho/httpserver-robaho.dockerfile
+++ b/frameworks/Java/httpserver/httpserver-robaho.dockerfile
@@ -2,11 +2,11 @@ FROM jelastic/maven:3.9.9-openjdk-23.0.1-almalinux-9 as maven
WORKDIR /httpserver-robaho
COPY pom.xml pom.xml
COPY src src
-RUN mvn compile assembly:single -q
+RUN mvn compile -P robaho assembly:single -q
FROM openjdk:23-jdk-slim
WORKDIR /httpserver-robaho
-COPY --from=maven /httpserver-robaho/target/httpserver-robaho-1.0-jar-with-dependencies.jar app.jar
+COPY --from=maven /httpserver-robaho/target/httpserver-1.0-jar-with-dependencies.jar app.jar
EXPOSE 8080
diff --git a/frameworks/Java/httpserver/pom.xml b/frameworks/Java/httpserver/pom.xml
index 30577d8801f..5d46cff5c4a 100644
--- a/frameworks/Java/httpserver/pom.xml
+++ b/frameworks/Java/httpserver/pom.xml
@@ -1,5 +1,5 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
@@ -10,22 +10,21 @@
UTF-8
- 11
- 11
+ 21
+ 21
com.fasterxml.jackson.core
jackson-databind
- 2.16.0
+ 2.19.1
com.fasterxml.jackson.module
jackson-module-afterburner
- 2.9.9
+ 2.19.1
-
org.postgresql
postgresql
@@ -49,6 +48,21 @@
1.8.0-beta4
+
+
+ robaho
+
+ false
+
+
+
+ io.github.robaho
+ httpserver
+ 1.0.23
+
+
+
+
@@ -59,6 +73,8 @@
3.8.0
false
+ 21
+ 21
diff --git a/frameworks/Java/httpserver/src/main/java/benchmarks/Message.java b/frameworks/Java/httpserver/src/main/java/benchmarks/Message.java
index 6a84fb9e7ca..3568e9b90d2 100755
--- a/frameworks/Java/httpserver/src/main/java/benchmarks/Message.java
+++ b/frameworks/Java/httpserver/src/main/java/benchmarks/Message.java
@@ -1,15 +1,4 @@
package benchmarks;
-public class Message {
+public record Message(String message) {}
- private final String message;
-
- public Message(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
-}
diff --git a/frameworks/Java/httpserver/src/main/java/benchmarks/Server.java b/frameworks/Java/httpserver/src/main/java/benchmarks/Server.java
index 9f40faafc2e..688e6b65df7 100755
--- a/frameworks/Java/httpserver/src/main/java/benchmarks/Server.java
+++ b/frameworks/Java/httpserver/src/main/java/benchmarks/Server.java
@@ -8,18 +8,23 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
import java.util.concurrent.Executors;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+
import javax.sql.DataSource;
+
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
+
import httl.Engine;
import httl.Template;
@@ -72,7 +77,6 @@ private static HttpHandler createPlaintextHandler() {
t.getResponseHeaders().add("Server", SERVER_NAME);
t.sendResponseHeaders(200, HELLO_LENGTH);
t.getResponseBody().write(HELLO_BYTES);
- t.getResponseBody().flush();
t.getResponseBody().close();
};
}
@@ -116,7 +120,6 @@ private static HttpHandler createFortunesHandler(DataSource ds) throws IOExcepti
t.getResponseHeaders().add("Server", SERVER_NAME);
t.sendResponseHeaders(200, bytes.length);
t.getResponseBody().write(bytes);
- t.getResponseBody().flush();
t.getResponseBody().close();
} catch (SQLException | ParseException e) {
throw new IOException(e);
@@ -133,7 +136,6 @@ public static void main(String[] args) throws Exception {
// create server
HttpServer server = HttpServer.create(new InetSocketAddress(port), 1024 * 8);
server.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
- // add context handlers
server.createContext("/plaintext", createPlaintextHandler());
server.createContext("/json", createJSONHandler());
if (settings.contains("postgres")) {