diff --git a/Dockerfile b/Dockerfile
index c0080330bc70bc04d8fc0b3134ddb3e826dd9586..0d27f756adba1e11836aa58cd6395c39db2f0c6f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,7 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk
MAINTAINER openslice.io
RUN mkdir /opt/shareclasses
RUN mkdir -p /opt/openslice/lib/
-COPY target/org.etsi.osl.osom-1.2.0.jar /opt/openslice/lib/
-COPY target/org.etsi.osl.osom-1.2.0-exec.jar /opt/openslice/lib/
+COPY target/org.etsi.osl.osom-1.3.0.jar /opt/openslice/lib/
+COPY target/org.etsi.osl.osom-1.3.0-exec.jar /opt/openslice/lib/
COPY . /opt/openslice/lib/
-CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.2.0-exec.jar"]
\ No newline at end of file
+CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.osom-1.3.0-exec.jar"]
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 441a138032f4f9968cf3a9ee09b1fdad2632ae44..c5491e41b4785e87984efde460ba1c411c87116d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.etsi.osl
org.etsi.osl.main
- 2025Q2
+ 2025Q4
../org.etsi.osl.main
diff --git a/src/main/java/org/etsi/osl/osom/lcm/ChatClient.java b/src/main/java/org/etsi/osl/osom/lcm/ChatClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd1b6ab4f1264497634c5e54924199e42bff46ae
--- /dev/null
+++ b/src/main/java/org/etsi/osl/osom/lcm/ChatClient.java
@@ -0,0 +1,66 @@
+package org.etsi.osl.osom.lcm;
+
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.ExchangeTimedOutException;
+import org.apache.camel.ProducerTemplate;
+
+@Service
+@Slf4j
+public class ChatClient {
+
+
+
+ private static final int MAX_ATTEMPTS = 3;
+
+ private final ProducerTemplate producerTemplate;
+
+ public ChatClient(ProducerTemplate producerTemplate) {
+ this.producerTemplate = producerTemplate;
+ }
+
+ /**
+ * Sends a String message to ActiveMQ and waits for a String reply.
+ * Retries up to 3 times in case of timeout.
+ *
+ * @param payload the request payload
+ * @return the response String, or "" if all attempts time out or fail
+ */
+ public String ask(String agentName, String payload, String defaultText, Integer timeOut) {
+ for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
+ try {
+ String ENDPOINT_URI =
+ "jms:queue:agents/" + agentName
+ + "?exchangePattern=InOut"
+ + "&requestTimeout=" + timeOut ; // x milliseconds timeout per attempt
+
+ String response = producerTemplate.requestBody(
+ ENDPOINT_URI,
+ payload,
+ String.class);
+
+ // If response is non-null, return it
+ if (response != null) {
+ return response;
+ }
+ } catch (CamelExecutionException ex) {
+ // Check if the underlying cause is a timeout
+ if (ex.getCause() instanceof ExchangeTimedOutException) {
+ log.warn("Timeout on attempt {} for payload {}", attempt, payload, ex);
+ } else {
+ // Non-timeout error; break or handle differently
+ log.error("Non-timeout error on attempt {}", attempt, ex);
+ break;
+ }
+ } catch (Exception ex) {
+ log.error("Unexpected error on attempt {}", attempt, ex);
+ break;
+ }
+ }
+
+ // All attempts failed or timed out
+ return "";
+ }
+
+}
diff --git a/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java b/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java
index 741676df2304f99327e3d3124c91552ad930e6a7..fbe909d3890cda193653f99f58d8c1837f349567 100644
--- a/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java
+++ b/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java
@@ -44,6 +44,7 @@ import org.etsi.osl.tmf.so641.model.ServiceOrder;
import org.etsi.osl.tmf.so641.model.ServiceOrderCreate;
import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatusCode;
@@ -1156,6 +1157,18 @@ public abstract class LcmBaseExecutor {
return "";
}
+
+ public String askAgent(String agentName,String payload, String defaultText, Integer timeOut) {
+ ChatClient chatClient = this.vars.getServiceOrderManager().getChatClient(agentName);
+ if ( chatClient !=null ) {
+ if (timeOut == null) {
+ timeOut = 60000;
+ }
+ return chatClient.ask(agentName, payload, defaultText, timeOut);
+ }else {
+ return defaultText;
+ }
+ }
static T toJsonObj(String content, TypeReference typeReference) throws IOException {
ObjectMapper mapper = new ObjectMapper();
@@ -1168,4 +1181,6 @@ public abstract class LcmBaseExecutor {
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return mapper.writeValueAsString(object);
}
+
+
}
diff --git a/src/main/java/org/etsi/osl/osom/management/GCOrchestrationCheckDeploymentService.java b/src/main/java/org/etsi/osl/osom/management/GCOrchestrationCheckDeploymentService.java
index 8f1e4d0c724a72045491d9d141d35bf8723c5156..f8e018cf834eb9cb25656cfc0d180d5db233745c 100644
--- a/src/main/java/org/etsi/osl/osom/management/GCOrchestrationCheckDeploymentService.java
+++ b/src/main/java/org/etsi/osl/osom/management/GCOrchestrationCheckDeploymentService.java
@@ -85,7 +85,7 @@ public class GCOrchestrationCheckDeploymentService implements JavaDelegate {
Resource res = serviceOrderManager.retrieveResource(rref.getId());
if ( res == null ) {
- supd.setState( ServiceStateType.TERMINATED);
+ supd.setState( ServiceStateType.INACTIVE);
execution.setVariable("serviceDeploymentFinished", Boolean.TRUE);
Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO );
return;
diff --git a/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java b/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java
index 55c4dc0746ec57949651c93b2b94607fc91a5e63..91729c3d26c37543df3b2da0afd62d484eea62a3 100644
--- a/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java
+++ b/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java
@@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory;
import org.etsi.osl.model.nfv.DeploymentDescriptor;
import org.etsi.osl.model.nfv.NetworkServiceDescriptor;
import org.etsi.osl.model.nfv.ScaleDescriptor;
+import org.etsi.osl.osom.lcm.ChatClient;
import org.etsi.osl.osom.serviceactions.NSActionRequestPayload;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO;
@@ -204,6 +205,9 @@ public class ServiceOrderManager {
@Value("${PM_MEASUREMENT_COLLECTION_JOB_UPDATE}")
private String PM_MEASUREMENT_COLLECTION_JOB_UPDATE;
+ @Autowired
+ private ChatClient chatClient;
+
@Transactional
public void processOrder(ServiceOrder serviceOrder) {
@@ -1204,6 +1208,11 @@ public class ServiceOrderManager {
return null;
}
+ public ChatClient getChatClient(String agentName) {
+
+ return chatClient;
+ }
+
diff --git a/src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java b/src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java
index 2602be868670d9edc9ab2d3551eab2a468768d99..2d30dd45a26664ce6b8d4fdfdf554568fa7a5e78 100644
--- a/src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java
+++ b/src/main/java/org/etsi/osl/osom/serviceactions/AutomaticallyHandleAction.java
@@ -67,7 +67,10 @@ public class AutomaticallyHandleAction implements JavaDelegate {
ResourceRef rr = aService.getSupportingResource().stream().findFirst().get();
Resource relatedResource = serviceOrderManager.retrieveResource( rr.getId() );
-
+ if ( relatedResource == null ) {
+ serviceOrderManager.deleteServiceActionQueueItem( item );
+ return;
+ }
ResourceUpdate aResourceUpdate = resourceToResourceUpdate(relatedResource);
//pass characteristic values from services to resource
@@ -118,7 +121,7 @@ public class AutomaticallyHandleAction implements JavaDelegate {
}
} else {
-
+ //metric deletion arrives here also
response = createNewResourceDeleteRequest(aService,
relatedResource, aResourceUpdate,
serviceOrderID );
@@ -156,11 +159,11 @@ public class AutomaticallyHandleAction implements JavaDelegate {
private ResourceUpdate resourceToResourceUpdate(Resource source) {
+ ResourceUpdate resourceUpdate = new ResourceUpdate();
if ( source == null ) {
- return null;
+ return resourceUpdate;
}
- ResourceUpdate resourceUpdate = new ResourceUpdate();
resourceUpdate.setCategory( source.getCategory() );
resourceUpdate.setDescription( source.getDescription() );