|
39 | 39 | import java.util.ServiceLoader.Provider; |
40 | 40 | import java.util.concurrent.ConcurrentHashMap; |
41 | 41 | import java.util.concurrent.ExecutorService; |
42 | | -import java.util.concurrent.Executors; |
43 | 42 | import java.util.stream.Collectors; |
| 43 | +import org.slf4j.Logger; |
| 44 | +import org.slf4j.LoggerFactory; |
44 | 45 |
|
45 | 46 | public class WorkflowApplication implements AutoCloseable { |
46 | 47 |
|
| 48 | + private static final Logger logger = LoggerFactory.getLogger(WorkflowApplication.class); |
| 49 | + |
47 | 50 | private final TaskExecutorFactory taskFactory; |
48 | 51 | private final ExpressionFactory exprFactory; |
49 | 52 | private final ResourceLoaderFactory resourceLoaderFactory; |
@@ -137,7 +140,7 @@ public SchemaValidator getValidator(SchemaInline inline) { |
137 | 140 | private SchemaValidatorFactory schemaValidatorFactory; |
138 | 141 | private WorkflowPositionFactory positionFactory = () -> new QueueWorkflowPosition(); |
139 | 142 | private WorkflowIdFactory idFactory = () -> UlidCreator.getMonotonicUlid().toString(); |
140 | | - private ExecutorServiceFactory executorFactory = () -> Executors.newCachedThreadPool(); |
| 143 | + private ExecutorServiceFactory executorFactory = new ExecutorServiceHolder(); |
141 | 144 | private EventConsumer<?, ?> eventConsumer = InMemoryEvents.get(); |
142 | 145 | private EventPublisher eventPublisher = InMemoryEvents.get(); |
143 | 146 | private RuntimeDescriptorFactory descriptorFactory = |
@@ -236,12 +239,23 @@ public WorkflowDefinition workflowDefinition(Workflow workflow) { |
236 | 239 |
|
237 | 240 | @Override |
238 | 241 | public void close() { |
| 242 | + safeClose(executorFactory); |
| 243 | + safeClose(eventPublisher); |
| 244 | + safeClose(eventConsumer); |
239 | 245 | for (WorkflowDefinition definition : definitions.values()) { |
240 | | - definition.close(); |
| 246 | + safeClose(definition); |
241 | 247 | } |
242 | 248 | definitions.clear(); |
243 | 249 | } |
244 | 250 |
|
| 251 | + private void safeClose(AutoCloseable closeable) { |
| 252 | + try { |
| 253 | + closeable.close(); |
| 254 | + } catch (Exception ex) { |
| 255 | + logger.warn("Error closing resource {}", closeable.getClass().getName(), ex); |
| 256 | + } |
| 257 | + } |
| 258 | + |
245 | 259 | public WorkflowPositionFactory positionFactory() { |
246 | 260 | return positionFactory; |
247 | 261 | } |
|
0 commit comments