Fix deployment of workflows on start 93/86993/1
authorElena Kuleshov <evn@att.com>
Sun, 5 May 2019 11:51:49 +0000 (07:51 -0400)
committerElena Kuleshov <evn@att.com>
Sun, 5 May 2019 11:53:55 +0000 (07:53 -0400)
Fix deployment of workflows on start

Change-Id: Iaa5cb96020da20c96bedb81e0829f73c7461b67f
Issue-ID: SO-1837
Signed-off-by: Kuleshov, Elena <evn@att.com>
adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java
bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/MSOInfrastructureApplication.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/WorkflowRepository.java
mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/WorkflowRepositoryTest.java

index 51b44b0..9265e5a 100644 (file)
@@ -673,4 +673,19 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         Assert.assertNull(workflow);
     }
 
+    @Test
+    public void getWorkflowBySource_validSource_expectedOutput() {
+        List<Workflow> workflows = client.findWorkflowBySource("sdc");
+        assertTrue(workflows != null);
+        assertTrue(workflows.size() != 0);
+
+        assertEquals("testingWorkflow", workflows.get(0).getArtifactName());
+    }
+
+    @Test
+    public void getWorkflowBySource_invalidSource_nullOutput() {
+        List<Workflow> workflow = client.findWorkflowBySource("abc");
+        Assert.assertNull(workflow);
+    }
+
 }
index c61808e..8168d2a 100644 (file)
@@ -24,14 +24,14 @@ package org.onap.so.bpmn.infrastructure;
 
 import java.util.List;
 import java.util.concurrent.Executor;
-import org.camunda.bpm.application.PostDeploy;
+import javax.annotation.PostConstruct;
 import org.camunda.bpm.application.PreUndeploy;
 import org.camunda.bpm.application.ProcessApplicationInfo;
 import org.camunda.bpm.engine.ProcessEngine;
 import org.camunda.bpm.engine.repository.DeploymentBuilder;
 import org.onap.so.bpmn.common.DefaultToShortClassNameBeanNameGenerator;
 import org.onap.so.db.catalog.beans.Workflow;
-import org.onap.so.db.catalog.data.repository.WorkflowRepository;
+import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.logging.jaxrs.filter.MDCTaskDecorator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,13 +39,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScan.Filter;
 import org.springframework.context.annotation.FilterType;
 import org.springframework.context.annotation.Primary;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
@@ -56,17 +54,17 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
 @SpringBootApplication
 @EnableAsync
