From 28981d5bdbe536bbe30c207a2a94de1c9d6bb231 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Wed, 11 Mar 2026 23:37:30 +0700 Subject: [PATCH 1/4] Add artifact upload step to build workflow Added step to upload build artifact after Gradle build. --- .github/workflows/build.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 63c3cde..53f7e77 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,4 +22,10 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Build with Gradle - run: ./gradlew build \ No newline at end of file + run: ./gradlew build + - name: Upload a Build Artifact + uses: actions/upload-artifact@v7.0.0 + with: + name: CreateTrainWebAPI + path: build/libs/*.jar + retention-days: 90 From 36b118b9d9bb037ef0135420d70c3fdc76ee6512 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Wed, 11 Mar 2026 23:41:04 +0700 Subject: [PATCH 2/4] fix: try to stop ApiServer from going into a RejectedExecutionException loop --- .../eu/cronmoth/createtrainwebapi/ApiServer.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java b/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java index 63d5d3f..2496e13 100644 --- a/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java +++ b/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java @@ -20,6 +20,7 @@ public class ApiServer { private Undertow server; + private ScheduledExecutorService scheduler; private ObjectMapper mapper = new ObjectMapper(); public void start(String host, int port, String trainModelPath) { @@ -37,7 +38,7 @@ public void start(String host, int port, String trainModelPath) { exchange.getResponseSender().send(mapper.writeValueAsString(TrackInformation.GetNetworkData())); }); - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4); + scheduler = Executors.newScheduledThreadPool(4); pathHandler.addExactPath("/trainsLive", exchange -> { @@ -50,6 +51,8 @@ public void start(String host, int port, String trainModelPath) { try { String update = mapper.writeValueAsString(TrackInformation.GetTrainData()); connection.send(update); + } catch (RejectedExecutionException e) { + // XNIO worker is shutting down, nothing to do } catch (Exception e) { e.printStackTrace(); } @@ -80,6 +83,11 @@ public void start(String host, int port, String trainModelPath) { server.start(); } public void stop() { - server.stop(); + if (scheduler != null) { + scheduler.shutdownNow(); + } + if (server != null) { + server.stop(); + } } } From 192c6f2a8c8c1e5592f3dfd099cb3d48652e107a Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Wed, 11 Mar 2026 23:47:54 +0700 Subject: [PATCH 3/4] Update Jackson Databind and related dependencies to 2.21.1 --- build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index d7d5c72..01e050a 100644 --- a/build.gradle +++ b/build.gradle @@ -181,14 +181,14 @@ dependencies { jarJar(implementation("com.fasterxml.jackson.core:jackson-databind")) { version { strictly '[2.0, 3.0)' - prefer '2.20.0' // The version actually used in your dev workspace + prefer '2.21.1' // The version actually used in your dev workspace } } - additionalRuntimeClasspath "com.fasterxml.jackson.core:jackson-databind:2.20.0" + additionalRuntimeClasspath "com.fasterxml.jackson.core:jackson-databind:2.21.1" jarJar(implementation("com.fasterxml.jackson.core:jackson-core")) { version { strictly '[2.0, 3.0)' - prefer '2.20.2' // Replace with the actual version in your workspace + prefer '2.21.1' // Replace with the actual version in your workspace } } additionalRuntimeClasspath "com.fasterxml.jackson.core:jackson-core" @@ -196,7 +196,7 @@ dependencies { jarJar(implementation("com.fasterxml.jackson.core:jackson-annotations")) { version { strictly '[2.0, 3.0)' - prefer '2.20.2' // Replace with the actual version in your workspace + prefer '2.21' // Replace with the actual version in your workspace } } additionalRuntimeClasspath "com.fasterxml.jackson.core:jackson-annotations" @@ -256,4 +256,4 @@ idea { } tasks.withType(Jar).configureEach { zip64 = true -} \ No newline at end of file +} From 886d975a742e70d4be81ff1016fe452f6af15ba3 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Wed, 11 Mar 2026 23:53:51 +0700 Subject: [PATCH 4/4] fix: add import for RejectedExecutionException --- src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java b/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java index 2496e13..b24e0a2 100644 --- a/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java +++ b/src/main/java/eu/cronmoth/createtrainwebapi/ApiServer.java @@ -17,6 +17,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.RejectedExecutionException; public class ApiServer { private Undertow server;