Remove service annotation for ImperativeBluePrintWorkflowService 35/109435/2
authorJozsef Csongvai <jozsef.csongvai@bell.ca>
Mon, 22 Jun 2020 21:24:39 +0000 (17:24 -0400)
committerKAPIL SINGAL <ks220y@att.com>
Wed, 24 Jun 2020 02:49:33 +0000 (02:49 +0000)
Even with the PROTOTYPE_SCOPE annotation the bean was in effect
a Singleton, as it was only injected in one other service. The
class has field variables which would be shared by every thread,
potentially causing severe errors under parallel execution.

Removed annotations to disable dependency injection, and instead
create a new instance with every execution call.

Issue-ID: CCSDK-2473
Signed-off-by: Jozsef Csongvai <jozsef.csongvai@bell.ca>
Change-Id: I9e7148540781dcd869d55d932f4187c5f81cb3f5

ms/blueprintsprocessor/modules/services/workflow-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/ImperativeWorkflowExecutionService.kt
ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/ImperativeWorkflowExecutionServiceTest.kt

index 06100f1..2aa4085 100644 (file)
@@ -31,17 +31,14 @@ import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintWorkflow
 import org.onap.ccsdk.cds.controllerblueprints.core.logger
 import org.onap.ccsdk.cds.controllerblueprints.core.service.AbstractBluePrintWorkFlowService
 import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
-import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintWorkFlowService
 import org.onap.ccsdk.cds.controllerblueprints.core.service.NodeExecuteMessage
 import org.onap.ccsdk.cds.controllerblueprints.core.service.NodeSkipMessage
 import org.onap.ccsdk.cds.controllerblueprints.core.service.WorkflowExecuteMessage
-import org.springframework.beans.factory.config.ConfigurableBeanFactory
-import org.springframework.context.annotation.Scope
 import org.springframework.stereotype.Service
 
 @Service("imperativeWorkflowExecutionService")
 class ImperativeWorkflowExecutionService(
-    private val imperativeBluePrintWorkflowService: BluePrintWorkFlowService<ExecutionServiceInput, ExecutionServiceOutput>
+    private val nodeTemplateExecutionService: NodeTemplateExecutionService
 ) :
     BluePrintWorkflowExecutionService<ExecutionServiceInput, ExecutionServiceOutput> {
 
@@ -57,15 +54,11 @@ class ImperativeWorkflowExecutionService(
 
         val graph = bluePrintContext.workflowByName(workflowName).asGraph()
 
-        return imperativeBluePrintWorkflowService.executeWorkflow(
-            graph, bluePrintRuntimeService,
-            executionServiceInput
-        )
+        return ImperativeBluePrintWorkflowService(nodeTemplateExecutionService)
+                .executeWorkflow(graph, bluePrintRuntimeService, executionServiceInput)
     }
 }
 
-@Service
-@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
 open class ImperativeBluePrintWorkflowService(private val nodeTemplateExecutionService: NodeTemplateExecutionService) :
     AbstractBluePrintWorkFlowService<ExecutionServiceInput, ExecutionServiceOutput>() {
 
index 1d4738c..c200f4a 100644 (file)
@@ -119,8 +119,7 @@ class ImperativeWorkflowExecutionServiceTest {
                     ExecutionServiceInput::class.java
                 )!!
 
-            val bluePrintWorkFlowService = ImperativeBluePrintWorkflowService(NodeTemplateExecutionService(mockk()))
-            val imperativeWorkflowExecutionService = ImperativeWorkflowExecutionService(bluePrintWorkFlowService)
+            val imperativeWorkflowExecutionService = ImperativeWorkflowExecutionService(NodeTemplateExecutionService(mockk()))
             val output = imperativeWorkflowExecutionService
                 .executeBluePrintWorkflow(bluePrintRuntimeService, executionServiceInput, hashMapOf())
             assertNotNull(output, "failed to get imperative workflow output")