Skip to content

Commit 4873879

Browse files
committed
[Fix #722] Close executor service if created
Signed-off-by: fjtirado <[email protected]>
1 parent 9f7b967 commit 4873879

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

impl/core/src/main/java/io/serverlessworkflow/impl/DefaultExecutorServiceFactory.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,17 @@
2121
public class DefaultExecutorServiceFactory implements ExecutorServiceFactory {
2222

2323
private static final ExecutorServiceFactory instance = new DefaultExecutorServiceFactory();
24+
private static boolean serviceLoaded;
2425

2526
public static ExecutorServiceFactory instance() {
2627
return instance;
2728
}
2829

2930
private static class ExecutorServiceHolder {
31+
static {
32+
serviceLoaded = true;
33+
}
34+
3035
private static ExecutorService instance = Executors.newCachedThreadPool();
3136
}
3237

@@ -36,4 +41,11 @@ public ExecutorService get() {
3641
}
3742

3843
private DefaultExecutorServiceFactory() {}
44+
45+
@Override
46+
public void close() {
47+
if (serviceLoaded) {
48+
ExecutorServiceHolder.instance.shutdownNow();
49+
}
50+
}
3951
}

impl/core/src/main/java/io/serverlessworkflow/impl/ExecutorServiceFactory.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
import java.util.concurrent.ExecutorService;
1919
import java.util.function.Supplier;
2020

21-
@FunctionalInterface
22-
public interface ExecutorServiceFactory extends Supplier<ExecutorService> {}
21+
public interface ExecutorServiceFactory extends Supplier<ExecutorService>, AutoCloseable {
22+
void close();
23+
}

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import java.util.ServiceLoader.Provider;
4040
import java.util.concurrent.ConcurrentHashMap;
4141
import java.util.concurrent.ExecutorService;
42-
import java.util.concurrent.Executors;
4342
import java.util.stream.Collectors;
4443

4544
public class WorkflowApplication implements AutoCloseable {
@@ -137,7 +136,7 @@ public SchemaValidator getValidator(SchemaInline inline) {
137136
private SchemaValidatorFactory schemaValidatorFactory;
138137
private WorkflowPositionFactory positionFactory = () -> new QueueWorkflowPosition();
139138
private WorkflowIdFactory idFactory = () -> UlidCreator.getMonotonicUlid().toString();
140-
private ExecutorServiceFactory executorFactory = () -> Executors.newCachedThreadPool();
139+
private ExecutorServiceFactory executorFactory = DefaultExecutorServiceFactory.instance();
141140
private EventConsumer<?, ?> eventConsumer = InMemoryEvents.get();
142141
private EventPublisher eventPublisher = InMemoryEvents.get();
143142
private RuntimeDescriptorFactory descriptorFactory =
@@ -236,6 +235,7 @@ public WorkflowDefinition workflowDefinition(Workflow workflow) {
236235

237236
@Override
238237
public void close() {
238+
executorFactory.close();
239239
for (WorkflowDefinition definition : definitions.values()) {
240240
definition.close();
241241
}

0 commit comments

Comments
 (0)