Loading pom.xml +14 −5 Changes for pom.xml: 14 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ <parent> <groupId>org.etsi.osl.hypo.api</groupId> <artifactId>tmf.parent</artifactId> <version>0.1.0</version> <version>1.1.0</version> <!-- Signify parent lookup from artifact repository --> <relativePath/> </parent> Loading Loading @@ -51,13 +51,13 @@ <dependency> <groupId>org.etsi.osl.hypo.api</groupId> <artifactId>tmf.common</artifactId> <version>1.3.1</version> <version>1.1.0</version> </dependency> <dependency> <groupId>org.etsi.osl.hypo.api</groupId> <artifactId>tmf.schema</artifactId> <version>2.0.1</version> <version>2.4.0</version> <exclusions> <exclusion> <groupId>io.quarkus</groupId> Loading Loading @@ -113,7 +113,12 @@ <dependency> <groupId>org.jboss.pnc.logging</groupId> <artifactId>quarkus-logging-kafka</artifactId> <version>1.0.5</version> <version>3.0.4</version> </dependency> <dependency> <groupId>org.jboss.pnc.logging</groupId> <artifactId>quarkus-logging-kafka-deployment</artifactId> <version>3.0.4</version> <scope>provided</scope> </dependency> <dependency> Loading Loading @@ -153,7 +158,11 @@ <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-openapi</artifactId> </dependency> <dependency> <groupId>io.quarkiverse.openapi.generator</groupId> <artifactId>quarkus-openapi-generator-oidc</artifactId> <version>2.14.0-lts</version> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer</artifactId> Loading src/main/java/org/etsi/osl/hypo/clients/oss/kafka/incoming/OssClientListener.java +1 −1 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/kafka/incoming/OssClientListener.java: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstan import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.OSS_CLIENT_SERVICE_TERMINATION; import com.fasterxml.jackson.core.JsonProcessingException; import io.smallrye.reactive.messaging.annotations.Blocking; import io.smallrye.common.annotation.Blocking; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.util.UUID; Loading src/main/java/org/etsi/osl/hypo/clients/oss/oss/external/OpenSliceRestClientImpl.java +73 −41 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/oss/external/OpenSliceRestClientImpl.java: 73 added lines, 41 removed lines. Original line number Diff line number Diff line Loading @@ -3,11 +3,10 @@ package org.etsi.osl.hypo.clients.oss.oss.external; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import io.quarkus.oidc.client.OidcClient; import io.quarkus.oidc.client.Tokens; import io.quarkus.oidc.client.runtime.TokensHelper; import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.infrastructure.Infrastructure; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; Loading Loading @@ -47,33 +46,45 @@ public class OpenSliceRestClientImpl { */ public Uni<ServiceOrder> createServiceOrderAsUni( ServiceOrder serviceOrder, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) .map( token -> { try { ServiceOrder serviceOrderResponse; String token = getOssAccessToken(ossLifecycleData); String serviceOrderAsString = objectMapper.writer().withDefaultPrettyPrinter().writeValueAsString(serviceOrder); logger.infof("Will submit service order creation request with body %s", serviceOrderAsString); objectMapper .writer() .withDefaultPrettyPrinter() .writeValueAsString(serviceOrder); logger.infof( "Will submit service order creation request with body %s", serviceOrderAsString); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String serviceOrderResponseBodyAsString; try (Response response = openSliceRestClient.submitServiceOrder(token, serviceOrder)) { try (Response response = openSliceRestClient.submitServiceOrder(token, serviceOrder)) { serviceOrderResponseBodyAsString = response.readEntity(String.class); } serviceOrderResponse = objectMapper.readValue(serviceOrderResponseBodyAsString, ServiceOrder.class); if (logger.isDebugEnabled()) { logger.debugf( "Returning service order created %s ", objectMapper .writer() .withDefaultPrettyPrinter() .writeValueAsString(serviceOrderResponse)); return Uni.createFrom().item(serviceOrderResponse); } return serviceOrderResponse; } catch (Exception e) { logger.errorf( "service order creation failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "service order creation failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -84,24 +95,30 @@ public class OpenSliceRestClientImpl { */ public Uni<ServiceOrder> getServiceOrderByIdAsUni( String serviceOrderId, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) // Safely move off the event loop thread .map( token -> { try { logger.debugf("Will submit request GET service order with id %s", serviceOrderId); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); Response response = openSliceRestClient.getServiceOrderById(token, serviceOrderId); String serviceOrderResponseBodyAsString = response.readEntity(String.class); ServiceOrder serviceOrder = objectMapper.readValue(serviceOrderResponseBodyAsString, ServiceOrder.class); if (logger.isDebugEnabled()) { logger.debugf("Returning the retrieved Service Order %s", serviceOrder); return Uni.createFrom().item(serviceOrder); } return serviceOrder; } catch (Exception e) { logger.errorf( "service order GET request failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "service order GET request failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -112,23 +129,31 @@ public class OpenSliceRestClientImpl { * @return Service as Uni */ public Uni<Service> getServiceByIdAsUni(String serviceId, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) .map( token -> { try { logger.debugf("Will submit GET service request with id %s", serviceId); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); Response response = openSliceRestClient.getServiceFromServiceInventoryApiById(token, serviceId); String serviceResponseBodyAsString = response.readEntity(String.class); Service service = objectMapper.readValue(serviceResponseBodyAsString, Service.class); Service service = objectMapper.readValue(serviceResponseBodyAsString, Service.class); if (logger.isDebugEnabled()) { logger.debugf("Returning the retrieved Service %s", service); return Uni.createFrom().item(service); } return service; } catch (Exception e) { logger.errorf( "service GET request failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "service GET request failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -139,23 +164,31 @@ public class OpenSliceRestClientImpl { * @return Resource as Uni */ public Uni<Resource> getResourceByIdAsUni(String resourceId, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) // Safely move off the event loop thread .map( token -> { try { logger.debugf("Will submit GET resource request with id %s", resourceId); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); Response response = openSliceRestClient.getResourceFromResourceInventoryById(token, resourceId); String serviceResponseBodyAsString = response.readEntity(String.class); Resource resource = objectMapper.readValue(serviceResponseBodyAsString, Resource.class); Resource resource = objectMapper.readValue(serviceResponseBodyAsString, Resource.class); if (logger.isDebugEnabled()) { logger.debugf("Returning the retrieved Resource %s", resource); return Uni.createFrom().item(resource); } return resource; } catch (Exception e) { logger.errorf( "resource GET request failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "resource GET request failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -168,7 +201,7 @@ public class OpenSliceRestClientImpl { throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); Response response = openSliceRestClient.getServiceOrderById(token, serviceOrderId); String serviceOrderResponseBodyAsString = response.readEntity(String.class); ServiceOrder serviceOrder; Loading @@ -192,7 +225,7 @@ public class OpenSliceRestClientImpl { */ public ServiceOrder createServiceOrder( ServiceOrder serviceOrder, OssLifecycleData ossLifecycleData) throws JsonProcessingException { String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); ServiceOrder serviceOrderResponse; String serviceOrderAsString = Loading Loading @@ -240,7 +273,7 @@ public class OpenSliceRestClientImpl { ServiceOrder serviceOrder, OssLifecycleData ossLifecycleData) throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); ServiceOrder serviceOrderResponse; try (Response response = Loading @@ -260,14 +293,14 @@ public class OpenSliceRestClientImpl { * This method is used to make an HTTP call to Open Slice to update a service * * @param service - the updated service * @param serviceId * @param serviceId - the service id */ public void updateService( ServiceUpdateRequestBody service, OssLifecycleData ossLifecycleData, String serviceId) throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); try (Response response = openSliceRestClient.updateService(token, service, serviceId)) { String serviceOrderResponseBodyAsString = response.readEntity(String.class); Loading @@ -292,7 +325,7 @@ public class OpenSliceRestClientImpl { throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); Response response = openSliceRestClient.getServiceFromServiceInventoryApiById(token, serviceId); String inventoryResponseBodyAsString = response.readEntity(String.class); Service service; Loading @@ -317,7 +350,7 @@ public class OpenSliceRestClientImpl { throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); Response response = openSliceRestClient.getResourceFromResourceInventoryById(token, resourceId); String resourceResponseBodyAsString = response.readEntity(String.class); Resource resource; Loading @@ -331,26 +364,25 @@ public class OpenSliceRestClientImpl { return resource; } private String getOssAccessToken(OssLifecycleData ossLifecycleData) { private Uni<String> getOssAccessToken(OssLifecycleData ossLifecycleData) { TokensHelper tokenHelper = new TokensHelper(); Uni<OidcClient> oidcClientUni = oidcClientCreator.createOidcClient( return oidcClientCreator .createOidcClient( ossLifecycleData.getName(), ossLifecycleData.getBaseUrl(), ossLifecycleData.getOauth2ClientId(), ossLifecycleData.getOauth2ClientSecret(), ossLifecycleData.getUsername(), ossLifecycleData.getPassword(), ossLifecycleData.getOauth2TokenUri()); Tokens tokens = tokenHelper.getTokens(oidcClientUni.await().indefinitely()).await().indefinitely(); return "Bearer " + tokens.getAccessToken(); ossLifecycleData.getOauth2TokenUri()) .chain(tokenHelper::getTokens) .map(tokens -> "Bearer " + tokens.getAccessToken()); } public OpenSliceRestClient createDynamicRestClient(String baseUrl) throws MalformedURLException { if (logger.isDebugEnabled()) { logger.debugf("Request directed to OpenSlice with URL: " + baseUrl); } return QuarkusRestClientBuilder.newBuilder() .baseUrl(new URL(baseUrl)) .build(OpenSliceRestClient.class); Loading src/main/java/org/etsi/osl/hypo/clients/oss/poller/OpenSlicePoller.java +21 −8 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/poller/OpenSlicePoller.java: 21 added lines, 8 removed lines. Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ package org.etsi.osl.hypo.clients.oss.poller; import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.infrastructure.Infrastructure; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.time.Duration; Loading Loading @@ -39,11 +40,14 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for service order id %s", serviceOrderId); return Multi.createBy() .repeating() .supplier( .uni( () -> new ServiceOrderResponseSupplier( serviceOrderId, openSliceRestClientImpl, ossLifecycleData)) serviceOrderId, openSliceRestClientImpl, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading @@ -58,11 +62,14 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for service order id %s", serviceOrderId); return Multi.createBy() .repeating() .supplier( .uni( () -> new OssServiceOrderResponseSupplier( openSliceRestClientImpl, serviceOrderId, ossLifecycleData)) openSliceRestClientImpl, serviceOrderId, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading @@ -76,10 +83,13 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for service id %s", serviceId); return Multi.createBy() .repeating() .supplier( new ServiceInventorySupplier(serviceId, openSliceRestClientImpl, ossLifecycleData)) .uni( () -> new ServiceInventorySupplier(serviceId, openSliceRestClientImpl, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading @@ -95,10 +105,13 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for resource id %s", resourceId); return Multi.createBy() .repeating() .supplier( new ResourceInventorySupplier(resourceId, openSliceRestClientImpl, ossLifecycleData)) .uni( () -> new ResourceInventorySupplier(resourceId, openSliceRestClientImpl, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading src/main/java/org/etsi/osl/hypo/clients/oss/poller/OssServiceOrderResponseSupplier.java +8 −6 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/poller/OssServiceOrderResponseSupplier.java: 8 added lines, 6 removed lines. Original line number Diff line number Diff line package org.etsi.osl.hypo.clients.oss.poller; import io.smallrye.mutiny.Uni; import java.util.function.Supplier; import org.etsi.osl.hypo.clients.oss.model.OssLifecycleData; import org.etsi.osl.hypo.clients.oss.oss.external.OpenSliceRestClientImpl; import org.etsi.osl.hypo.clients.oss.oss.external.dto.svc.order.schema.ServiceOrder; import org.etsi.osl.hypo.clients.oss.oss.external.dto.svc.order.schema.ServiceOrderStateType; public class OssServiceOrderResponseSupplier implements Supplier<ServiceOrder> { public class OssServiceOrderResponseSupplier implements Supplier<Uni<ServiceOrder>> { final OpenSliceRestClientImpl openSliceRestClientImpl; final String serviceOrderId; Loading @@ -27,17 +28,18 @@ public class OssServiceOrderResponseSupplier implements Supplier<ServiceOrder> { * this method will poll the openSliceRestClient until we receive a service Order with State * COMPLETED */ public ServiceOrder get() { openSliceRestClientImpl public Uni<ServiceOrder> get() { return openSliceRestClientImpl .getServiceOrderByIdAsUni(serviceOrderId, ossLifecycleData) .subscribe() .with( .onItem() .transform( serviceOrderResponse -> { if (serviceOrderResponse.getState() != null && serviceOrderResponse.getState().equals(ServiceOrderStateType.COMPLETED)) { serviceOrder = serviceOrderResponse; return serviceOrder; } return null; }); return serviceOrder; } } Loading
pom.xml +14 −5 Changes for pom.xml: 14 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ <parent> <groupId>org.etsi.osl.hypo.api</groupId> <artifactId>tmf.parent</artifactId> <version>0.1.0</version> <version>1.1.0</version> <!-- Signify parent lookup from artifact repository --> <relativePath/> </parent> Loading Loading @@ -51,13 +51,13 @@ <dependency> <groupId>org.etsi.osl.hypo.api</groupId> <artifactId>tmf.common</artifactId> <version>1.3.1</version> <version>1.1.0</version> </dependency> <dependency> <groupId>org.etsi.osl.hypo.api</groupId> <artifactId>tmf.schema</artifactId> <version>2.0.1</version> <version>2.4.0</version> <exclusions> <exclusion> <groupId>io.quarkus</groupId> Loading Loading @@ -113,7 +113,12 @@ <dependency> <groupId>org.jboss.pnc.logging</groupId> <artifactId>quarkus-logging-kafka</artifactId> <version>1.0.5</version> <version>3.0.4</version> </dependency> <dependency> <groupId>org.jboss.pnc.logging</groupId> <artifactId>quarkus-logging-kafka-deployment</artifactId> <version>3.0.4</version> <scope>provided</scope> </dependency> <dependency> Loading Loading @@ -153,7 +158,11 @@ <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-openapi</artifactId> </dependency> <dependency> <groupId>io.quarkiverse.openapi.generator</groupId> <artifactId>quarkus-openapi-generator-oidc</artifactId> <version>2.14.0-lts</version> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer</artifactId> Loading
src/main/java/org/etsi/osl/hypo/clients/oss/kafka/incoming/OssClientListener.java +1 −1 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/kafka/incoming/OssClientListener.java: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstan import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.OSS_CLIENT_SERVICE_TERMINATION; import com.fasterxml.jackson.core.JsonProcessingException; import io.smallrye.reactive.messaging.annotations.Blocking; import io.smallrye.common.annotation.Blocking; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.util.UUID; Loading
src/main/java/org/etsi/osl/hypo/clients/oss/oss/external/OpenSliceRestClientImpl.java +73 −41 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/oss/external/OpenSliceRestClientImpl.java: 73 added lines, 41 removed lines. Original line number Diff line number Diff line Loading @@ -3,11 +3,10 @@ package org.etsi.osl.hypo.clients.oss.oss.external; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import io.quarkus.oidc.client.OidcClient; import io.quarkus.oidc.client.Tokens; import io.quarkus.oidc.client.runtime.TokensHelper; import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.infrastructure.Infrastructure; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; Loading Loading @@ -47,33 +46,45 @@ public class OpenSliceRestClientImpl { */ public Uni<ServiceOrder> createServiceOrderAsUni( ServiceOrder serviceOrder, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) .map( token -> { try { ServiceOrder serviceOrderResponse; String token = getOssAccessToken(ossLifecycleData); String serviceOrderAsString = objectMapper.writer().withDefaultPrettyPrinter().writeValueAsString(serviceOrder); logger.infof("Will submit service order creation request with body %s", serviceOrderAsString); objectMapper .writer() .withDefaultPrettyPrinter() .writeValueAsString(serviceOrder); logger.infof( "Will submit service order creation request with body %s", serviceOrderAsString); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String serviceOrderResponseBodyAsString; try (Response response = openSliceRestClient.submitServiceOrder(token, serviceOrder)) { try (Response response = openSliceRestClient.submitServiceOrder(token, serviceOrder)) { serviceOrderResponseBodyAsString = response.readEntity(String.class); } serviceOrderResponse = objectMapper.readValue(serviceOrderResponseBodyAsString, ServiceOrder.class); if (logger.isDebugEnabled()) { logger.debugf( "Returning service order created %s ", objectMapper .writer() .withDefaultPrettyPrinter() .writeValueAsString(serviceOrderResponse)); return Uni.createFrom().item(serviceOrderResponse); } return serviceOrderResponse; } catch (Exception e) { logger.errorf( "service order creation failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "service order creation failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -84,24 +95,30 @@ public class OpenSliceRestClientImpl { */ public Uni<ServiceOrder> getServiceOrderByIdAsUni( String serviceOrderId, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) // Safely move off the event loop thread .map( token -> { try { logger.debugf("Will submit request GET service order with id %s", serviceOrderId); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); Response response = openSliceRestClient.getServiceOrderById(token, serviceOrderId); String serviceOrderResponseBodyAsString = response.readEntity(String.class); ServiceOrder serviceOrder = objectMapper.readValue(serviceOrderResponseBodyAsString, ServiceOrder.class); if (logger.isDebugEnabled()) { logger.debugf("Returning the retrieved Service Order %s", serviceOrder); return Uni.createFrom().item(serviceOrder); } return serviceOrder; } catch (Exception e) { logger.errorf( "service order GET request failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "service order GET request failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -112,23 +129,31 @@ public class OpenSliceRestClientImpl { * @return Service as Uni */ public Uni<Service> getServiceByIdAsUni(String serviceId, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) .map( token -> { try { logger.debugf("Will submit GET service request with id %s", serviceId); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); Response response = openSliceRestClient.getServiceFromServiceInventoryApiById(token, serviceId); String serviceResponseBodyAsString = response.readEntity(String.class); Service service = objectMapper.readValue(serviceResponseBodyAsString, Service.class); Service service = objectMapper.readValue(serviceResponseBodyAsString, Service.class); if (logger.isDebugEnabled()) { logger.debugf("Returning the retrieved Service %s", service); return Uni.createFrom().item(service); } return service; } catch (Exception e) { logger.errorf( "service GET request failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "service GET request failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -139,23 +164,31 @@ public class OpenSliceRestClientImpl { * @return Resource as Uni */ public Uni<Resource> getResourceByIdAsUni(String resourceId, OssLifecycleData ossLifecycleData) { return getOssAccessToken(ossLifecycleData) .emitOn(Infrastructure.getDefaultWorkerPool()) // Safely move off the event loop thread .map( token -> { try { logger.debugf("Will submit GET resource request with id %s", resourceId); OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); Response response = openSliceRestClient.getResourceFromResourceInventoryById(token, resourceId); String serviceResponseBodyAsString = response.readEntity(String.class); Resource resource = objectMapper.readValue(serviceResponseBodyAsString, Resource.class); Resource resource = objectMapper.readValue(serviceResponseBodyAsString, Resource.class); if (logger.isDebugEnabled()) { logger.debugf("Returning the retrieved Resource %s", resource); return Uni.createFrom().item(resource); } return resource; } catch (Exception e) { logger.errorf( "resource GET request failed with message %s and exception %s", e.getMessage(), e); return Uni.createFrom().failure(e); "resource GET request failed with message %s and exception %s", e.getMessage(), e); throw new OssException(e.getMessage()); } }); } /** Loading @@ -168,7 +201,7 @@ public class OpenSliceRestClientImpl { throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); Response response = openSliceRestClient.getServiceOrderById(token, serviceOrderId); String serviceOrderResponseBodyAsString = response.readEntity(String.class); ServiceOrder serviceOrder; Loading @@ -192,7 +225,7 @@ public class OpenSliceRestClientImpl { */ public ServiceOrder createServiceOrder( ServiceOrder serviceOrder, OssLifecycleData ossLifecycleData) throws JsonProcessingException { String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); ServiceOrder serviceOrderResponse; String serviceOrderAsString = Loading Loading @@ -240,7 +273,7 @@ public class OpenSliceRestClientImpl { ServiceOrder serviceOrder, OssLifecycleData ossLifecycleData) throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); ServiceOrder serviceOrderResponse; try (Response response = Loading @@ -260,14 +293,14 @@ public class OpenSliceRestClientImpl { * This method is used to make an HTTP call to Open Slice to update a service * * @param service - the updated service * @param serviceId * @param serviceId - the service id */ public void updateService( ServiceUpdateRequestBody service, OssLifecycleData ossLifecycleData, String serviceId) throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); try (Response response = openSliceRestClient.updateService(token, service, serviceId)) { String serviceOrderResponseBodyAsString = response.readEntity(String.class); Loading @@ -292,7 +325,7 @@ public class OpenSliceRestClientImpl { throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); Response response = openSliceRestClient.getServiceFromServiceInventoryApiById(token, serviceId); String inventoryResponseBodyAsString = response.readEntity(String.class); Service service; Loading @@ -317,7 +350,7 @@ public class OpenSliceRestClientImpl { throws MalformedURLException { OpenSliceRestClient openSliceRestClient = createDynamicRestClient(ossLifecycleData.getBaseUrl()); String token = getOssAccessToken(ossLifecycleData); String token = getOssAccessToken(ossLifecycleData).await().indefinitely(); Response response = openSliceRestClient.getResourceFromResourceInventoryById(token, resourceId); String resourceResponseBodyAsString = response.readEntity(String.class); Resource resource; Loading @@ -331,26 +364,25 @@ public class OpenSliceRestClientImpl { return resource; } private String getOssAccessToken(OssLifecycleData ossLifecycleData) { private Uni<String> getOssAccessToken(OssLifecycleData ossLifecycleData) { TokensHelper tokenHelper = new TokensHelper(); Uni<OidcClient> oidcClientUni = oidcClientCreator.createOidcClient( return oidcClientCreator .createOidcClient( ossLifecycleData.getName(), ossLifecycleData.getBaseUrl(), ossLifecycleData.getOauth2ClientId(), ossLifecycleData.getOauth2ClientSecret(), ossLifecycleData.getUsername(), ossLifecycleData.getPassword(), ossLifecycleData.getOauth2TokenUri()); Tokens tokens = tokenHelper.getTokens(oidcClientUni.await().indefinitely()).await().indefinitely(); return "Bearer " + tokens.getAccessToken(); ossLifecycleData.getOauth2TokenUri()) .chain(tokenHelper::getTokens) .map(tokens -> "Bearer " + tokens.getAccessToken()); } public OpenSliceRestClient createDynamicRestClient(String baseUrl) throws MalformedURLException { if (logger.isDebugEnabled()) { logger.debugf("Request directed to OpenSlice with URL: " + baseUrl); } return QuarkusRestClientBuilder.newBuilder() .baseUrl(new URL(baseUrl)) .build(OpenSliceRestClient.class); Loading
src/main/java/org/etsi/osl/hypo/clients/oss/poller/OpenSlicePoller.java +21 −8 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/poller/OpenSlicePoller.java: 21 added lines, 8 removed lines. Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ package org.etsi.osl.hypo.clients.oss.poller; import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.infrastructure.Infrastructure; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.time.Duration; Loading Loading @@ -39,11 +40,14 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for service order id %s", serviceOrderId); return Multi.createBy() .repeating() .supplier( .uni( () -> new ServiceOrderResponseSupplier( serviceOrderId, openSliceRestClientImpl, ossLifecycleData)) serviceOrderId, openSliceRestClientImpl, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading @@ -58,11 +62,14 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for service order id %s", serviceOrderId); return Multi.createBy() .repeating() .supplier( .uni( () -> new OssServiceOrderResponseSupplier( openSliceRestClientImpl, serviceOrderId, ossLifecycleData)) openSliceRestClientImpl, serviceOrderId, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading @@ -76,10 +83,13 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for service id %s", serviceId); return Multi.createBy() .repeating() .supplier( new ServiceInventorySupplier(serviceId, openSliceRestClientImpl, ossLifecycleData)) .uni( () -> new ServiceInventorySupplier(serviceId, openSliceRestClientImpl, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading @@ -95,10 +105,13 @@ public class OpenSlicePoller { logger.infof("Started looping open slice for resource id %s", resourceId); return Multi.createBy() .repeating() .supplier( new ResourceInventorySupplier(resourceId, openSliceRestClientImpl, ossLifecycleData)) .uni( () -> new ResourceInventorySupplier(resourceId, openSliceRestClientImpl, ossLifecycleData) .get()) .withDelay(Duration.ofMillis(openSlicePollDelay)) .whilst(Objects::isNull) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .collect() .last(); } Loading
src/main/java/org/etsi/osl/hypo/clients/oss/poller/OssServiceOrderResponseSupplier.java +8 −6 Changes for src/main/java/org/etsi/osl/hypo/clients/oss/poller/OssServiceOrderResponseSupplier.java: 8 added lines, 6 removed lines. Original line number Diff line number Diff line package org.etsi.osl.hypo.clients.oss.poller; import io.smallrye.mutiny.Uni; import java.util.function.Supplier; import org.etsi.osl.hypo.clients.oss.model.OssLifecycleData; import org.etsi.osl.hypo.clients.oss.oss.external.OpenSliceRestClientImpl; import org.etsi.osl.hypo.clients.oss.oss.external.dto.svc.order.schema.ServiceOrder; import org.etsi.osl.hypo.clients.oss.oss.external.dto.svc.order.schema.ServiceOrderStateType; public class OssServiceOrderResponseSupplier implements Supplier<ServiceOrder> { public class OssServiceOrderResponseSupplier implements Supplier<Uni<ServiceOrder>> { final OpenSliceRestClientImpl openSliceRestClientImpl; final String serviceOrderId; Loading @@ -27,17 +28,18 @@ public class OssServiceOrderResponseSupplier implements Supplier<ServiceOrder> { * this method will poll the openSliceRestClient until we receive a service Order with State * COMPLETED */ public ServiceOrder get() { openSliceRestClientImpl public Uni<ServiceOrder> get() { return openSliceRestClientImpl .getServiceOrderByIdAsUni(serviceOrderId, ossLifecycleData) .subscribe() .with( .onItem() .transform( serviceOrderResponse -> { if (serviceOrderResponse.getState() != null && serviceOrderResponse.getState().equals(ServiceOrderStateType.COMPLETED)) { serviceOrder = serviceOrderResponse; return serviceOrder; } return null; }); return serviceOrder; } }