From de2c02b0186ab832d377bfd6ec2ee162e0949736 Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Mon, 3 Feb 2025 19:48:19 +0100
Subject: [PATCH] exit the xta-adapter by calling exit in a dedicated
 XtaApplication class

closing the ApplicationContext during event handling leads to an IllegalStateException
---
 pom.xml                                       |  2 +-
 .../ozgcloud/eingang/xta/ShutdownService.java | 16 -------
 .../ozgcloud/eingang/xta/XtaApplication.java  | 43 +++++++++++++++++++
 .../de/ozgcloud/eingang/xta/XtaRunner.java    |  5 +--
 .../eingang/xta/SemantikAdapterITCase.java    |  3 --
 .../eingang/xta/XtaApplicationTest.java       |  8 +---
 .../de/ozgcloud/eingang/xta/XtaITCase.java    |  7 ---
 7 files changed, 47 insertions(+), 37 deletions(-)
 delete mode 100644 src/main/java/de/ozgcloud/eingang/xta/ShutdownService.java
 create mode 100644 src/main/java/de/ozgcloud/eingang/xta/XtaApplication.java

diff --git a/pom.xml b/pom.xml
index 8f260eea..2d7e6238 100644
--- a/pom.xml
+++ b/pom.xml
@@ -139,7 +139,7 @@
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 				<configuration>
-					<mainClass>de.ozgcloud.eingang.Application</mainClass>
+					<mainClass>de.ozgcloud.eingang.xta.XtaApplication</mainClass>
 				</configuration>
 				<executions>
 					<execution>
diff --git a/src/main/java/de/ozgcloud/eingang/xta/ShutdownService.java b/src/main/java/de/ozgcloud/eingang/xta/ShutdownService.java
deleted file mode 100644
index 7674210d..00000000
--- a/src/main/java/de/ozgcloud/eingang/xta/ShutdownService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.eingang.xta;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.stereotype.Service;
-
-@Service
-class ShutdownService {
-
-	@Autowired
-	private ConfigurableApplicationContext context;
-
-	public void shutdown() {
-		context.close();
-	}
-}
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaApplication.java b/src/main/java/de/ozgcloud/eingang/xta/XtaApplication.java
new file mode 100644
index 00000000..063c0cc0
--- /dev/null
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaApplication.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.eingang.xta;
+
+import java.util.TimeZone;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+import de.ozgcloud.eingang.Application;
+
+@SpringBootApplication(scanBasePackages = { "de.ozgcloud" })
+@EnableScheduling
+public class XtaApplication extends Application {
+
+	public static void main(String[] args) {
+		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+		var appContext = SpringApplication.run(XtaApplication.class, args);
+		SpringApplication.exit(appContext);
+	}
+}
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java b/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java
index dcd9c805..7f095f77 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java
@@ -41,13 +41,12 @@ class XtaRunner implements ApplicationListener<ContextRefreshedEvent> {
 	private XtaService service;
 	@Autowired
 	private SemantikAdapter semantikAdapter;
-	@Autowired
-	private ShutdownService shutdownService;
+
 	@Override
 	public void onApplicationEvent(ContextRefreshedEvent event) {
 		LOG.info("Fetching XTA Messages");
 		runGetXtaMessages();
-		shutdownService.shutdown();
+		// shutdownService.shutdown();
 	}
 
 	void runGetXtaMessages() {
diff --git a/src/test/java/de/ozgcloud/eingang/xta/SemantikAdapterITCase.java b/src/test/java/de/ozgcloud/eingang/xta/SemantikAdapterITCase.java
index b6138a47..7d2b295b 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/SemantikAdapterITCase.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/SemantikAdapterITCase.java
@@ -49,9 +49,6 @@ class SemantikAdapterITCase {
 	@MockitoBean
 	private VorgangService vorgangService;
 
-	@MockitoBean
-	private ShutdownService shutdownService;
-
 	@Nested
 	class TestForFim {
 		private final Map<String, Object> excpectedFormDataMap = FimFormDataTestFactory.FORM_DATA_MAP;
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java
index b5ad0c2b..cd81ff83 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java
@@ -28,17 +28,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.bean.override.mockito.MockitoBean;
-
-import de.ozgcloud.eingang.Application;
 
 @ActiveProfiles({ "local", "itcase" })
-@SpringBootTest(classes = Application.class)
+@SpringBootTest(classes = XtaApplication.class)
 class XtaApplicationTest {
 
-	@MockitoBean
-	private ShutdownService shutdownService;
-
 	@Test
 	void startup() {
 		// should start without exception
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java b/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
index a8b18a8a..92b71131 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
@@ -85,8 +85,6 @@ class XtaITCase {
 
 	@MockitoBean
 	private XtaRemoteService xtaRemoteService;
-	@MockitoBean
-	private ShutdownService shutdownService;
 
 	@Captor
 	private ArgumentCaptor<FormData> formDataArgumentCaptor;
@@ -116,11 +114,6 @@ class XtaITCase {
 			doReturn("vorgangId(unused)").when(vorgangRemoteService).createVorgang(any(), any(), any(), any());
 		}
 
-		@DisplayName("should shut down context after processing")
-		void shouldShutdownContextAfterProcessing() {
-			verify(shutdownService, times(1)).shutdown();
-		}
-
 		@DisplayName("should have three representations with pdf")
 		@TestZipFileNamesWithPdf
 		void shouldHaveThreeRepresentationsWithPdf(String zipFileName) {
-- 
GitLab