Browse Source

Update http4k, Kotlin and add missing Helidon implementations (#8310)

* v5 upgrade and new versions

* upgrade http4k library

* bump to retrigger

* use java 17 instead of java 19 for building

* use java 17 for graalvm

* use JettyLoom server from http4k instead of custom one

* downgrade to j17 to try and get things working

* Upgrade http4k, Kotlin. Add missing helidon server implementation.

* converting build to kotlin gradle

* converting build to kotlin gradle

* user java 17 for graalvm

* convert gradle to kotlin

* fix package name for graalvm implementaions

* use correct toolchains for frameworks

* fix package name of helidon server

* tweak gradle setup

* add add checks to all frameworks

* remove fortunes from GraalVM implementations

* fix missing database in netty implementation
David Denton 2 years ago
parent
commit
abfc695878
62 changed files with 506 additions and 448 deletions
  1. 0 20
      frameworks/Kotlin/http4k/apache-graalvm/build.gradle
  2. 20 0
      frameworks/Kotlin/http4k/apache-graalvm/build.gradle.kts
  3. 0 7
      frameworks/Kotlin/http4k/apache-graalvm/src/main/kotlin/http4k/Http4kGraalVMBenchmarkServer.kt
  4. 0 14
      frameworks/Kotlin/http4k/apache/build.gradle
  5. 6 0
      frameworks/Kotlin/http4k/apache/build.gradle.kts
  6. 0 14
      frameworks/Kotlin/http4k/apache4/build.gradle
  7. 6 0
      frameworks/Kotlin/http4k/apache4/build.gradle.kts
  8. 72 23
      frameworks/Kotlin/http4k/benchmark_config.json
  9. 0 32
      frameworks/Kotlin/http4k/build.gradle
  10. 35 0
      frameworks/Kotlin/http4k/build.gradle.kts
  11. 62 62
      frameworks/Kotlin/http4k/config.toml
  12. 0 0
      frameworks/Kotlin/http4k/core-jdbc/build.gradle.kts
  13. 1 1
      frameworks/Kotlin/http4k/core-pgclient/build.gradle.kts
  14. 8 7
      frameworks/Kotlin/http4k/core/build.gradle.kts
  15. 0 20
      frameworks/Kotlin/http4k/graalvm/build.gradle
  16. 20 0
      frameworks/Kotlin/http4k/graalvm/build.gradle.kts
  17. 0 5
      frameworks/Kotlin/http4k/graalvm/src/main/kotlin/http4k/Http4kGraalVMBenchmarkServer.kt
  18. 2 1
      frameworks/Kotlin/http4k/gradle/wrapper/gradle-wrapper.properties
  19. 0 14
      frameworks/Kotlin/http4k/helidon-jdbc/build.gradle
  20. 6 0
      frameworks/Kotlin/http4k/helidon-jdbc/build.gradle.kts
  21. 1 1
      frameworks/Kotlin/http4k/helidon-jdbc/src/main/kotlin/Http4kHelidonServer.kt
  22. 0 14
      frameworks/Kotlin/http4k/helidon-pgclient/build.gradle
  23. 6 0
      frameworks/Kotlin/http4k/helidon-pgclient/build.gradle.kts
  24. 1 1
      frameworks/Kotlin/http4k/helidon-pgclient/src/main/kotlin/Http4kHelidonServer.kt
  25. 5 5
      frameworks/Kotlin/http4k/http4k-apache-graalvm.dockerfile
  26. 3 3
      frameworks/Kotlin/http4k/http4k-apache.dockerfile
  27. 3 3
      frameworks/Kotlin/http4k/http4k-apache4.dockerfile
  28. 5 5
      frameworks/Kotlin/http4k/http4k-graalvm.dockerfile
  29. 64 4
      frameworks/Kotlin/http4k/http4k-helidon-jdbc.dockerfile
  30. 65 4
      frameworks/Kotlin/http4k/http4k-helidon-pgclient.dockerfile
  31. 3 3
      frameworks/Kotlin/http4k/http4k-jetty.dockerfile
  32. 3 3
      frameworks/Kotlin/http4k/http4k-jettyloom-jdbc.dockerfile
  33. 3 3
      frameworks/Kotlin/http4k/http4k-jettyloom-pgclient.dockerfile
  34. 3 3
      frameworks/Kotlin/http4k/http4k-ktorcio.dockerfile
  35. 3 3
      frameworks/Kotlin/http4k/http4k-ktornetty.dockerfile
  36. 3 3
      frameworks/Kotlin/http4k/http4k-netty.dockerfile
  37. 3 3
      frameworks/Kotlin/http4k/http4k-ratpack.dockerfile
  38. 3 3
      frameworks/Kotlin/http4k/http4k-sunhttploom.dockerfile
  39. 3 3
      frameworks/Kotlin/http4k/http4k-undertow.dockerfile
  40. 3 3
      frameworks/Kotlin/http4k/http4k.dockerfile
  41. 0 14
      frameworks/Kotlin/http4k/jetty/build.gradle
  42. 6 0
      frameworks/Kotlin/http4k/jetty/build.gradle.kts
  43. 0 14
      frameworks/Kotlin/http4k/jettyloom-jdbc/build.gradle
  44. 6 0
      frameworks/Kotlin/http4k/jettyloom-jdbc/build.gradle.kts
  45. 0 14
      frameworks/Kotlin/http4k/jettyloom-pgclient/build.gradle
  46. 6 0
      frameworks/Kotlin/http4k/jettyloom-pgclient/build.gradle.kts
  47. 0 14
      frameworks/Kotlin/http4k/ktorcio/build.gradle
  48. 6 0
      frameworks/Kotlin/http4k/ktorcio/build.gradle.kts
  49. 0 14
      frameworks/Kotlin/http4k/ktornetty/build.gradle
  50. 6 0
      frameworks/Kotlin/http4k/ktornetty/build.gradle.kts
  51. 0 14
      frameworks/Kotlin/http4k/netty/build.gradle
  52. 6 0
      frameworks/Kotlin/http4k/netty/build.gradle.kts
  53. 0 14
      frameworks/Kotlin/http4k/ratpack/build.gradle
  54. 6 0
      frameworks/Kotlin/http4k/ratpack/build.gradle.kts
  55. 0 20
      frameworks/Kotlin/http4k/settings.gradle
  56. 27 0
      frameworks/Kotlin/http4k/settings.gradle.kts
  57. 0 13
      frameworks/Kotlin/http4k/sunhttp/build.gradle
  58. 5 0
      frameworks/Kotlin/http4k/sunhttp/build.gradle.kts
  59. 0 13
      frameworks/Kotlin/http4k/sunhttploom/build.gradle
  60. 5 0
      frameworks/Kotlin/http4k/sunhttploom/build.gradle.kts
  61. 0 14
      frameworks/Kotlin/http4k/undertow/build.gradle
  62. 6 0
      frameworks/Kotlin/http4k/undertow/build.gradle.kts

+ 0 - 20
frameworks/Kotlin/http4k/apache-graalvm/build.gradle

@@ -1,20 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api(project(":apache"))
-}
-
-apply plugin: 'application'
-mainClassName = "http4k.Http4kGraalVMBenchmarkServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-jar {
-    manifest {
-        attributes 'Main-Class': mainClassName
-    }
-}
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 20 - 0
frameworks/Kotlin/http4k/apache-graalvm/build.gradle.kts

