feat: replace process definition graphs when no instance is running
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+2
-7
@@ -3,7 +3,6 @@ package com.jetlumen.ordo.spring;
|
||||
import com.jetlumen.ordo.api.OrdoEngine;
|
||||
import com.jetlumen.ordo.api.ProcessDefinition;
|
||||
import com.jetlumen.ordo.api.ProcessDefinitionParser;
|
||||
import com.jetlumen.ordo.api.exception.DefinitionAlreadyExistsException;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.core.io.Resource;
|
||||
@@ -13,7 +12,7 @@ import org.springframework.core.io.support.ResourcePatternResolver;
|
||||
import java.io.InputStream;
|
||||
import java.util.Objects;
|
||||
|
||||
/** Loads structural JSON process definitions and registers them if absent. */
|
||||
/** Loads structural JSON process definitions and upserts them when no instance is running. */
|
||||
public final class OrdoDefinitionLoader implements ApplicationRunner {
|
||||
private final OrdoEngine engine;
|
||||
private final String location;
|
||||
@@ -49,11 +48,7 @@ public final class OrdoDefinitionLoader implements ApplicationRunner {
|
||||
} catch (RuntimeException e) {
|
||||
throw new IllegalStateException("failed to parse ordo definition from " + describe(resource), e);
|
||||
}
|
||||
try {
|
||||
engine.register(definition);
|
||||
} catch (DefinitionAlreadyExistsException ignored) {
|
||||
// classpath JSON is an import source; existing ids stay as stored
|
||||
}
|
||||
engine.replace(definition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
@@ -94,6 +94,23 @@ class OrdoJdbcAutoConfigurationTest {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void reloadsClasspathJsonDefinitionsWhenNoInstanceIsRunning() {
|
||||
withDataSourceRunner.run(context -> {
|
||||
OrdoEngine engine = context.getBean(OrdoEngine.class);
|
||||
engine.replace(ProcessDefinition.linear("leave-request-routed", "stale", List.of(
|
||||
ApprovalStep.single("lead", "Lead approval", "lee"))));
|
||||
|
||||
context.getBean(OrdoDefinitionLoader.class).load();
|
||||
|
||||
ProcessDefinition definition = context.getBean(ProcessDefinitionRepository.class)
|
||||
.findById("leave-request-routed")
|
||||
.orElseThrow();
|
||||
assertThat(definition.name()).isEqualTo("Leave request");
|
||||
assertThat(definition.steps()).hasSize(2);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void honoursUserDefinedRoutingCondition() {
|
||||
withDataSourceRunner.withUserConfiguration(CustomRoutingConditionConfig.class)
|
||||
|
||||
Reference in New Issue
Block a user