-@EnableJpaRepositories("org.onap.so.db.catalog.data.repository")
-@EntityScan({"org.onap.so.db.catalog.beans"})
 @ComponentScan(basePackages = {"org.onap"}, nameGenerator = DefaultToShortClassNameBeanNameGenerator.class,
         excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = SpringBootApplication.class)})
 
 public class MSOInfrastructureApplication {
 
     private static final Logger logger = LoggerFactory.getLogger(MSOInfrastructureApplication.class);
+    @Autowired
+    private ProcessEngine processEngine;
 
     @Autowired
-    private WorkflowRepository workflowRepository;
+    private CatalogDbClient catalogDbClient;
 
     @Value("${mso.async.core-pool-size}")
     private int corePoolSize;
@@ -79,6 +77,7 @@ public class MSOInfrastructureApplication {
 
     private static final String LOGS_DIR = "logs_dir";
     private static final String BPMN_SUFFIX = ".bpmn";
+    private static final String SDC_SOURCE = "sdc";
 
 
     private static void setLogsDir() {
@@ -93,10 +92,14 @@ public class MSOInfrastructureApplication {
         setLogsDir();
     }
 
-    @PostDeploy
-    public void postDeploy(ProcessEngine processEngineInstance) {
-        DeploymentBuilder deploymentBuilder = processEngineInstance.getRepositoryService().createDeployment();
-        deployCustomWorkflows(deploymentBuilder);
+    @PostConstruct
+    public void postConstruct() {
+        try {
+            DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
+            deployCustomWorkflows(deploymentBuilder);
+        } catch (Exception e) {
+            logger.warn("Unable to invoke deploymentBuilder: " + e.getMessage());
+        }
     }
 
     @PreUndeploy
@@ -117,23 +120,26 @@ public class MSOInfrastructureApplication {
     }
 
     public void deployCustomWorkflows(DeploymentBuilder deploymentBuilder) {
-        if (workflowRepository == null) {
-            return;
-        }
-        List<Workflow> workflows = workflowRepository.findAll();
-        if (workflows != null && workflows.size() != 0) {
-            for (Workflow workflow : workflows) {
-                String workflowName = workflow.getName();
-                String workflowBody = workflow.getBody();
-                if (!workflowName.endsWith(BPMN_SUFFIX)) {
-                    workflowName += BPMN_SUFFIX;
-                }
-                if (workflowBody != null) {
-                    logger.info("{} {}", "Deploying custom workflow", workflowName);
-                    deploymentBuilder.addString(workflowName, workflowBody);
+        logger.debug("Attempting to deploy custom workflows");
+        try {
+            List<Workflow> workflows = catalogDbClient.findWorkflowBySource(SDC_SOURCE);
+            if (workflows != null && workflows.size() != 0) {
+                for (Workflow workflow : workflows) {
+                    String workflowName = workflow.getName();
+                    String workflowBody = workflow.getBody();
+                    if (!workflowName.endsWith(BPMN_SUFFIX)) {
+                        workflowName += BPMN_SUFFIX;
+                    }
+                    if (workflowBody != null) {
+                        logger.info("{} {}", "Deploying custom workflow", workflowName);
+                        deploymentBuilder.addString(workflowName, workflowBody);
+                    }
                 }
+                deploymentBuilder.enableDuplicateFiltering(true);
+                deploymentBuilder.deploy();
             }
-            deploymentBuilder.deploy();
+        } catch (Exception e) {
+            logger.warn("Unable to deploy custom workflows, " + e.getMessage());
         }
     }
 }
index 1920046..ab5fdb9 100644 (file)
@@ -145,6 +145,7 @@ public class CatalogDbClient {
     private static final String CLOUD_VERSION = "cloudVersion";
     private static final String HOMING_INSTANCE = "/homingInstance";
     private static final String ARTIFACT_UUID = "artifactUUID";
+    private static final String SOURCE = "source";
 
     private static final String TARGET_ENTITY = "SO:CatalogDB";
     private static final String ASTERISK = "*";
@@ -191,6 +192,7 @@ public class CatalogDbClient {
     private String findPnfResourceCustomizationByModelUuid = "/findPnfResourceCustomizationByModelUuid";
     private String findWorkflowByArtifactUUID = "/findByArtifactUUID";
     private String findWorkflowByModelUUID = "/findWorkflowByModelUUID";
+    private String findWorkflowBySource = "/findBySource";
     private String findVnfResourceCustomizationByModelUuid = "/findVnfResourceCustomizationByModelUuid";
 
     private String serviceURI;
@@ -333,6 +335,7 @@ public class CatalogDbClient {
 
         findWorkflowByArtifactUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByArtifactUUID;
         findWorkflowByModelUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByModelUUID;
+        findWorkflowBySource = endpoint + WORKFLOW + SEARCH + findWorkflowBySource;
 
         findVnfResourceCustomizationByModelUuid =
                 endpoint + VNF_RESOURCE_CUSTOMIZATION + SEARCH + findVnfResourceCustomizationByModelUuid;
@@ -889,4 +892,9 @@ public class CatalogDbClient {
         return this.getMultipleResources(workflowClient, getUri(UriBuilder.fromUri(findWorkflowByModelUUID)
                 .queryParam(VNF_RESOURCE_MODEL_UUID, vnfResourceModelUUID).build().toString()));
     }
+
+    public List<Workflow> findWorkflowBySource(String source) {
+        return this.getMultipleResources(workflowClient,
+                getUri(UriBuilder.fromUri(findWorkflowBySource).queryParam(SOURCE, source).build().toString()));
+    }
 }
index 89df521..8bcc60c 100644 (file)
@@ -31,6 +31,8 @@ public interface WorkflowRepository extends JpaRepository<Workflow, Integer> {
 
     Workflow findByArtifactUUID(String artifactUUID);
 
+    List<Workflow> findBySource(String source);
+
     /**
      * Used to fetch the @{link Workflow} by the Model UUID.
      *
index 547b8e5..171d4b2 100644 (file)
@@ -44,4 +44,14 @@ public class WorkflowRepositoryTest extends BaseTest {
         Assert.assertTrue("testingWorkflow".equals(workflows.get(0).getArtifactName()));
     }
 
+    @Test
+    public void findBySourceTest() throws Exception {
+        List<Workflow> workflows = workflowRepository.findBySource("sdc");
+
+        Assert.assertTrue(workflows != null);
+        Assert.assertTrue(workflows.size() != 0);
+
+        Assert.assertTrue("testingWorkflow".equals(workflows.get(0).getArtifactName()));
+    }
+
 }