From 462e5e40d21702c568c84c23b4a5058c80f68291 Mon Sep 17 00:00:00 2001 From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com> Date: Fri, 4 Apr 2025 11:47:49 +0200 Subject: [PATCH] OZG-7573 OZG-7991 Make EingangForwarder a managed bean --- .../vorgang/redirect/EingangForwarder.java | 17 ++++++++-------- .../redirect/ForwardingRemoteService.java | 16 +++++++-------- .../redirect/ForwardingRemoteServiceTest.java | 20 +------------------ 3 files changed, 17 insertions(+), 36 deletions(-) diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java index 338af0917..6c71321b1 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java @@ -31,6 +31,10 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiFunction; import java.util.function.Function; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + import com.google.protobuf.ByteString; import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils; @@ -49,18 +53,20 @@ import de.ozgcloud.vorgang.vorgang.IncomingFileGroup; import de.ozgcloud.vorgang.vorgang.IncomingFileMapper; import io.grpc.stub.ClientCallStreamObserver; import io.grpc.stub.ClientResponseObserver; -import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +import net.devh.boot.grpc.client.inject.GrpcClient; -@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +@RequiredArgsConstructor @Log4j2 class EingangForwarder { + @GrpcClient("forwarder") private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub; private final FileService fileService; - private final IncomingFileMapper incomingFileMapper; private ForwardingResponseObserver responseObserver; @@ -69,11 +75,6 @@ class EingangForwarder { @Getter private CompletableFuture<Void> forwardFuture; - public static EingangForwarder create(RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub, FileService fileService, - IncomingFileMapper incomingFileMapper) { - return new EingangForwarder(serviceStub, fileService, incomingFileMapper); - } - public EingangForwarder forward(GrpcRouteForwarding grpcRouteForwarding, List<IncomingFileGroup> attachments, List<IncomingFile> representations) { diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java index eef4e2ca0..387491c0a 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java @@ -28,15 +28,12 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import org.springframework.beans.factory.annotation.Lookup; import org.springframework.stereotype.Service; import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc; -import de.ozgcloud.vorgang.files.FileService; -import de.ozgcloud.vorgang.vorgang.IncomingFileMapper; import de.ozgcloud.vorgang.vorgang.VorgangService; import lombok.RequiredArgsConstructor; -import net.devh.boot.grpc.client.inject.GrpcClient; @Service @RequiredArgsConstructor @@ -45,19 +42,20 @@ class ForwardingRemoteService { static final int TIMEOUT_MINUTES = 10; private final VorgangService vorgangService; private final ForwardingRequestMapper forwardingRequestMapper; - @GrpcClient("forwarder") - private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub; - private final FileService fileService; - private final IncomingFileMapper incomingFileMapper; public void forward(ForwardingRequest request) { var eingang = vorgangService.getById(request.getVorgangId()).getEingangs().getFirst(); var grpcRouteForwarding = forwardingRequestMapper.toGrpcRouteForwarding(request, eingang); - var responseFuture = EingangForwarder.create(serviceStub, fileService, incomingFileMapper).forward(grpcRouteForwarding, eingang.getAttachments(), + var responseFuture = getEingangForwarder().forward(grpcRouteForwarding, eingang.getAttachments(), eingang.getRepresentations()).getForwardFuture(); waitForCompletion(responseFuture); } + @Lookup + EingangForwarder getEingangForwarder() { + return null; // provided by Spring + } + <T> void waitForCompletion(CompletableFuture<T> responseFuture) { try { responseFuture.get(TIMEOUT_MINUTES, TimeUnit.MINUTES); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java index dce2bd91b..5ddb68d30 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java @@ -34,21 +34,16 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockedStatic; import org.mockito.Spy; import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc; import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding; -import de.ozgcloud.vorgang.files.FileService; import de.ozgcloud.vorgang.vorgang.EingangTestFactory; -import de.ozgcloud.vorgang.vorgang.IncomingFileMapper; import de.ozgcloud.vorgang.vorgang.VorgangService; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; import lombok.SneakyThrows; @@ -59,12 +54,6 @@ class ForwardingRemoteServiceTest { private VorgangService vorgangService; @Mock private ForwardingRequestMapper forwardingRequestMapper; - @Mock - private RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub; - @Mock - private FileService fileService; - @Mock - private IncomingFileMapper incomingFileMapper; @InjectMocks @Spy private ForwardingRemoteService service; @@ -75,26 +64,19 @@ class ForwardingRemoteServiceTest { private final ForwardingRequest request = ForwardingRequestTestFactory.create(); private final GrpcRouteForwarding grpcRouteForwarding = GrpcRouteForwardingTestFactory.create(); private final CompletableFuture<Void> responseFuture = new CompletableFuture<>(); - private MockedStatic<EingangForwarder> eingangForwarderMockedStatic; @Mock private EingangForwarder eingangForwarder; @BeforeEach void init() { + doReturn(eingangForwarder).when(service).getEingangForwarder(); when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); - eingangForwarderMockedStatic = mockStatic(EingangForwarder.class); - eingangForwarderMockedStatic.when(() -> EingangForwarder.create(any(), any(), any())).thenReturn(eingangForwarder); when(eingangForwarder.forward(any(), any(), any())).thenReturn(eingangForwarder); when(eingangForwarder.getForwardFuture()).thenReturn(responseFuture); when(forwardingRequestMapper.toGrpcRouteForwarding(any(), any())).thenReturn(grpcRouteForwarding); doNothing().when(service).waitForCompletion(any()); } - @AfterEach - void teardown() { - eingangForwarderMockedStatic.close(); - } - @Test void shouldGetVorgang() { service.forward(request); -- GitLab