@@ -0,0 +1,20 @@
+application.mainClass.set("Http4kGraalVMBenchmarkServerKt")
+
+kotlin {
+    jvmToolchain {
+        languageVersion.set(JavaLanguageVersion.of(17))
+    }
+}
+
+dependencies {
+    api(project(":core-jdbc"))
+    api(project(":apache"))
+}
+
+tasks {
+    named<Jar>("jar") {
+        manifest {
+            attributes["Main-Class"] = "Http4kGraalVMBenchmarkServerKt"
+        }
+    }
+}

+ 0 - 7
frameworks/Kotlin/http4k/apache-graalvm/src/main/kotlin/http4k/Http4kGraalVMBenchmarkServer.kt

@@ -1,10 +1,3 @@
-package http4k
-
-import Http4kBenchmarkServer
-import PostgresDatabase
-import TfbApacheServer
-import start
-
 fun main() {
 fun main() {
     Http4kBenchmarkServer(PostgresDatabase()).start(TfbApacheServer(9000))
     Http4kBenchmarkServer(PostgresDatabase()).start(TfbApacheServer(9000))
 }
 }

+ 0 - 14
frameworks/Kotlin/http4k/apache/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-apache:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kApacheServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/apache/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kApacheServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-apache")
+}

+ 0 - 14
frameworks/Kotlin/http4k/apache4/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-pgclient"))
-    api("org.http4k:http4k-server-apache4:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kApache4ServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/apache4/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kApache4ServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-apache4")
+}

+ 72 - 23
frameworks/Kotlin/http4k/benchmark_config.json

@@ -7,12 +7,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -30,12 +30,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -53,12 +53,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -75,12 +75,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -97,11 +97,11 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -118,11 +118,11 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -134,17 +134,61 @@
         "notes": "https://http4k.org",
         "notes": "https://http4k.org",
         "versus": "servlet"
         "versus": "servlet"
       },
       },
