From 24e28aac113830de47cd332882323d85346e6179 Mon Sep 17 00:00:00 2001 From: Ilari Kontinen Date: Wed, 15 May 2019 15:03:00 +0300 Subject: [PATCH] Replace references to WorkflowDefinition with AbstractWorkflowDefinition --- CHANGELOG.md | 5 +++++ .../workflow/WorkflowInstancePreProcessor.java | 2 +- .../engine/service/WorkflowDefinitionService.java | 15 +++++++-------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a4e97b9a..2d7722cda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## 5.5.1-SNAPSHOT (future release) +**Highlights** +- Support non-enum WorkflowStates to enable, for example, Kotlin workflow definitions by extending AbstractWorkflowDefinition. + **Details** - Dependency and plugin updates: - spring 5.1.6.RELEASE @@ -9,6 +12,8 @@ - Retry workflow state processing until all steps in nFlow-side are executed successfully. This will prevent workflow instances from being locked in `executing` status, if e.g. database connection fails after locking the instance and before querying the full workflow instance information (`WorkflowStateProcessor`). - Fix #306: create empty ArrayList with default initial size - Log more executor details on startup + - Fix #311: Replace references to WorkflowDefinition with AbstractWorkflowDefinition to support non-enum WorkflowStates + - Use name() instead of toString() when getting workflow instance initial state name ## 5.5.0 (2019-04-04) diff --git a/nflow-engine/src/main/java/io/nflow/engine/internal/workflow/WorkflowInstancePreProcessor.java b/nflow-engine/src/main/java/io/nflow/engine/internal/workflow/WorkflowInstancePreProcessor.java index 3dfe2ea40..d745fa492 100644 --- a/nflow-engine/src/main/java/io/nflow/engine/internal/workflow/WorkflowInstancePreProcessor.java +++ b/nflow-engine/src/main/java/io/nflow/engine/internal/workflow/WorkflowInstancePreProcessor.java @@ -33,7 +33,7 @@ public WorkflowInstance process(WorkflowInstance instance) { } WorkflowInstance.Builder builder = new WorkflowInstance.Builder(instance); if (instance.state == null) { - builder.setState(def.getInitialState().toString()); + builder.setState(def.getInitialState().name()); } else { if (!def.isStartState(instance.state)) { throw new RuntimeException("Specified state [" + instance.state + "] is not a start state."); diff --git a/nflow-engine/src/main/java/io/nflow/engine/service/WorkflowDefinitionService.java b/nflow-engine/src/main/java/io/nflow/engine/service/WorkflowDefinitionService.java index aada9a848..f79d2a2ba 100644 --- a/nflow-engine/src/main/java/io/nflow/engine/service/WorkflowDefinitionService.java +++ b/nflow-engine/src/main/java/io/nflow/engine/service/WorkflowDefinitionService.java @@ -23,7 +23,6 @@ import io.nflow.engine.config.NFlow; import io.nflow.engine.internal.dao.WorkflowDefinitionDao; import io.nflow.engine.workflow.definition.AbstractWorkflowDefinition; -import io.nflow.engine.workflow.definition.WorkflowDefinition; import io.nflow.engine.workflow.definition.WorkflowState; /** @@ -35,7 +34,7 @@ public class WorkflowDefinitionService { private static final Logger logger = getLogger(WorkflowDefinitionService.class); private AbstractResource nonSpringWorkflowsListing; - private final Map> workflowDefitions = new LinkedHashMap<>(); + private final Map> workflowDefinitions = new LinkedHashMap<>(); private final WorkflowDefinitionDao workflowDefinitionDao; private final boolean persistWorkflowDefinitions; @@ -50,7 +49,7 @@ public WorkflowDefinitionService(WorkflowDefinitionDao workflowDefinitionDao, En * @param workflowDefinitions The workflow definitions to be added. */ @Autowired(required = false) - public void setWorkflowDefinitions(Collection> workflowDefinitions) { + public void setWorkflowDefinitions(Collection> workflowDefinitions) { for (AbstractWorkflowDefinition wd : workflowDefinitions) { addWorkflowDefinition(wd); } @@ -67,7 +66,7 @@ public void setWorkflowDefinitions(@NFlow AbstractResource nflowNonSpringWorkflo * @return The workflow definition or null if not found. */ public AbstractWorkflowDefinition getWorkflowDefinition(String type) { - return workflowDefitions.get(type); + return workflowDefinitions.get(type); } /** @@ -75,7 +74,7 @@ public AbstractWorkflowDefinition getWorkflowDefinition(String type) { * @return List of workflow definitions. */ public List> getWorkflowDefinitions() { - return new ArrayList<>(workflowDefitions.values()); + return new ArrayList<>(workflowDefinitions.values()); } /** @@ -91,7 +90,7 @@ public void postProcessWorkflowDefinitions() throws IOException, ReflectiveOpera initNonSpringWorkflowDefinitions(); } if (persistWorkflowDefinitions) { - for (AbstractWorkflowDefinition definition : workflowDefitions.values()) { + for (AbstractWorkflowDefinition definition : workflowDefinitions.values()) { workflowDefinitionDao.storeWorkflowDefinition(definition); } } @@ -103,14 +102,14 @@ private void initNonSpringWorkflowDefinitions() throws IOException, ReflectiveOp while ((row = br.readLine()) != null) { logger.info("Preparing workflow {}", row); @SuppressWarnings("unchecked") - Class> clazz = (Class>) Class.forName(row); + Class> clazz = (Class>) Class.forName(row); addWorkflowDefinition(clazz.getDeclaredConstructor().newInstance()); } } } public void addWorkflowDefinition(AbstractWorkflowDefinition wd) { - AbstractWorkflowDefinition conflict = workflowDefitions.put(wd.getType(), wd); + AbstractWorkflowDefinition conflict = workflowDefinitions.put(wd.getType(), wd); if (conflict != null) { throw new IllegalStateException("Both " + wd.getClass().getName() + " and " + conflict.getClass().getName() + " define same workflow type: " + wd.getType());