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 - - - - - - -
idmessage
${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")) {