summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle.kts2
-rw-r--r--src/integrationTest/kotlin/dev/dnpm/etl/processor/config/AppConfigurationTest.kt7
-rw-r--r--src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt10
-rw-r--r--src/integrationTest/kotlin/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGeneratorTest.kt12
-rw-r--r--src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java23
-rw-r--r--src/main/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentService.java18
-rw-r--r--src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java6
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt48
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/config/AppKafkaConfiguration.kt2
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/config/AppRestConfiguration.kt2
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/config/AppRoutedRestConfiguration.kt2
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt6
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSender.kt10
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/RestMtbFileSender.kt6
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/RestNngmMtbFileSender.kt2
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/output/RoutedRestNngmMtbFileSender.kt4
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/pseudonym/GpasSoapPseudonymGenerator.kt6
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/pseudonym/VfpsPseudonymGenerator.kt4
-rw-r--r--src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java12
-rw-r--r--src/test/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentServiceTest.java10
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt28
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt18
22 files changed, 135 insertions, 103 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 9a08216..8e5dca0 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -25,7 +25,6 @@ val mtbModelVersion = "0.6.0"
val hapiFhirVersion = "8.10.2"
val apacheCxfVersion = "4.2.4"
val springModulithVersion = "2.1.2"
-val springRetryVersion = "2.0.13"
// Additional test versions
val mockitoKotlinVersion = "6.4.0"
@@ -75,7 +74,6 @@ dependencies {
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8")
implementation("tools.jackson.module:jackson-module-kotlin")
implementation("org.springframework.kafka:spring-kafka")
- implementation("org.springframework.retry:spring-retry:$springRetryVersion")
implementation("org.flywaydb:flyway-database-postgresql")
implementation("org.flywaydb:flyway-mysql")
implementation("commons-codec:commons-codec")
diff --git a/src/integrationTest/kotlin/dev/dnpm/etl/processor/config/AppConfigurationTest.kt b/src/integrationTest/kotlin/dev/dnpm/etl/processor/config/AppConfigurationTest.kt
index e1e9f0d..2278c3d 100644
--- a/src/integrationTest/kotlin/dev/dnpm/etl/processor/config/AppConfigurationTest.kt
+++ b/src/integrationTest/kotlin/dev/dnpm/etl/processor/config/AppConfigurationTest.kt
@@ -48,7 +48,7 @@ import org.springframework.beans.factory.getBean
import org.springframework.boot.kafka.autoconfigure.KafkaAutoConfiguration
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.context.ApplicationContext
-import org.springframework.retry.support.RetryTemplate
+import org.springframework.core.retry.RetryTemplate
import org.springframework.security.crypto.password.PasswordEncoder
import org.springframework.security.provisioning.InMemoryUserDetailsManager
import org.springframework.test.context.ContextConfiguration
@@ -331,9 +331,10 @@ class AppConfigurationTest {
val retryTemplate = context.getBean<RetryTemplate>()
assertThat(retryTemplate).isNotNull
+ var retries = 0
assertThrows<RuntimeException> {
- retryTemplate.execute<Void, RuntimeException> {
- assertThat(it.retryCount).isLessThan(maxRetryAttempts)
+ retryTemplate.execute {
+ assertThat(retries++).isLessThan(maxRetryAttempts)
throw RuntimeException()
}
}
diff --git a/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt b/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
index bbad55a..9094478 100644
--- a/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
+++ b/src/integrationTest/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
@@ -39,11 +39,11 @@ import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.core.retry.RetryPolicy
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpMethod
import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
-import org.springframework.retry.policy.SimpleRetryPolicy
-import org.springframework.retry.support.RetryTemplateBuilder
import org.springframework.test.context.ContextConfiguration
import org.springframework.test.context.TestPropertySource
import org.springframework.test.context.bean.override.mockito.MockitoBean
@@ -89,7 +89,11 @@ class RestDipMtbFileSenderTest {
) {
val restTemplate = restTemplate
val restTargetProperties = RestTargetProperties("http://localhost:9000/api", null, null)
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(1)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(0)
+ .build()
+ )
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate)
diff --git a/src/integrationTest/kotlin/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGeneratorTest.kt b/src/integrationTest/kotlin/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGeneratorTest.kt
index 78089d6..c91e8a9 100644
--- a/src/integrationTest/kotlin/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGeneratorTest.kt
+++ b/src/integrationTest/kotlin/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGeneratorTest.kt
@@ -27,11 +27,11 @@ import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
+import org.springframework.core.retry.RetryPolicy
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.HttpStatus
-import org.springframework.retry.policy.SimpleRetryPolicy
-import org.springframework.retry.support.RetryTemplateBuilder
import org.springframework.test.web.client.MockRestServiceServer
import org.springframework.test.web.client.match.MockRestRequestMatchers.method
import org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo
@@ -49,7 +49,13 @@ class GpasPseudonymGeneratorTest {
@BeforeEach
fun setup() {
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(1)).build()
+ val retryTemplate =
+ RetryTemplate(
+ RetryPolicy
+ .builder()
+ .maxRetries(0)
+ .build(),
+ )
val gPasConfigProperties =
GPasConfigProperties(CONFIGURED_URI, null, null, "test", "test2", null, null)
diff --git a/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java b/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java
index 0a00d1f..b232df1 100644
--- a/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java
+++ b/src/main/java/dev/dnpm/etl/processor/consent/GicsConsentService.java
@@ -35,12 +35,12 @@ import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.slf4j.LoggerFactory;
+import org.springframework.core.retry.RetryException;
+import org.springframework.core.retry.RetryTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
-import org.springframework.retry.TerminatedRetryException;
-import org.springframework.retry.support.RetryTemplate;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
@@ -169,7 +169,7 @@ public class GicsConsentService extends AbstractConsentService {
new HttpEntity<>(parameterAsXml, this.headersWithHttpBasicAuth());
try {
var responseEntity =
- retryTemplate.execute(ctx ->
+ retryTemplate.execute(() ->
restTemplate.exchange(
endpointUri(endpoint), HttpMethod.POST, requestEntity, String.class));
@@ -188,15 +188,20 @@ public class GicsConsentService extends AbstractConsentService {
log.error(msg);
return null;
- } catch (TerminatedRetryException terminatedRetryException) {
+ } catch (RetryException retryException) {
+ if (retryException.getCause() instanceof URISyntaxException) {
+ var msg =
+ String.format(
+ "Invalid URI for consents status request: '%s'",
+ retryException.getCause().getMessage());
+ log.error(msg);
+ return null;
+ }
+
var msg =
String.format(
"Get consents status process has been terminated. termination reason: '%s",
- terminatedRetryException.getMessage());
- log.error(msg);
- return null;
- } catch (URISyntaxException e) {
- var msg = String.format("Invalid URI for consents status request: '%s'", e.getMessage());
+ retryException.getMessage());
log.error(msg);
return null;
}
diff --git a/src/main/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentService.java b/src/main/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentService.java
index eb99ebf..9ba0591 100644
--- a/src/main/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentService.java
+++ b/src/main/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentService.java
@@ -29,11 +29,11 @@ import org.hl7.fhir.r4.model.Bundle;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import org.slf4j.LoggerFactory;
+import org.springframework.core.retry.RetryException;
+import org.springframework.core.retry.RetryTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
-import org.springframework.retry.TerminatedRetryException;
-import org.springframework.retry.support.RetryTemplate;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
@@ -129,7 +129,7 @@ public class GicsGetBroadConsentService extends AbstractConsentService {
}
final var response =
- this.retryTemplate.execute(retryContext ->
+ this.retryTemplate.execute(() ->
this.restTemplate.exchange(
uri, HttpMethod.GET, new HttpEntity<>(requestHeaders), String.class));
if (response.getStatusCode().is2xxSuccessful()) {
@@ -142,20 +142,20 @@ public class GicsGetBroadConsentService extends AbstractConsentService {
log.error(msg);
return null;
}
+ } catch (URISyntaxException e) {
+ var msg = String.format("Invalid URI for consents status request: '%s'", e.getMessage());
+ log.error(msg);
+ return null;
} catch (RestClientException e) {
var msg = String.format("Get consents status request failed reason: '%s", e.getMessage());
log.error(msg);
return null;
- } catch (TerminatedRetryException terminatedRetryException) {
+ } catch (RetryException retryException) {
var msg =
String.format(
"Get consents status process has been terminated. termination reason: '%s",
- terminatedRetryException.getMessage());
- log.error(msg);
- return null;
- } catch (URISyntaxException e) {
- var msg = String.format("Invalid URI for consents status request: '%s'", e.getMessage());
+ retryException.getMessage());
log.error(msg);
return null;
}
diff --git a/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java b/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java
index 2e8adf7..79db2c3 100644
--- a/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java
+++ b/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java
@@ -37,8 +37,8 @@ import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.retry.RetryTemplate;
import org.springframework.http.*;
-import org.springframework.retry.support.RetryTemplate;
import org.springframework.web.client.HttpClientErrorException.BadRequest;
import org.springframework.web.client.HttpClientErrorException.Unauthorized;
import org.springframework.web.client.RestTemplate;
@@ -152,8 +152,8 @@ public class GpasPseudonymGenerator implements Generator {
try {
var targetUrl = buildRequestUrl(apiEndpoint);
ResponseEntity<String> responseEntity =
- retryTemplate.execute(ctx ->
- restTemplate.exchange(targetUrl, HttpMethod.POST, requestEntity, String.class));
+ retryTemplate.execute(
+ () -> restTemplate.exchange(targetUrl, HttpMethod.POST, requestEntity, String.class));
if (responseEntity.getStatusCode().is2xxSuccessful()) {
log.debug("API request succeeded. Response: {}", responseEntity.getStatusCode());
return responseEntity;
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
index 44fd719..dba0f3c 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppConfiguration.kt
@@ -42,15 +42,10 @@ import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Conditional
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.ConfigurationCondition
+import org.springframework.core.retry.*
import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration
import org.springframework.http.converter.StringHttpMessageConverter
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter
-import org.springframework.retry.RetryCallback
-import org.springframework.retry.RetryContext
-import org.springframework.retry.RetryListener
-import org.springframework.retry.policy.SimpleRetryPolicy
-import org.springframework.retry.support.RetryTemplate
-import org.springframework.retry.support.RetryTemplateBuilder
import org.springframework.scheduling.annotation.EnableScheduling
import org.springframework.security.crypto.password.PasswordEncoder
import org.springframework.security.provisioning.InMemoryUserDetailsManager
@@ -189,24 +184,33 @@ class AppConfiguration {
@Bean
fun retryTemplate(configProperties: AppConfigProperties): RetryTemplate {
- return RetryTemplateBuilder()
- .notRetryOn(IllegalArgumentException::class.java)
- .notRetryOn(HttpClientErrorException.BadRequest::class.java)
- .notRetryOn(HttpClientErrorException.UnprocessableContent::class.java)
- .exponentialBackoff(2.seconds.toJavaDuration(), 1.25, 5.seconds.toJavaDuration())
- .customPolicy(SimpleRetryPolicy(configProperties.maxRetryAttempts))
- .withListener(
- object : RetryListener {
- override fun <T : Any, E : Throwable> onError(
- context: RetryContext,
- callback: RetryCallback<T, E>,
- throwable: Throwable,
- ) {
- logger.warn("Error occured: {}. Retrying {}", throwable.message, context.retryCount)
- }
- }
+ val retryPolicy = RetryPolicy.builder()
+ .excludes(
+ IllegalArgumentException::class.java,
+ HttpClientErrorException.BadRequest::class.java,
+ HttpClientErrorException.UnprocessableContent::class.java
)
+ .maxRetries(configProperties.maxRetryAttempts.toLong() - 1)
+ .delay(2.seconds.toJavaDuration())
+ .multiplier(1.25)
+ .maxDelay(5.seconds.toJavaDuration())
.build()
+
+ return RetryTemplate(retryPolicy).apply {
+ setRetryListener(object : RetryListener {
+ override fun onRetryableExecution(
+ retryPolicy: RetryPolicy,
+ retryable: Retryable<*>,
+ retryState: RetryState,
+ ) {
+ logger.warn(
+ "Error occured: {}. Retrying {}",
+ retryState.lastException.message,
+ retryState.retryCount
+ )
+ }
+ })
+ }
}
@ConditionalOnProperty(value = ["app.security.enable-tokens"], havingValue = "true")
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/AppKafkaConfiguration.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/AppKafkaConfiguration.kt
index aa3e6cb..df23857 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppKafkaConfiguration.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppKafkaConfiguration.kt
@@ -37,11 +37,11 @@ import org.springframework.context.ApplicationEventPublisher
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.core.annotation.Order
+import org.springframework.core.retry.RetryTemplate
import org.springframework.kafka.core.ConsumerFactory
import org.springframework.kafka.core.KafkaTemplate
import org.springframework.kafka.listener.ContainerProperties
import org.springframework.kafka.listener.KafkaMessageListenerContainer
-import org.springframework.retry.support.RetryTemplate
import reactor.core.publisher.Sinks
import tools.jackson.databind.json.JsonMapper
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/AppRestConfiguration.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/AppRestConfiguration.kt
index 7965f96..51004ff 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppRestConfiguration.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppRestConfiguration.kt
@@ -34,7 +34,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.core.annotation.Order
-import org.springframework.retry.support.RetryTemplate
+import org.springframework.core.retry.RetryTemplate
import org.springframework.web.client.RestTemplate
import reactor.core.publisher.Sinks
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/config/AppRoutedRestConfiguration.kt b/src/main/kotlin/dev/dnpm/etl/processor/config/AppRoutedRestConfiguration.kt
index f962a6c..13d7eed 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/config/AppRoutedRestConfiguration.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/config/AppRoutedRestConfiguration.kt
@@ -29,7 +29,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.core.annotation.Order
-import org.springframework.retry.support.RetryTemplate
+import org.springframework.core.retry.RetryTemplate
import org.springframework.web.client.RestTemplate
@Configuration
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt
index dd988ed..2fb1281 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSender.kt
@@ -27,8 +27,8 @@ import dev.pcvolkmer.mv64e.model.MvhMetadata
import dev.pcvolkmer.mv64e.model.PatientRecord
import org.apache.kafka.clients.producer.ProducerRecord
import org.slf4j.LoggerFactory
+import org.springframework.core.retry.RetryTemplate
import org.springframework.kafka.core.KafkaTemplate
-import org.springframework.retry.support.RetryTemplate
import tools.jackson.databind.json.JsonMapper
class KafkaMtbFileSender(
@@ -41,7 +41,7 @@ class KafkaMtbFileSender(
override fun <T> send(request: MtbFileRequest<T>): MtbFileSender.Response {
return try {
- return retryTemplate.execute<MtbFileSender.Response, Exception> {
+ return retryTemplate.execute {
val record =
ProducerRecord(
kafkaProperties.outputTopic,
@@ -79,7 +79,7 @@ class KafkaMtbFileSender(
val dummyMtbFile = PatientRecord.builder().metadata(MvhMetadata()).build()
return try {
- return retryTemplate.execute<MtbFileSender.Response, Exception> {
+ return retryTemplate.execute {
val record =
ProducerRecord(
kafkaProperties.outputTopic,
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSender.kt
index 1bcca5e..676a2e9 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSender.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSender.kt
@@ -24,18 +24,10 @@ import dev.dnpm.etl.processor.CustomMediaType
import dev.dnpm.etl.processor.PatientPseudonym
import dev.dnpm.etl.processor.config.RestTargetProperties
import dev.dnpm.etl.processor.monitoring.ReportService
-import dev.dnpm.etl.processor.monitoring.RequestStatus
-import dev.dnpm.etl.processor.monitoring.asRequestStatus
-import org.slf4j.LoggerFactory
-import org.springframework.http.HttpEntity
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpHeaders
-import org.springframework.http.HttpMethod
import org.springframework.http.MediaType
-import org.springframework.retry.support.RetryTemplate
-import org.springframework.web.client.RestClientException
-import org.springframework.web.client.RestClientResponseException
import org.springframework.web.client.RestTemplate
-import org.springframework.web.client.exchange
import org.springframework.web.util.UriComponentsBuilder
class RestDipMtbFileSender(
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/RestMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/RestMtbFileSender.kt
index c88f606..722eed3 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/RestMtbFileSender.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/RestMtbFileSender.kt
@@ -27,11 +27,11 @@ import dev.dnpm.etl.processor.monitoring.ReportService
import dev.dnpm.etl.processor.monitoring.RequestStatus
import dev.dnpm.etl.processor.monitoring.asRequestStatus
import org.slf4j.LoggerFactory
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.MediaType
-import org.springframework.retry.support.RetryTemplate
import org.springframework.web.client.RestClientException
import org.springframework.web.client.RestClientResponseException
import org.springframework.web.client.RestTemplate
@@ -52,7 +52,7 @@ abstract class RestMtbFileSender(
override fun <T> send(request: MtbFileRequest<T>): MtbFileSender.Response {
try {
- return retryTemplate.execute<MtbFileSender.Response, Exception> {
+ return retryTemplate.execute {
val headers = getHttpHeaders(request)
val entityReq = HttpEntity(request.content, headers)
val response =
@@ -85,7 +85,7 @@ abstract class RestMtbFileSender(
override fun send(request: DeleteRequest): MtbFileSender.Response {
try {
- return retryTemplate.execute<MtbFileSender.Response, Exception> {
+ return retryTemplate.execute {
val headers = getHttpHeaders(request)
val entityReq = HttpEntity(null, headers)
restTemplate.delete(deleteUrl(request.patientId), entityReq, String::class.java)
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/RestNngmMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/RestNngmMtbFileSender.kt
index 13722d2..dac291f 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/RestNngmMtbFileSender.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/RestNngmMtbFileSender.kt
@@ -23,9 +23,9 @@ package dev.dnpm.etl.processor.output
import dev.dnpm.etl.processor.PatientPseudonym
import dev.dnpm.etl.processor.config.RestTargetProperties
import dev.dnpm.etl.processor.monitoring.ReportService
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
-import org.springframework.retry.support.RetryTemplate
import org.springframework.web.client.RestTemplate
import org.springframework.web.util.UriComponentsBuilder
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/output/RoutedRestNngmMtbFileSender.kt b/src/main/kotlin/dev/dnpm/etl/processor/output/RoutedRestNngmMtbFileSender.kt
index 957645e..8c3f3bd 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/output/RoutedRestNngmMtbFileSender.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/output/RoutedRestNngmMtbFileSender.kt
@@ -27,11 +27,11 @@ import dev.dnpm.etl.processor.monitoring.asRequestStatus
import dev.pcvolkmer.mv64e.model.MtbDiagnosis
import dev.pcvolkmer.mv64e.model.PatientRecord
import org.slf4j.LoggerFactory
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.MediaType
-import org.springframework.retry.support.RetryTemplate
import org.springframework.web.client.RestClientResponseException
import org.springframework.web.client.RestTemplate
import org.springframework.web.client.exchange
@@ -67,7 +67,7 @@ class RoutedRestNngmMtbFileSender(
override fun send(request: MtbFileRequest<PatientRecord>): MtbFileSender.Response {
try {
- return retryTemplate.execute<MtbFileSender.Response, Exception> {
+ return retryTemplate.execute {
val entityReq = HttpEntity(request.content, getHttpHeaders())
val response =
restTemplate.exchange<String>(sendUrl(), HttpMethod.POST, entityReq)
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/GpasSoapPseudonymGenerator.kt b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/GpasSoapPseudonymGenerator.kt
index 589a2d4..d166065 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/GpasSoapPseudonymGenerator.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/GpasSoapPseudonymGenerator.kt
@@ -22,7 +22,7 @@ package dev.dnpm.etl.processor.pseudonym
import dev.dnpm.etl.processor.config.AppFhirConfig
import dev.dnpm.etl.processor.config.GPasConfigProperties
-import org.springframework.retry.support.RetryTemplate
+import org.springframework.core.retry.RetryTemplate
class GpasSoapPseudonymGenerator(
private val gpasCfg: GPasConfigProperties,
@@ -31,12 +31,12 @@ class GpasSoapPseudonymGenerator(
private val appFhirConfig: AppFhirConfig,
) : Generator {
override fun generate(id: String): String =
- retryTemplate.execute<String, Exception> {
+ retryTemplate.execute {
gpasSoapService.getOrCreatePseudonymFor(id, gpasCfg.patientDomain)
}
override fun generateGenomDeTan(id: String): String =
- retryTemplate.execute<String, Exception> {
+ retryTemplate.execute {
gpasSoapService.createPseudonymsFor(id, gpasCfg.genomDeTanDomain, 1).first()
}
}
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/VfpsPseudonymGenerator.kt b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/VfpsPseudonymGenerator.kt
index 0a616b5..dcfef86 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/VfpsPseudonymGenerator.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/VfpsPseudonymGenerator.kt
@@ -1,10 +1,10 @@
package dev.dnpm.etl.processor.pseudonym
import dev.dnpm.etl.processor.config.VfpsConfigProperties
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
-import org.springframework.retry.support.RetryTemplate
import org.springframework.web.client.RestClientException
import org.springframework.web.client.RestTemplate
import org.springframework.web.client.postForObject
@@ -29,7 +29,7 @@ class VfpsPseudonymGenerator(
override fun generate(id: String): String =
execute {
- retryTemplate.execute<String, Exception> {
+ retryTemplate.execute {
request(configProperties.patientNamespace, "pseudonyms", id)
}
}
diff --git a/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java b/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java
index 90c0734..7e392da 100644
--- a/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java
+++ b/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java
@@ -51,8 +51,9 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.restclient.test.autoconfigure.RestClientTest;
+import org.springframework.core.retry.RetryPolicy;
+import org.springframework.core.retry.RetryTemplate;
import org.springframework.http.MediaType;
-import org.springframework.retry.support.RetryTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.web.client.MockRestServiceServer;
@@ -88,13 +89,12 @@ class GicsConsentServiceTest {
var restTemplate = new RestTemplate();
+ var retryTemplate = new RetryTemplate(RetryPolicy.builder().maxRetries(0).build());
+
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
this.gicsConsentService =
new GicsConsentService(
- this.gIcsConfigProperties,
- RetryTemplate.builder().maxAttempts(1).build(),
- restTemplate,
- this.appFhirConfig);
+ this.gIcsConfigProperties, retryTemplate, restTemplate, this.appFhirConfig);
}
@Test
@@ -277,7 +277,7 @@ class GicsConsentServiceTest {
() ->
new GicsConsentService(
testConfigProperties,
- RetryTemplate.builder().maxAttempts(1).build(),
+ new RetryTemplate(RetryPolicy.builder().maxRetries(0).build()),
new RestTemplate(),
new AppFhirConfig()));
diff --git a/src/test/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentServiceTest.java b/src/test/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentServiceTest.java
index e97a8d4..01d05b8 100644
--- a/src/test/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentServiceTest.java
+++ b/src/test/java/dev/dnpm/etl/processor/consent/GicsGetBroadConsentServiceTest.java
@@ -42,8 +42,9 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.restclient.test.autoconfigure.RestClientTest;
+import org.springframework.core.retry.RetryPolicy;
+import org.springframework.core.retry.RetryTemplate;
import org.springframework.http.MediaType;
-import org.springframework.retry.support.RetryTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.web.client.MockRestServiceServer;
@@ -87,13 +88,12 @@ class GicsGetBroadConsentServiceTest {
var restTemplate = new RestTemplate();
+ var retryTemplyte = new RetryTemplate(RetryPolicy.builder().maxRetries(0).build());
+
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
this.service =
new GicsGetBroadConsentService(
- this.gIcsConfigProperties,
- RetryTemplate.builder().maxAttempts(1).build(),
- restTemplate,
- this.appFhirConfig);
+ this.gIcsConfigProperties, retryTemplyte, restTemplate, this.appFhirConfig);
}
@Test
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt
index 9384aae..b2a9bcd 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/output/KafkaMtbFileSenderTest.kt
@@ -43,10 +43,10 @@ import org.junit.jupiter.params.provider.MethodSource
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import org.mockito.kotlin.*
+import org.springframework.core.retry.RetryPolicy
+import org.springframework.core.retry.RetryTemplate
import org.springframework.kafka.core.KafkaTemplate
import org.springframework.kafka.support.SendResult
-import org.springframework.retry.policy.SimpleRetryPolicy
-import org.springframework.retry.support.RetryTemplateBuilder
import tools.jackson.databind.json.JsonMapper
import java.time.Instant
import java.util.*
@@ -68,7 +68,11 @@ class KafkaMtbFileSenderTest {
@BeforeEach
fun setup(@Mock kafkaTemplate: KafkaTemplate<String, String>) {
val kafkaProperties = KafkaProperties("testtopic")
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(1)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(0)
+ .build()
+ )
this.jsonMapper = JsonMapper.builder().build()
this.kafkaTemplate = kafkaTemplate
@@ -97,7 +101,11 @@ class KafkaMtbFileSenderTest {
@MethodSource("dev.dnpm.etl.processor.output.KafkaMtbFileSenderTest#requestWithResponseSource")
fun shouldRetryOnDeleteKafkaSendError(testData: TestData) {
val kafkaProperties = KafkaProperties("testtopic")
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(3)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(2)
+ .build()
+ )
this.kafkaMtbFileSender =
KafkaMtbFileSender(this.kafkaTemplate, kafkaProperties, retryTemplate, this.jsonMapper)
@@ -136,7 +144,11 @@ class KafkaMtbFileSenderTest {
@BeforeEach
fun setup(@Mock kafkaTemplate: KafkaTemplate<String, String>) {
val kafkaProperties = KafkaProperties("testtopic")
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(1)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(0)
+ .build()
+ )
this.jsonMapper = JsonMapper()
this.kafkaTemplate = kafkaTemplate
@@ -215,7 +227,11 @@ class KafkaMtbFileSenderTest {
@MethodSource("dev.dnpm.etl.processor.output.KafkaMtbFileSenderTest#requestWithResponseSource")
fun shouldRetryOnMtbFileKafkaSendError(testData: TestData) {
val kafkaProperties = KafkaProperties("testtopic")
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(3)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(2)
+ .build()
+ )
this.kafkaMtbFileSender =
KafkaMtbFileSender(this.kafkaTemplate, kafkaProperties, retryTemplate, this.jsonMapper)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
index a13c001..0899c63 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/output/RestDipMtbFileSenderTest.kt
@@ -39,12 +39,11 @@ import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.MethodSource
+import org.springframework.core.retry.RetryPolicy
+import org.springframework.core.retry.RetryTemplate
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.HttpStatus
-import org.springframework.retry.backoff.NoBackOffPolicy
-import org.springframework.retry.policy.SimpleRetryPolicy
-import org.springframework.retry.support.RetryTemplateBuilder
import org.springframework.test.web.client.ExpectedCount
import org.springframework.test.web.client.MockRestServiceServer
import org.springframework.test.web.client.match.MockRestRequestMatchers.*
@@ -70,7 +69,11 @@ class RestDipMtbFileSenderTest {
fun setup() {
val restTemplate = RestTemplate()
val restTargetProperties = RestTargetProperties("http://localhost:9000/api", null, null)
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(1)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(0)
+ .build()
+ )
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate)
@@ -118,7 +121,11 @@ class RestDipMtbFileSenderTest {
fun setup() {
val restTemplate = RestTemplate()
val restTargetProperties = RestTargetProperties("http://localhost:9000/api", null, null)
- val retryTemplate = RetryTemplateBuilder().customPolicy(SimpleRetryPolicy(1)).build()
+ val retryTemplate = RetryTemplate(
+ RetryPolicy.builder()
+ .maxRetries(0)
+ .build()
+ )
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate)
@@ -155,7 +162,6 @@ class RestDipMtbFileSenderTest {
val restTemplate = RestTemplate()
val restTargetProperties = RestTargetProperties("http://localhost:9000/api", null, null)
val retryTemplate = AppConfiguration().retryTemplate(AppConfigProperties())
- retryTemplate.setBackOffPolicy(NoBackOffPolicy())
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate)
this.restMtbFileSender =