Skip to content

Commit

Permalink
Merge 24e28aa into 7028bfe
Browse files Browse the repository at this point in the history
  • Loading branch information
dahedgehog committed May 17, 2019
2 parents 7028bfe + 24e28aa commit 9ccb90e
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 9 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -35,7 +34,7 @@ public class WorkflowDefinitionService {
private static final Logger logger = getLogger(WorkflowDefinitionService.class);

private AbstractResource nonSpringWorkflowsListing;
private final Map<String, AbstractWorkflowDefinition<? extends WorkflowState>> workflowDefitions = new LinkedHashMap<>();
private final Map<String, AbstractWorkflowDefinition<? extends WorkflowState>> workflowDefinitions = new LinkedHashMap<>();
private final WorkflowDefinitionDao workflowDefinitionDao;
private final boolean persistWorkflowDefinitions;

Expand All @@ -50,7 +49,7 @@ public WorkflowDefinitionService(WorkflowDefinitionDao workflowDefinitionDao, En
* @param workflowDefinitions The workflow definitions to be added.
*/
@Autowired(required = false)
public void setWorkflowDefinitions(Collection<WorkflowDefinition<? extends WorkflowState>> workflowDefinitions) {
public void setWorkflowDefinitions(Collection<AbstractWorkflowDefinition<? extends WorkflowState>> workflowDefinitions) {
for (AbstractWorkflowDefinition<? extends WorkflowState> wd : workflowDefinitions) {
addWorkflowDefinition(wd);
}
Expand All @@ -67,15 +66,15 @@ 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);
}

/**
* Return all managed workflow definitions.
* @return List of workflow definitions.
*/
public List<AbstractWorkflowDefinition<? extends WorkflowState>> getWorkflowDefinitions() {
return new ArrayList<>(workflowDefitions.values());
return new ArrayList<>(workflowDefinitions.values());
}

/**
Expand All @@ -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);
}
}
Expand All @@ -103,14 +102,14 @@ private void initNonSpringWorkflowDefinitions() throws IOException, ReflectiveOp
while ((row = br.readLine()) != null) {
logger.info("Preparing workflow {}", row);
@SuppressWarnings("unchecked")
Class<WorkflowDefinition<? extends WorkflowState>> clazz = (Class<WorkflowDefinition<? extends WorkflowState>>) Class.forName(row);
Class<AbstractWorkflowDefinition<? extends WorkflowState>> clazz = (Class<AbstractWorkflowDefinition<? extends WorkflowState>>) Class.forName(row);
addWorkflowDefinition(clazz.getDeclaredConstructor().newInstance());
}
}
}

public void addWorkflowDefinition(AbstractWorkflowDefinition<? extends WorkflowState> wd) {
AbstractWorkflowDefinition<? extends WorkflowState> conflict = workflowDefitions.put(wd.getType(), wd);
AbstractWorkflowDefinition<? extends WorkflowState> 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());
Expand Down

0 comments on commit 9ccb90e

Please sign in to comment.