From 8decea90f155dad184647f5322f7ab4fb217a06b Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Tue, 6 May 2025 16:44:33 -0400 Subject: [PATCH] Add Avaje Jex --- frameworks/Java/avaje-jex/README.md | 81 ++++++++ .../Java/avaje-jex/avaje-jex-jetty.dockerfile | 8 + .../avaje-jex/avaje-jex-robaho.dockerfile | 8 + .../Java/avaje-jex/avaje-jex.dockerfile | 8 + .../Java/avaje-jex/benchmark_config.json | 76 ++++++++ frameworks/Java/avaje-jex/config.toml | 53 ++++++ frameworks/Java/avaje-jex/pom.xml | 173 ++++++++++++++++++ .../java/benchmark/DatabaseController.java | 57 ++++++ .../src/main/java/benchmark/Main.java | 27 +++ .../main/java/benchmark/model/Fortune.java | 6 + .../java/benchmark/model/FortuneTemplate.java | 7 + .../src/main/java/benchmark/model/World.java | 38 ++++ .../java/benchmark/repository/DbService.java | 33 ++++ .../benchmark/repository/HikariFactory.java | 29 +++ .../benchmark/repository/JDBCDbService.java | 95 ++++++++++ .../avaje-jex/src/main/java/module-info.java | 19 ++ .../src/main/resources/application.properties | 6 + .../src/main/resources/fortunes.mustache | 20 ++ .../src/main/resources/hikari.properties | 7 + 19 files changed, 751 insertions(+) create mode 100644 frameworks/Java/avaje-jex/README.md create mode 100644 frameworks/Java/avaje-jex/avaje-jex-jetty.dockerfile create mode 100644 frameworks/Java/avaje-jex/avaje-jex-robaho.dockerfile create mode 100644 frameworks/Java/avaje-jex/avaje-jex.dockerfile create mode 100644 frameworks/Java/avaje-jex/benchmark_config.json create mode 100644 frameworks/Java/avaje-jex/config.toml create mode 100644 frameworks/Java/avaje-jex/pom.xml create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/DatabaseController.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/Main.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/model/Fortune.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/model/FortuneTemplate.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/model/World.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/repository/DbService.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/repository/HikariFactory.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/benchmark/repository/JDBCDbService.java create mode 100644 frameworks/Java/avaje-jex/src/main/java/module-info.java create mode 100644 frameworks/Java/avaje-jex/src/main/resources/application.properties create mode 100644 frameworks/Java/avaje-jex/src/main/resources/fortunes.mustache create mode 100644 frameworks/Java/avaje-jex/src/main/resources/hikari.properties diff --git a/frameworks/Java/avaje-jex/README.md b/frameworks/Java/avaje-jex/README.md new file mode 100644 index 00000000000..54e62058c3d --- /dev/null +++ b/frameworks/Java/avaje-jex/README.md @@ -0,0 +1,81 @@ +# Avaje Jex Benchmarking Test + +## Important Libraries +The tests were run with: +* [Java 24](https://openjdk.java.net) +* [Avaje Http 3.3](https://github.com/avaje/avaje-http) +* [Avaje Inject 11.5](https://github.com/avaje/avaje-inject) +* [Avaje Jex 3.2](https://github.com/avaje/avaje-jex) +* [HikariCP 6.3.0](https://github.com/brettwooldridge/HikariCP) +* [jstachio 1.3.7](https://github.com/jstachio/jstachio) + +[Avaje Jex](https://avaje.io) is a micro web framework for Java's built-in `jdk.httpserver` API. + +```java + Jex.create() + .get("/", ctx -> ctx.text("hello")) + .start(); +``` + +## Test Implementation Source Code + +### Plain Text Test +* [Plain test source](src/main/java/benchmark/Main.java) + +### JSON Encoding Test +* [JSON test source](src/main/java/benchmark/Main.java) + +### Single Query Test +* [Single query test source](src/main/java/benchmark/DatabaseController.java) + +### Multiple Queries Test +* [Multiple queries test source](src/main/java/benchmark/DatabaseController.java) + +### Database Update Test +* [Database update test source](src/main/java/benchmark/DatabaseController.java) + +### Fortunes Test +* [Fortunes test source](src/main/java/benchmark/DatabaseController.java) + +## Test URLs +### JSON + +http://localhost:8080/json + +### PLAINTEXT + +http://localhost:8080/plaintext + +### DB + +http://localhost:8080/db + +### QUERY + +http://localhost:8080/queries?queries= + +### UPDATE + +http://localhost:8080/updates?queries= + +### FORTUNES + +http://localhost:8080/fortunes + +## build + +### java's httpserver impl + + `mvn clean package` + +### robaho's httpserver impl + + `mvn clean package -P robaho` + +### jetty's httpserver impl + + `mvn clean package -P jetty` + +## run + + `java -p ./target/modules/ -m avaje.techempower` \ No newline at end of file diff --git a/frameworks/Java/avaje-jex/avaje-jex-jetty.dockerfile b/frameworks/Java/avaje-jex/avaje-jex-jetty.dockerfile new file mode 100644 index 00000000000..80fc05c124d --- /dev/null +++ b/frameworks/Java/avaje-jex/avaje-jex-jetty.dockerfile @@ -0,0 +1,8 @@ +FROM maven:3.9.9-eclipse-temurin-24 AS build +WORKDIR /avaje-jex +COPY pom.xml pom.xml +COPY src src +RUN mvn package -q -P jetty +EXPOSE 8080 + +CMD ["java", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-p", "./target/modules/", "-m", "avaje.techempower"] diff --git a/frameworks/Java/avaje-jex/avaje-jex-robaho.dockerfile b/frameworks/Java/avaje-jex/avaje-jex-robaho.dockerfile new file mode 100644 index 00000000000..d62eb71d124 --- /dev/null +++ b/frameworks/Java/avaje-jex/avaje-jex-robaho.dockerfile @@ -0,0 +1,8 @@ +FROM maven:3.9.9-eclipse-temurin-24 AS build +WORKDIR /avaje-jex +COPY pom.xml pom.xml +COPY src src +RUN mvn package -q -P robaho +EXPOSE 8080 + +CMD ["java", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-p", "./target/modules/", "-m", "avaje.techempower"] diff --git a/frameworks/Java/avaje-jex/avaje-jex.dockerfile b/frameworks/Java/avaje-jex/avaje-jex.dockerfile new file mode 100644 index 00000000000..a9c8578c4f5 --- /dev/null +++ b/frameworks/Java/avaje-jex/avaje-jex.dockerfile @@ -0,0 +1,8 @@ +FROM maven:3.9.9-eclipse-temurin-24 AS build +WORKDIR /avaje-jex +COPY pom.xml pom.xml +COPY src src +RUN mvn package -q +EXPOSE 8080 + +CMD ["java", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-p", "./target/modules/", "-m", "avaje.techempower"] diff --git a/frameworks/Java/avaje-jex/benchmark_config.json b/frameworks/Java/avaje-jex/benchmark_config.json new file mode 100644 index 00000000000..90b7a6ed051 --- /dev/null +++ b/frameworks/Java/avaje-jex/benchmark_config.json @@ -0,0 +1,76 @@ +{ + "framework": "avaje-jex", + "tests": [ + { + "default": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?queries=", + "fortune_url": "/fortunes", + "update_url": "/updates?queries=", + "port": 8080, + "approach": "Realistic", + "classification": "Micro", + "framework": "avaje-jex", + "language": "Java", + "flavor": "None", + "platform": "httpserver", + "database": "Postgres", + "database_os": "Linux", + "orm": "Raw", + "webserver": "None", + "os": "Linux", + "notes": "avaje-jex using jdk.httpserver", + "display_name": "avaje-jex", + "versus": "httpserver" + }, + "robaho": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?queries=", + "fortune_url": "/fortunes", + "update_url": "/updates?queries=", + "port": 8080, + "approach": "Realistic", + "classification": "Micro", + "framework": "avaje-jex", + "language": "Java", + "flavor": "None", + "platform": "robaho", + "database": "Postgres", + "database_os": "Linux", + "orm": "Raw", + "webserver": "None", + "os": "Linux", + "notes": "avaje-jex using robaho's httpserver", + "display_name": "avaje-jex-robaho", + "versus": "robaho-httpserver" + }, + "jetty": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "query_url": "/queries?queries=", + "fortune_url": "/fortunes", + "update_url": "/updates?queries=", + "port": 8080, + "approach": "Realistic", + "classification": "Micro", + "framework": "avaje-jex", + "language": "Java", + "flavor": "None", + "platform": "Jetty", + "database": "Postgres", + "database_os": "Linux", + "orm": "Raw", + "webserver": "None", + "os": "Linux", + "notes": "avaje-jex using Jetty", + "display_name": "avaje-jex-jetty", + "versus": "jetty" + } + } + ] +} \ No newline at end of file diff --git a/frameworks/Java/avaje-jex/config.toml b/frameworks/Java/avaje-jex/config.toml new file mode 100644 index 00000000000..ec60cda08fa --- /dev/null +++ b/frameworks/Java/avaje-jex/config.toml @@ -0,0 +1,53 @@ +[framework] +name = "avaje-jex" + +[main] +urls.plaintext = "/plaintext" +urls.json = "/json" +urls.db = "/db" +urls.query = "/queries?queries=" +urls.update = "/updates?queries=" +urls.fortune = "/fortunes" +approach = "Realistic" +classification = "Micro" +database = "Postgres" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = "jdk-httpserver" +webserver = "None" +versus = "httpserver" + +[robaho] +urls.plaintext = "/plaintext" +urls.json = "/json" +urls.db = "/db" +urls.query = "/queries?queries=" +urls.update = "/updates?queries=" +urls.fortune = "/fortunes" +approach = "Realistic" +classification = "Micro" +database = "Postgres" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = "robaho-httpserver" +webserver = "None" +versus = "robaho-httpserver" + +[jetty] +urls.plaintext = "/plaintext" +urls.json = "/json" +urls.db = "/db" +urls.query = "/queries?queries=" +urls.update = "/updates?queries=" +urls.fortune = "/fortunes" +approach = "Realistic" +classification = "Micro" +database = "Postgres" +database_os = "Linux" +os = "Linux" +orm = "Raw" +platform = "Jetty" +webserver = "None" +versus = "jetty" \ No newline at end of file diff --git a/frameworks/Java/avaje-jex/pom.xml b/frameworks/Java/avaje-jex/pom.xml new file mode 100644 index 00000000000..acca218c0c6 --- /dev/null +++ b/frameworks/Java/avaje-jex/pom.xml @@ -0,0 +1,173 @@ + + + 4.0.0 + + io.avaje + avaje-jex-parent + 3.2 + + benchmark + avaje-jex + 1.0 + + + 24 + 2.0.17 + + + + + io.avaje + avaje-config + + + io.avaje + avaje-http-api + + + io.avaje + avaje-inject + + + io.avaje + avaje-jex + + + io.avaje + avaje-jsonb + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-simple + ${slf4j.version} + + + + com.zaxxer + HikariCP + 6.3.0 + + + org.postgresql + postgresql + 42.7.5 + + + + io.jstach + jstachio + 1.3.7 + + + + + io.jstach + jstachio-apt + 1.3.7 + provided + + + io.avaje + avaje-http-jex-generator + provided + + + io.avaje + avaje-inject-generator + provided + + + io.avaje + avaje-jsonb-generator + provided + + + + + + + io.avaje + avaje-provides-maven-plugin + 2.3 + + + + com.spotify.fmt + fmt-maven-plugin + 2.25 + + + + format + + + + + + + + maven-jar-plugin + + ${project.build.directory}/modules + + + benchmark.Main + + + + + + maven-dependency-plugin + + + copy-modules + package + + copy-dependencies + + + ${project.build.directory}/modules + runtime + + + + + + + + + + robaho + + false + + + + io.github.robaho + httpserver + + + + + jetty + + false + + + + org.eclipse.jetty + jetty-http-spi + 12.0.19 + + + + + \ No newline at end of file diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/DatabaseController.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/DatabaseController.java new file mode 100644 index 00000000000..295c01c01b7 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/DatabaseController.java @@ -0,0 +1,57 @@ +package benchmark; + +import benchmark.model.Fortune; +import benchmark.model.FortuneTemplate; +import benchmark.model.World; +import benchmark.repository.DbService; +import io.avaje.http.api.Controller; +import io.avaje.http.api.Get; +import java.sql.SQLException; +import java.util.List; + +@Controller +public class DatabaseController { + + private static final int MIN_QUERIES = 1; + private static final int MAX_QUERIES = 500; + + private final DbService dbService; + + public DatabaseController(DbService dbService) { + + this.dbService = dbService; + } + + @Get("/db") + public World handleSingleDbQuery() throws SQLException { + return dbService.getWorld(1).get(0); + } + + @Get("/queries") + public List handleMultipleDbQueries(String queries) throws SQLException { + int num = getBoundedRowNumber(queries); + return dbService.getWorld(num); + } + + @Get("/fortunes") + public FortuneTemplate handleFortunes() throws SQLException { + List fortuneList = dbService.getFortune(); + return new FortuneTemplate(fortuneList); + } + + @Get("/updates") + public List handleUpdates(String queries) throws SQLException { + int num = getBoundedRowNumber(queries); + return dbService.updateWorld(num); + } + + private static int getBoundedRowNumber(String number) { + int num; + try { + num = Integer.parseInt(number); + } catch (NumberFormatException e) { + num = MIN_QUERIES; + } + return Math.max(MIN_QUERIES, Math.min(num, MAX_QUERIES)); + } +} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/Main.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/Main.java new file mode 100644 index 00000000000..88666251bf5 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/Main.java @@ -0,0 +1,27 @@ +package benchmark; + +import io.avaje.inject.BeanScope; +import io.avaje.jex.Jex; +import io.avaje.jex.Routing.HttpService; +import io.avaje.jsonb.Jsonb; +import io.avaje.jsonb.Types; +import java.util.Map; + +public class Main { + + public static void main(String[] args) { + + var beans = BeanScope.builder().build(); + var routes = beans.list(HttpService.class); + var type = Jsonb.builder().build().type(Types.mapOf(String.class)); + + Jex.create() + .config(c -> c.compression().disableCompression()) + .get("/plaintext", ctx -> ctx.text("Hello, World!")) + .get("/json", ctx -> ctx.jsonb(type, Map.of("message", "Hello, World!"))) + .before(ctx -> ctx.header("Server", "avaje-jex")) + .error(Exception.class, (ctx, _) -> ctx.status(503).text("503 Service Unavailable")) + .routing(routes) + .start(); + } +} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/model/Fortune.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/model/Fortune.java new file mode 100644 index 00000000000..b582775b5e6 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/model/Fortune.java @@ -0,0 +1,6 @@ +package benchmark.model; + +import io.avaje.jsonb.Json; + +@Json +public record Fortune(int id, String message) {} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/model/FortuneTemplate.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/model/FortuneTemplate.java new file mode 100644 index 00000000000..6de30cc4730 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/model/FortuneTemplate.java @@ -0,0 +1,7 @@ +package benchmark.model; + +import io.jstach.jstache.JStache; +import java.util.List; + +@JStache(path = "fortunes.mustache") +public record FortuneTemplate(List fortunes) {} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/model/World.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/model/World.java new file mode 100644 index 00000000000..473d1bf6efd --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/model/World.java @@ -0,0 +1,38 @@ +package benchmark.model; + +import io.avaje.jsonb.Json; + +@Json +public class World { + + private int id; + private int randomNumber; + + public World() {} + + public World(int id, int randomNumber) { + this.id = id; + this.randomNumber = randomNumber; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getRandomNumber() { + return randomNumber; + } + + public void setRandomNumber(int randomNumber) { + this.randomNumber = randomNumber; + } + + @Override + public String toString() { + return "World{" + "id=" + id + ", randomNumber=" + randomNumber + '}'; + } +} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/DbService.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/DbService.java new file mode 100644 index 00000000000..551268734e2 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/DbService.java @@ -0,0 +1,33 @@ +package benchmark.repository; + +import benchmark.model.Fortune; +import benchmark.model.World; +import java.sql.SQLException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + +public interface DbService { + + int MIN_RANDOM_NUMBER = 1; + int MAX_RANDOM_NUMBER_PLUS_ONE = 10001; + int defaultFortuneId = 0; + String defaultFortuneMessage = "Additional fortune added at request time."; + + List getWorld(int num) throws SQLException; + + List getFortune() throws SQLException; + + List updateWorld(int num) throws SQLException; + + default int getRandomNumber() { + return ThreadLocalRandom.current().nextInt(MIN_RANDOM_NUMBER, MAX_RANDOM_NUMBER_PLUS_ONE); + } + + default Set getRandomNumberSet(int num) { + Set set = new HashSet<>(); + while (set.size() < num) set.add(getRandomNumber()); + return set; + } +} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/HikariFactory.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/HikariFactory.java new file mode 100644 index 00000000000..6b38d6f14a2 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/HikariFactory.java @@ -0,0 +1,29 @@ +package benchmark.repository; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import io.avaje.config.Config; +import io.avaje.inject.Bean; +import io.avaje.inject.Factory; +import javax.sql.DataSource; + +@Factory +public class HikariFactory { + + @Bean + DataSource dataSource() { + int maxPoolSize; + var env = System.getenv("BENCHMARK_ENV"); + if (Config.get("physicalTag").equals(env)) { + maxPoolSize = Config.getInt("postgresPhysicalPoolSize"); + } else if (Config.get("cloudTag").equals(env)) { + maxPoolSize = Config.getInt("postgresCloudPoolSize"); + } else { + maxPoolSize = Config.getInt("postgresDefaultPoolSize"); + } + + var hikari = new HikariDataSource(new HikariConfig("hikari.properties")); + hikari.setMaximumPoolSize(maxPoolSize); + return hikari; + } +} diff --git a/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/JDBCDbService.java b/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/JDBCDbService.java new file mode 100644 index 00000000000..a4d790d717d --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/benchmark/repository/JDBCDbService.java @@ -0,0 +1,95 @@ +package benchmark.repository; + +import benchmark.model.Fortune; +import benchmark.model.World; +import jakarta.inject.Singleton; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import javax.sql.DataSource; + +@Singleton +public class JDBCDbService implements DbService { + + private final DataSource datasource; + + public JDBCDbService(DataSource connectionFactory) { + this.datasource = connectionFactory; + } + + @Override + public List getWorld(int num) { + + String select = "select id, randomNumber from World where id = ?"; + List worldList = new ArrayList<>(); + + try (Connection conn = datasource.getConnection(); + PreparedStatement pstm = conn.prepareStatement(select)) { + + for (int randomId : getRandomNumberSet(num)) { + pstm.setInt(1, randomId); + try (ResultSet rs = pstm.executeQuery()) { + rs.next(); + worldList.add(new World(rs.getInt("id"), rs.getInt("randomNumber"))); + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + + return worldList; + } + + @Override + public List getFortune() throws SQLException { + + String select = "select id, message from Fortune"; + List fortuneList = new ArrayList<>(); + + try (Connection conn = datasource.getConnection(); + PreparedStatement pstm = conn.prepareStatement(select); + ResultSet rs = pstm.executeQuery()) { + + while (rs.next()) { + fortuneList.add(new Fortune(rs.getInt("id"), rs.getString("message"))); + } + fortuneList.add(new Fortune(defaultFortuneId, defaultFortuneMessage)); + } + + fortuneList.sort(Comparator.comparing(Fortune::message)); + return fortuneList; + } + + @Override + public List updateWorld(int num) throws SQLException { + + String update = "update World set randomNumber = ? where id = ?"; + List worldList = getWorld(num); + + try (Connection conn = datasource.getConnection(); + PreparedStatement pstm = conn.prepareStatement(update)) { + + conn.setAutoCommit(false); + for (World world : worldList) { + int newRandomNumber; + do { + newRandomNumber = getRandomNumber(); + } while (newRandomNumber == world.getRandomNumber()); + + pstm.setInt(1, newRandomNumber); + pstm.setInt(2, world.getId()); + pstm.addBatch(); + + world.setRandomNumber(newRandomNumber); + } + pstm.executeBatch(); + conn.commit(); + } + + return worldList; + } +} diff --git a/frameworks/Java/avaje-jex/src/main/java/module-info.java b/frameworks/Java/avaje-jex/src/main/java/module-info.java new file mode 100644 index 00000000000..342462fdb08 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/java/module-info.java @@ -0,0 +1,19 @@ +module avaje.techempower { + // jdk.httpserver wrapper + requires jdk.httpserver; + requires io.avaje.jex; + /// Postgres driver and pool + requires java.sql; + requires org.postgresql.jdbc; + requires com.zaxxer.hikari; + // template engine + requires io.jstach.jstachio; + /// Configuration + requires io.avaje.config; + // controller generation + requires io.avaje.http.api; + /// Dependency Injection + requires io.avaje.inject; + /// Json + requires io.avaje.jsonb; +} diff --git a/frameworks/Java/avaje-jex/src/main/resources/application.properties b/frameworks/Java/avaje-jex/src/main/resources/application.properties new file mode 100644 index 00000000000..804296ecc89 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/resources/application.properties @@ -0,0 +1,6 @@ +physicalTag=Citrine +cloudTag=Azure + +postgresPhysicalPoolSize=56 +postgresCloudPoolSize=16 +postgresDefaultPoolSize=10 \ No newline at end of file diff --git a/frameworks/Java/avaje-jex/src/main/resources/fortunes.mustache b/frameworks/Java/avaje-jex/src/main/resources/fortunes.mustache new file mode 100644 index 00000000000..ec4599da71f --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/resources/fortunes.mustache @@ -0,0 +1,20 @@ + + + + Fortunes + + + + + + + + {{#fortunes}} + + + + + {{/fortunes}} +
idmessage
{{id}}{{message}}
+ + \ No newline at end of file diff --git a/frameworks/Java/avaje-jex/src/main/resources/hikari.properties b/frameworks/Java/avaje-jex/src/main/resources/hikari.properties new file mode 100644 index 00000000000..f859c5a8763 --- /dev/null +++ b/frameworks/Java/avaje-jex/src/main/resources/hikari.properties @@ -0,0 +1,7 @@ +dataSourceClassName=org.postgresql.ds.PGSimpleDataSource +dataSource.serverName=tfb-database +dataSource.portNumber=5432 +dataSource.user=benchmarkdbuser +dataSource.password=benchmarkdbpass +dataSource.databaseName=hello_world +