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 338af09170c9cfbf5822fbd7255f02748667666a..6c71321b1b0c19b40ae64194cbe0bde6c552ccc4 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 eef4e2ca0fddea30b695305ca86c6f07ff2107bb..387491c0a94d7ce33e716cfa393deb11e8fa2f3b 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 dce2bd91b1be763258c94e3cbb80bfe5ae6ec86b..5ddb68d303c33cc5700ccdcf0fa608dbb34b5c63 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);