-      "jetty": {
+      "helidon-jdbc": {
         "orm": "Raw",
         "orm": "Raw",
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
+        "port": 9000,
+        "approach": "Realistic",
+        "classification": "Micro",
+        "framework": "http4k",
+        "language": "Kotlin",
+        "platform": "helidon",
+        "webserver": "None",
+        "os": "Linux",
+        "notes": "https://http4k.org",
+        "versus": "helidon-pgclient"
+      },
+      "helidon-pgclient": {
+        "orm": "Raw",
+        "database_os": "Linux",
+        "cached_query_url": "/cached?queries=",
+        "db_url": "/db",
         "json_url": "/json",
         "json_url": "/json",
+        "fortune_url": "/fortunes",
         "plaintext_url": "/plaintext",
         "plaintext_url": "/plaintext",
+        "query_url": "/queries?queries=",
+        "update_url": "/updates?queries=",
+        "database": "Postgres",
+        "port": 9000,
+        "approach": "Realistic",
+        "classification": "Micro",
+        "framework": "http4k",
+        "language": "Kotlin",
+        "platform": "helidon-pgclient",
+        "webserver": "None",
+        "os": "Linux",
+        "notes": "https://http4k.org",
+        "versus": "helidon-jdbc"
+      },
+      "jetty": {
+        "orm": "Raw",
+        "database_os": "Linux",
+        "cached_query_url": "/cached?queries=",
+        "db_url": "/db",
+        "json_url": "/json",
+        "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
+        "query_url": "/queries?queries=",
+        "update_url": "/updates?queries=",
+        "database": "Postgres",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -161,7 +205,9 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
@@ -181,7 +227,9 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
@@ -200,13 +248,14 @@
         "orm": "Raw",
         "orm": "Raw",
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
+        "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -224,12 +273,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -246,12 +295,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -268,12 +317,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",
@@ -290,12 +339,12 @@
         "database_os": "Linux",
         "database_os": "Linux",
         "cached_query_url": "/cached?queries=",
         "cached_query_url": "/cached?queries=",
         "db_url": "/db",
         "db_url": "/db",
+        "json_url": "/json",
         "fortune_url": "/fortunes",
         "fortune_url": "/fortunes",
+        "plaintext_url": "/plaintext",
         "query_url": "/queries?queries=",
         "query_url": "/queries?queries=",
         "update_url": "/updates?queries=",
         "update_url": "/updates?queries=",
         "database": "Postgres",
         "database": "Postgres",
-        "json_url": "/json",
-        "plaintext_url": "/plaintext",
         "port": 9000,
         "port": 9000,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Micro",
         "classification": "Micro",

+ 0 - 32
frameworks/Kotlin/http4k/build.gradle

@@ -1,32 +0,0 @@
-buildscript {
-    ext.kotlin_version = "1.8.22"
-    ext.http4k_version = "5.1.1.1"
-
-    repositories {
-        mavenCentral()
-        gradlePluginPortal()
-    }
-
-    dependencies {
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-        classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0'
-    }
-}
-
-allprojects {
-    repositories {
-        mavenCentral()
-    }
-
-    apply plugin: "kotlin"
-
-    compileKotlin.kotlinOptions.jvmTarget = "17"
-
-    sourceCompatibility = JavaVersion.VERSION_17
-    targetCompatibility = JavaVersion.VERSION_17
-
-    version = project.hasProperty('releaseVersion') ? project.releaseVersion : 'LOCAL'
-    group = 'org.http4k'
-
-    compileTestKotlin.kotlinOptions.languageVersion = "1.8"
-}

+ 35 - 0
frameworks/Kotlin/http4k/build.gradle.kts

@@ -0,0 +1,35 @@
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+
+plugins {
+    kotlin("jvm") version "1.9.0"
+    application
+}
+
+buildscript {
+    repositories {
+        mavenCentral()
+        gradlePluginPortal()
+    }
+
+    dependencies {
+        classpath("com.github.johnrengelman:shadow:8.1.1")
+    }
+}
+
+allprojects {
+    apply(plugin = "kotlin")
+    apply(plugin = "com.github.johnrengelman.shadow")
+    apply(plugin = "application")
+
+    repositories {
+        mavenCentral()
+    }
+
+    tasks {
+        named<ShadowJar>("shadowJar") {
+            archiveBaseName.set("http4k-benchmark")
+            archiveClassifier.set("")
+            archiveVersion.set("")
+        }
+    }
+}

+ 62 - 62
frameworks/Kotlin/http4k/config.toml

@@ -2,13 +2,13 @@
 name = "http4k"
 name = "http4k"
 
 
 [netty]
 [netty]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -20,13 +20,13 @@ webserver = "None"
 versus = "netty"
 versus = "netty"
 
 
 [undertow]
 [undertow]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -38,13 +38,13 @@ webserver = "None"
 versus = "undertow"
 versus = "undertow"
 
 
 [ktornetty]
 [ktornetty]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -56,13 +56,13 @@ webserver = "None"
 versus = "ktor-netty"
 versus = "ktor-netty"
 
 
 [main]
 [main]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -74,13 +74,13 @@ webserver = "None"
 versus = "servlet"
 versus = "servlet"
 
 
 [sunhttploom]
 [sunhttploom]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -92,13 +92,13 @@ webserver = "None"
 versus = "servlet"
 versus = "servlet"
 
 
 [apache4]
 [apache4]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -110,13 +110,13 @@ webserver = "None"
 versus = "servlet"
 versus = "servlet"
 
 
 [jetty]
 [jetty]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -128,13 +128,13 @@ webserver = "None"
 versus = "jetty"
 versus = "jetty"
 
 
 [jettyloom-jdbc]
 [jettyloom-jdbc]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -146,13 +146,13 @@ webserver = "None"
 versus = "jetty"
 versus = "jetty"
 
 
 [jettyloom-pgclient]
 [jettyloom-pgclient]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -164,13 +164,13 @@ webserver = "None"
 versus = "jetty"
 versus = "jetty"
 
 
 [helidon-jdbc]
 [helidon-jdbc]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -182,13 +182,13 @@ webserver = "None"
 versus = "helidon-nima"
 versus = "helidon-nima"
 
 
 [helidon-pgclient]
 [helidon-pgclient]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -200,13 +200,13 @@ webserver = "None"
 versus = "helidon-nima"
 versus = "helidon-nima"
 
 
 [apache]
 [apache]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -218,12 +218,12 @@ webserver = "None"
 versus = "servlet"
 versus = "servlet"
 
 
 [apache-graalvm]
 [apache-graalvm]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -235,12 +235,12 @@ webserver = "None"
 versus = "servlet"
 versus = "servlet"
 
 
 [graalvm]
 [graalvm]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -252,13 +252,13 @@ webserver = "None"
 versus = "servlet"
 versus = "servlet"
 
 
 [ktorcio]
 [ktorcio]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"
@@ -270,13 +270,13 @@ webserver = "None"
 versus = "ktor-cio"
 versus = "ktor-cio"
 
 
 [ratpack]
 [ratpack]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
+urls.cached_query = "/cached?queries="
 urls.db = "/db"
 urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.json = "/json"
+urls.plaintext = "/plaintext"
 urls.query = "/queries?queries="
 urls.query = "/queries?queries="
 urls.update = "/updates?queries="
 urls.update = "/updates?queries="
-urls.fortune = "/fortunes"
-urls.cached_query = "/cached?queries="
 approach = "Realistic"
 approach = "Realistic"
 classification = "Micro"
 classification = "Micro"
 database = "Postgres"
 database = "Postgres"

+ 0 - 0
frameworks/Kotlin/http4k/core-jdbc/build.gradle → frameworks/Kotlin/http4k/core-jdbc/build.gradle.kts


+ 1 - 1
frameworks/Kotlin/http4k/core-pgclient/build.gradle → frameworks/Kotlin/http4k/core-pgclient/build.gradle.kts

@@ -1,4 +1,4 @@
 dependencies {
 dependencies {
     api(project(":core"))
     api(project(":core"))
-    api('io.vertx:vertx-pg-client:4.3.4')
+    api("io.vertx:vertx-pg-client:4.4.4")
 }
 }

+ 8 - 7
frameworks/Kotlin/http4k/core/build.gradle → frameworks/Kotlin/http4k/core/build.gradle.kts

@@ -1,14 +1,15 @@
 plugins {
 plugins {
-    id 'nu.studer.rocker' version '3.0.4'
-    id 'java'
+    id("nu.studer.rocker") version "3.0.4"
+    id("java")
 }
 }
 
 
 dependencies {
 dependencies {
-    api("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
-    api("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
-    api("org.http4k:http4k-core:$http4k_version")
-    api("org.http4k:http4k-format-argo:$http4k_version")
-    api("org.http4k:http4k-template-rocker:$http4k_version")
+    api(platform("org.http4k:http4k-bom:5.2.1.0"))
+    api("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")
+    api("org.jetbrains.kotlin:kotlin-reflect:1.9.0")
+    api("org.http4k:http4k-core")
+    api("org.http4k:http4k-format-argo")
+    api("org.http4k:http4k-template-rocker")
     api("org.apache.commons:commons-lang3:3.12.0")
     api("org.apache.commons:commons-lang3:3.12.0")
     api("org.cache2k:cache2k-core:2.6.1.Final")
     api("org.cache2k:cache2k-core:2.6.1.Final")
 
 

+ 0 - 20
frameworks/Kotlin/http4k/graalvm/build.gradle

@@ -1,20 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api(project(":sunhttp"))
-}
-
-apply plugin: 'application'
-mainClassName = "http4k.Http4kGraalVMBenchmarkServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-jar {
-    manifest {
-        attributes 'Main-Class': mainClassName
-    }
-}
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 20 - 0
frameworks/Kotlin/http4k/graalvm/build.gradle.kts

@@ -0,0 +1,20 @@
+application.mainClass.set("Http4kGraalVMBenchmarkServerKt")
+
+kotlin {
+    jvmToolchain {
+        languageVersion.set(JavaLanguageVersion.of(17))
+    }
+}
+
+dependencies {
+    api(project(":core-jdbc"))
+    api(project(":sunhttp"))
+}
+
+tasks {
+    named<Jar>("jar") {
+        manifest {
+            attributes["Main-Class"] = "Http4kGraalVMBenchmarkServerKt"
+        }
+    }
+}

+ 0 - 5
frameworks/Kotlin/http4k/graalvm/src/main/kotlin/http4k/Http4kGraalVMBenchmarkServer.kt

@@ -1,9 +1,4 @@
-package http4k
-
-import Http4kBenchmarkServer
-import PostgresDatabase
 import org.http4k.server.SunHttp
 import org.http4k.server.SunHttp
-import start
 
 
 fun main() {
 fun main() {
     Http4kBenchmarkServer(PostgresDatabase()).start(SunHttp(9000))
     Http4kBenchmarkServer(PostgresDatabase()).start(SunHttp(9000))

+ 2 - 1
frameworks/Kotlin/http4k/gradle/wrapper/gradle-wrapper.properties

@@ -1,5 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
+networkTimeout=10000
 zipStoreBase=GRADLE_USER_HOME
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
 zipStorePath=wrapper/dists

+ 0 - 14
frameworks/Kotlin/http4k/helidon-jdbc/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-helidon:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kHelidonServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/helidon-jdbc/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kHelidonServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-helidon")
+}

+ 1 - 1
frameworks/Kotlin/http4k/helidon-jdbc/src/main/kotlin/Http4kHelidonServer.kt

@@ -1,5 +1,5 @@
 import org.http4k.server.Helidon
 import org.http4k.server.Helidon
 
 
 fun main() {
 fun main() {
-    Http4kBenchmarkServer(PostgresDatabase(), false).start(Helidon(9000))
+    Http4kBenchmarkServer(PostgresDatabase(), true).start(Helidon(9000))
 }
 }

+ 0 - 14
frameworks/Kotlin/http4k/helidon-pgclient/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-pgclient"))
-    api("org.http4k:http4k-server-helidon:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kHelidonServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/helidon-pgclient/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kHelidonServerKt")
+
+dependencies {
+    api(project(":core-pgclient"))
+    api("org.http4k:http4k-server-helidon")
+}

+ 1 - 1
frameworks/Kotlin/http4k/helidon-pgclient/src/main/kotlin/Http4kHelidonServer.kt

@@ -1,5 +1,5 @@
 import org.http4k.server.Helidon
 import org.http4k.server.Helidon
 
 
 fun main() {
 fun main() {
-    Http4kBenchmarkServer(PostgresDatabase(), false).start(Helidon(9000))
+    Http4kBenchmarkServer(PostgresDatabase(), true).start(Helidon(9000))
 }
 }

+ 5 - 5
frameworks/Kotlin/http4k/http4k-apache-graalvm.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19 as gradle
+FROM gradle:8.0.2-jdk17 as gradle
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY apache apache
 COPY apache apache
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
@@ -24,10 +24,10 @@ RUN native-image \
     -H:ReflectionConfigurationFiles=reflect-config.json \
     -H:ReflectionConfigurationFiles=reflect-config.json \
     -H:ResourceConfigurationFiles=resource-config.json \
     -H:ResourceConfigurationFiles=resource-config.json \
     --initialize-at-build-time="org.slf4j.LoggerFactory,org.slf4j.simple.SimpleLogger,org.slf4j.impl.StaticLoggerBinder" \
     --initialize-at-build-time="org.slf4j.LoggerFactory,org.slf4j.simple.SimpleLogger,org.slf4j.impl.StaticLoggerBinder" \
-    --no-fallback -cp http4k-benchmark.jar http4k.Http4kGraalVMBenchmarkServerKt
+    --no-fallback -cp http4k-benchmark.jar Http4kGraalVMBenchmarkServerKt
 
 
 FROM frolvlad/alpine-glibc:glibc-2.34
 FROM frolvlad/alpine-glibc:glibc-2.34
 RUN apk update && apk add libstdc++
 RUN apk update && apk add libstdc++
 EXPOSE 9000
 EXPOSE 9000
-COPY --from=graalvm /home/app/http4k-apache-graalvm/http4k.http4kgraalvmbenchmarkserverkt /app/http4k-apache-graalvm
+COPY --from=graalvm /home/app/http4k-apache-graalvm/http4kgraalvmbenchmarkserverkt /app/http4k-apache-graalvm
 ENTRYPOINT ["/app/http4k-apache-graalvm"]
 ENTRYPOINT ["/app/http4k-apache-graalvm"]

+ 3 - 3
frameworks/Kotlin/http4k/http4k-apache.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY apache apache
 COPY apache apache
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc

+ 3 - 3
frameworks/Kotlin/http4k/http4k-apache4.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY apache4 apache4
 COPY apache4 apache4
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc

+ 5 - 5
frameworks/Kotlin/http4k/http4k-graalvm.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19 as gradle
+FROM gradle:8.0.2-jdk17 as gradle
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient
@@ -24,10 +24,10 @@ RUN native-image \
     -H:ReflectionConfigurationFiles=reflect-config.json \
     -H:ReflectionConfigurationFiles=reflect-config.json \
     -H:ResourceConfigurationFiles=resource-config.json \
     -H:ResourceConfigurationFiles=resource-config.json \
     --initialize-at-build-time="org.slf4j.LoggerFactory,org.slf4j.simple.SimpleLogger,org.slf4j.impl.StaticLoggerBinder" \
     --initialize-at-build-time="org.slf4j.LoggerFactory,org.slf4j.simple.SimpleLogger,org.slf4j.impl.StaticLoggerBinder" \
-    --no-fallback -cp http4k-benchmark.jar http4k.Http4kGraalVMBenchmarkServerKt
+    --no-fallback -cp http4k-benchmark.jar Http4kGraalVMBenchmarkServerKt
 
 
 FROM frolvlad/alpine-glibc:glibc-2.34
 FROM frolvlad/alpine-glibc:glibc-2.34
 RUN apk update && apk add libstdc++
 RUN apk update && apk add libstdc++
 EXPOSE 9000
 EXPOSE 9000
-COPY --from=graalvm /home/app/http4k-graalvm/http4k.http4kgraalvmbenchmarkserverkt /app/http4k-graalvm
+COPY --from=graalvm /home/app/http4k-graalvm/http4kgraalvmbenchmarkserverkt /app/http4k-graalvm
 ENTRYPOINT ["/app/http4k-graalvm"]
 ENTRYPOINT ["/app/http4k-graalvm"]

+ 64 - 4
frameworks/Kotlin/http4k/http4k-helidon-jdbc.dockerfile

@@ -1,8 +1,68 @@
-FROM gradle:7.6-jdk19
+# START: Manually build gradle with Java 20 due to missing image
+FROM eclipse-temurin:20-jdk-jammy
+CMD ["gradle"]
+
+ENV GRADLE_HOME /opt/gradle
+
+RUN set -o errexit -o nounset \
+    && echo "Adding gradle user and group" \
+    && groupadd --system --gid 1000 gradle \
+    && useradd --system --gid gradle --uid 1000 --shell /bin/bash --create-home gradle \
+    && mkdir /home/gradle/.gradle \
+    && chown --recursive gradle:gradle /home/gradle \
+    \
+    && echo "Symlinking root Gradle cache to gradle Gradle cache" \
+    && ln --symbolic /home/gradle/.gradle /root/.gradle
+
+VOLUME /home/gradle/.gradle
+
+WORKDIR /home/gradle
+
+RUN set -o errexit -o nounset \
+    && apt-get update \
+    && apt-get install --yes --no-install-recommends \
+        unzip \
+        wget \
+        \
+        bzr \
+        git \
+        git-lfs \
+        mercurial \
+        openssh-client \
+        subversion \
+    && rm --recursive --force /var/lib/apt/lists/* \
+    \
+    && echo "Testing VCSes" \
+    && which bzr \
+    && which git \
+    && which git-lfs \
+    && which hg \
+    && which svn
+
+ENV GRADLE_VERSION 8.2
+ARG GRADLE_DOWNLOAD_SHA256=38f66cd6eef217b4c35855bb11ea4e9fbc53594ccccb5fb82dfd317ef8c2c5a3
+RUN set -o errexit -o nounset \
+    && echo "Downloading Gradle" \
+    && wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \
+    \
+    && echo "Checking download hash" \
+    && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum --check - \
+    \
+    && echo "Installing Gradle" \
+    && unzip gradle.zip \
+    && rm gradle.zip \
+    && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \
+    && ln --symbolic "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle \
+    \
+    && echo "Testing Gradle installation" \
+    && gradle --version
+# END: Manually build gradle with Java 20 due to missing image
+
+# FROM gradle:8.2.0-jdk20
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient
@@ -11,4 +71,4 @@ RUN gradle --quiet --no-daemon helidon-jdbc:shadowJar
 
 
 EXPOSE 9000
 EXPOSE 9000
 
 
-CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "helidon-jdbc/build/libs/http4k-benchmark.jar"]
+CMD ["java", "-server", "-XX:+UseNUMA", "--enable-preview", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "helidon-jdbc/build/libs/http4k-benchmark.jar"]

+ 65 - 4
frameworks/Kotlin/http4k/http4k-helidon-pgclient.dockerfile

@@ -1,8 +1,69 @@
-FROM gradle:7.6-jdk19
+# START: Manually build gradle with Java 20 due to missing image
+FROM eclipse-temurin:20-jdk-jammy
+
+CMD ["gradle"]
+
+ENV GRADLE_HOME /opt/gradle
+
+RUN set -o errexit -o nounset \
+    && echo "Adding gradle user and group" \
+    && groupadd --system --gid 1000 gradle \
+    && useradd --system --gid gradle --uid 1000 --shell /bin/bash --create-home gradle \
+    && mkdir /home/gradle/.gradle \
+    && chown --recursive gradle:gradle /home/gradle \
+    \
+    && echo "Symlinking root Gradle cache to gradle Gradle cache" \
+    && ln --symbolic /home/gradle/.gradle /root/.gradle
+
+VOLUME /home/gradle/.gradle
+
+WORKDIR /home/gradle
+
+RUN set -o errexit -o nounset \
+    && apt-get update \
+    && apt-get install --yes --no-install-recommends \
+        unzip \
+        wget \
+        \
+        bzr \
+        git \
+        git-lfs \
+        mercurial \
+        openssh-client \
+        subversion \
+    && rm --recursive --force /var/lib/apt/lists/* \
+    \
+    && echo "Testing VCSes" \
+    && which bzr \
+    && which git \
+    && which git-lfs \
+    && which hg \
+    && which svn
+
+ENV GRADLE_VERSION 8.2
+ARG GRADLE_DOWNLOAD_SHA256=38f66cd6eef217b4c35855bb11ea4e9fbc53594ccccb5fb82dfd317ef8c2c5a3
+RUN set -o errexit -o nounset \
+    && echo "Downloading Gradle" \
+    && wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \
+    \
+    && echo "Checking download hash" \
+    && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum --check - \
+    \
+    && echo "Installing Gradle" \
+    && unzip gradle.zip \
+    && rm gradle.zip \
+    && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \
+    && ln --symbolic "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle \
+    \
+    && echo "Testing Gradle installation" \
+    && gradle --version
+# END: Manually build gradle with Java 20 due to missing image
+
+# FROM gradle:8.2.0-jdk20
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient
@@ -11,4 +72,4 @@ RUN gradle --quiet --no-daemon helidon-pgclient:shadowJar
 
 
 EXPOSE 9000
 EXPOSE 9000
 
 
-CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "helidon-pgclient/build/libs/http4k-benchmark.jar"]
+CMD ["java", "-server", "-XX:+UseNUMA", "--enable-preview", "-XX:+UseParallelGC", "-XX:+AlwaysPreTouch", "-jar", "helidon-pgclient/build/libs/http4k-benchmark.jar"]

+ 3 - 3
frameworks/Kotlin/http4k/http4k-jetty.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k-jettyloom-jdbc.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY jettyloom-jdbc jettyloom-jdbc
 COPY jettyloom-jdbc jettyloom-jdbc

+ 3 - 3
frameworks/Kotlin/http4k/http4k-jettyloom-pgclient.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient
 COPY jettyloom-pgclient jettyloom-pgclient
 COPY jettyloom-pgclient jettyloom-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k-ktorcio.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k-ktornetty.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k-netty.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k-ratpack.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k-sunhttploom.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient
 COPY sunhttploom sunhttploom
 COPY sunhttploom sunhttploom

+ 3 - 3
frameworks/Kotlin/http4k/http4k-undertow.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 3 - 3
frameworks/Kotlin/http4k/http4k.dockerfile

@@ -1,8 +1,8 @@
-FROM gradle:7.6-jdk19
+FROM gradle:8.0.2-jdk19
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
-COPY build.gradle build.gradle
-COPY settings.gradle settings.gradle
+COPY build.gradle.kts build.gradle.kts
+COPY settings.gradle.kts settings.gradle.kts
 COPY core core
 COPY core core
 COPY core-jdbc core-jdbc
 COPY core-jdbc core-jdbc
 COPY core-pgclient core-pgclient
 COPY core-pgclient core-pgclient

+ 0 - 14
frameworks/Kotlin/http4k/jetty/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-pgclient"))
-    api("org.http4k:http4k-server-jetty:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kJettyServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/jetty/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kJettyServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-jetty")
+}

+ 0 - 14
frameworks/Kotlin/http4k/jettyloom-jdbc/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-jetty:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kJettyLoomServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/jettyloom-jdbc/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kJettyLoomServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-jetty")
+}

+ 0 - 14
frameworks/Kotlin/http4k/jettyloom-pgclient/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-pgclient"))
-    api("org.http4k:http4k-server-jetty:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kJettyLoomServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/jettyloom-pgclient/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kJettyLoomServerKt")
+
+dependencies {
+    api(project(":core-pgclient"))
+    api("org.http4k:http4k-server-jetty")
+}

+ 0 - 14
frameworks/Kotlin/http4k/ktorcio/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-ktorcio:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kKtorCIOServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/ktorcio/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kKtorCIOServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-ktorcio")
+}

+ 0 - 14
frameworks/Kotlin/http4k/ktornetty/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-ktornetty:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kKtorNettyServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/ktornetty/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kKtorNettyServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-ktornetty")
+}

+ 0 - 14
frameworks/Kotlin/http4k/netty/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-netty:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kNettyServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/netty/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kNettyServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-netty")
+}

+ 0 - 14
frameworks/Kotlin/http4k/ratpack/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-ratpack:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kRatpackServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/ratpack/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kRatpackServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-ratpack")
+}

+ 0 - 20
frameworks/Kotlin/http4k/settings.gradle

@@ -1,20 +0,0 @@
-rootProject.name = 'http4k-benchmark'
-include 'core'
-include 'core-jdbc'
-include 'core-pgclient'
-include 'apache'
-include 'apache-graalvm'
-include 'apache4'
-include 'graalvm'
-include 'jetty'
-include 'jettyloom-jdbc'
-include 'jettyloom-pgclient'
-include 'helidon-jdbc'
-include 'helidon-pgclient'
-include 'ktorcio'
-include 'ktornetty'
-include 'netty'
-include 'ratpack'
-include 'sunhttp'
-include 'sunhttploom'
-include 'undertow'

+ 27 - 0
frameworks/Kotlin/http4k/settings.gradle.kts

@@ -0,0 +1,27 @@
+pluginManagement {
+    repositories {
+        mavenCentral()
+        gradlePluginPortal()
+    }
+}
+
+rootProject.name = "http4k-benchmark"
+include("core")
+include("core-jdbc")
+include("core-pgclient")
+include("apache")
+include("apache-graalvm")
+include("apache4")
+include("graalvm")
+include("jetty")
+include("jettyloom-jdbc")
+include("jettyloom-pgclient")
+include("helidon-jdbc")
+include("helidon-pgclient")
+include("ktorcio")
+include("ktornetty")
+include("netty")
+include("ratpack")
+include("sunhttp")
+include("sunhttploom")
+include("undertow")

+ 0 - 13
frameworks/Kotlin/http4k/sunhttp/build.gradle

@@ -1,13 +0,0 @@
-dependencies {
-    api(project(":core-pgclient"))
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kSunHttpServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 5 - 0
frameworks/Kotlin/http4k/sunhttp/build.gradle.kts

@@ -0,0 +1,5 @@
+application.mainClass.set("Http4kSunHttpServerKt")
+
+dependencies {
+    api(project(":core-pgclient"))
+}

+ 0 - 13
frameworks/Kotlin/http4k/sunhttploom/build.gradle

@@ -1,13 +0,0 @@
-dependencies {
-    api(project(":core-pgclient"))
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kSunHttpServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 5 - 0
frameworks/Kotlin/http4k/sunhttploom/build.gradle.kts

@@ -0,0 +1,5 @@
+application.mainClass.set("Http4kSunHttpServerKt")
+
+dependencies {
+    api(project(":core-pgclient"))
+}

+ 0 - 14
frameworks/Kotlin/http4k/undertow/build.gradle

@@ -1,14 +0,0 @@
-dependencies {
-    api(project(":core-jdbc"))
-    api("org.http4k:http4k-server-undertow:$http4k_version")
-}
-
-apply plugin: 'application'
-mainClassName = "Http4kUndertowServerKt"
-apply plugin: 'com.github.johnrengelman.shadow'
-
-shadowJar {
-    baseName = "http4k-benchmark"
-    classifier = null
-    version = null
-}

+ 6 - 0
frameworks/Kotlin/http4k/undertow/build.gradle.kts

@@ -0,0 +1,6 @@
+application.mainClass.set("Http4kUndertowServerKt")
+
+dependencies {
+    api(project(":core-jdbc"))
+    api("org.http4k:http4k-server-undertow")
+}